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)); }); }
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)); }); }