public void IncorrectNumberOfSplitsAndCollectorsShouldThrowException() { // GIVEN mLogs.Logs.Clear(); var injectionProvider = new IoCContainer(); injectionProvider.RegisterSingle(new List <int>()); injectionProvider.Register <TestIntSource>(); Contracts.Dependencies.Injection.RegisterInjectionProvider(injectionProvider, false); PipelineBlueprint blueprintNormal = PipelineBlueprint.CreateBlueprint(typeof(int), "Normal"); PipelineBlueprint blueprintOnlyCollect = PipelineBlueprint.CreateBlueprint(typeof(int), "OnlyCollect"); PipelineBlueprint blueprintOnlySplit = PipelineBlueprint.CreateBlueprint(typeof(int), "OnlySplit"); PipelineBlueprint blueprintSplitsMoreThanCollects = PipelineBlueprint.CreateBlueprint(typeof(int), "SplitsMoreThanCollects"); PipelineBlueprint blueprintCollectsMoreThanSplits = PipelineBlueprint.CreateBlueprint(typeof(int), "CollectsMoreThanSplits"); // WHEN Action createNormal = () => new Pipeline(blueprintNormal .Split <TestIntSource>() .Collect()); Action createOnlySplit = () => new Pipeline(blueprintOnlySplit .Split <TestIntSource>()); Action createOnlyCollect = () => new Pipeline(blueprintOnlyCollect .Collect()); Action createSplitsMoreThanCollects = () => new Pipeline(blueprintSplitsMoreThanCollects .Split <TestIntSource>() .Split <TestIntSource>() .Collect()); Action createCollectsMoreThanSplits = () => new Pipeline(blueprintCollectsMoreThanSplits .Split <TestIntSource>() .Collect() .Collect()); // THAN createNormal.ShouldNotThrow(); createOnlySplit.ShouldThrow <InvalidSplitCollectException>(); createOnlyCollect.ShouldThrow <InvalidSplitCollectException>(); createSplitsMoreThanCollects.ShouldThrow <InvalidSplitCollectException>(); createCollectsMoreThanSplits.ShouldThrow <InvalidSplitCollectException>(); }
public void SyncSpitCollectShouldWorksWell() { // GIVEN mLogs.Logs.Clear(); var ints = new List <int> { 1, 2, 3 }; var injectionProvider = new IoCContainer(); injectionProvider.RegisterSingle(ints); injectionProvider.Register <TestIntSource>(); injectionProvider.Register <TestMultiplicatorStep>(); Contracts.Dependencies.Injection.RegisterInjectionProvider(injectionProvider, false); PipelineBlueprint blueprint = PipelineBlueprint.CreateBlueprint(typeof(int), "SyncSplitCollect"); // WHEN var result = blueprint .Split <TestIntSource>() .Apply((int el) => el * 10) .Collect() .Apply((IList <UnitContext> octx) => octx.Select(el => el.GetUnit <int>())); TransferingContext tctx = new TransferingContext(); new Pipeline(result) .Process(tctx, 1) .Wait(); // THAN tctx.Exception.Should().BeNull(); tctx.GetResult <IEnumerable <int> >().ShouldBeEquivalentTo(new List <int> { 10, 20, 30 }); }
public void AsyncSpitCollectShouldWorksWell() { // GIVEN mLogs.Logs.Clear(); var ints = new List <int> { 1, 2, 3 }; var injectionProvider = new IoCContainer(); injectionProvider.RegisterSingle(ints); injectionProvider.Register <TestIntSource>(); injectionProvider.Register <TestMultiplicatorStep>(); Contracts.Dependencies.Injection.RegisterInjectionProvider(injectionProvider, false); PipelineBlueprint blueprint = PipelineBlueprint.CreateBlueprint(typeof(int), "AsyncSplitCollect"); PipelineBlueprint blueprintOther = PipelineBlueprint.CreateBlueprint(typeof(int), "OtherAsyncSplitCollect"); PipelineBlueprint blueprintOneOther = PipelineBlueprint.CreateBlueprint(typeof(int), "OneOtherAsyncSplitCollect"); // WHEN TransferingContext tctx = new TransferingContext(new Headers { { "factor", 10 } }.Dict); new Pipeline(blueprint .Split <TestIntSource>() .Apply <TestMultiplicatorStep>("multiplybyfactor") .Collect() .Apply((IList <UnitContext> octx) => octx.Select(el => el.GetUnit <int>()).ToList())) .Process(tctx, 1) .Wait(); TransferingContext otherTctx = new TransferingContext(new Headers { { "factor", 10 } }.Dict); new Pipeline(blueprintOther .Split <TestIntSource>() .Apply <TestMultiplicatorStep>("multiplybyfactor") .Collect() .Apply <TestMultiplicatorStep>("strip")) .Process(otherTctx, 1) .Wait(); TransferingContext oneAnotherTctx = new TransferingContext(new Headers { { "factor", 10 } }.Dict); new Pipeline(blueprintOneOther .Apply <TestMultiplicatorStep>("multiplybyfactor") .Split <TestIntSource>() .Apply <TestMultiplicatorStep>("multiplybyfactor") .Collect() .Apply <TestMultiplicatorStep>("strip")) .Process(oneAnotherTctx, 1) .Wait(); // THAN tctx.Exception?.InnerException.Should().BeNull(); tctx.GetResult <List <int> >().ShouldBeEquivalentTo(new List <int> { 10, 20, 30 }); otherTctx.Exception?.InnerException.Should().BeNull(); otherTctx.GetResult <List <int> >().ShouldBeEquivalentTo(new List <int> { 10, 20, 30 }); oneAnotherTctx.Exception?.InnerException.Should().BeNull(); oneAnotherTctx.GetResult <List <int> >().ShouldBeEquivalentTo(new List <int> { 10, 20, 30 }); }