public async Task GivenPiplelineWithThreeStages_WhenHandlingRequest_ThenAllThreeHandlersAreCalledInOrder()
        {
            var testHandlerA = new TestHandlerA <TestRequestA>();
            var testHandlerB = new TestHandlerB <TestRequestA>();
            var testHandlerC = new TestHandlerC <TestRequestA>();

            Dictionary <Type, Object> dictionary = new Dictionary <Type, object>
            {
                [typeof(TestHandlerA <TestRequestA>)] = testHandlerA,
                [typeof(TestHandlerB <TestRequestA>)] = testHandlerB,
                [typeof(TestHandlerC <TestRequestA>)] = testHandlerC,
            };

            PipelineDefinitionBuilder builder = new
                                                PipelineDefinitionBuilder(type => dictionary[type]);

            var pipeline = builder.StartWith <TestHandlerA <TestRequestA>, TestRequestA>()
                           .ThenWith <TestHandlerB <TestRequestA> >()
                           .ThenWith <TestHandlerC <TestRequestA> >()
                           .Build();

            var testRequest = new TestRequestA();

            await pipeline.HandleAsync(testRequest, new Context());

            var callOrder = new TestHandler <TestRequestA>[]
            {
                testHandlerA,
                testHandlerB,
                testHandlerC
            }.OrderBy(x => x._timestamp)
            .ToArray();

            Assert.Multiple(() =>
            {
                Assert.That(callOrder[0], Is.EqualTo(testHandlerA));
                Assert.That(callOrder[1], Is.EqualTo(testHandlerB));
                Assert.That(callOrder[2], Is.EqualTo(testHandlerC));
            });
        }
Beispiel #2
0
        public void GivenPiplelineWithThreeStages_WhenHandlingRequest_ThenAllThreeHandlersHandleRequest()
        {
            var testHandlerA = new TestHandler <TestRequestA>();
            var testHandlerB = new TestHandler <TestRequestA>();
            var testHandlerC = new TestHandler <TestRequestA>();

            var pipeline = PipelineDefinitionBuilder
                           .StartWith(testHandlerA)
                           .ThenWith(testHandlerB)
                           .ThenWith(testHandlerC)
                           .Build();

            var testRequest = new TestRequestA();
            var context     = new Context();

            pipeline.HandleAsync(testRequest, context);
            Assert.Multiple(() =>
            {
                Assert.That(testHandlerA._request, Is.EqualTo(testRequest));
                Assert.That(testHandlerB._request, Is.EqualTo(testRequest));
                Assert.That(testHandlerC._request, Is.EqualTo(testRequest));
            });
        }