public async Task Cancel_CancellationToken_StopsIteration() { var payload = new[] { "Test1", "Test2", "Test3" }; var result = new List <string>(); var cancellationTokenSource = new CancellationTokenSource(); const int maxIterations = 2; var chainBuilder = new TestChain <string[]> { ConfigureRootAction = root => root .Each(each => each .TestInspect(onProcess: (input, _) => { result.Add(input); if (result.Count == maxIterations) { cancellationTokenSource.Cancel(); } })) }; await chainBuilder.BuildAndExecuteAsync(payload, cancellationTokenSource.Token); Assert.True(payload.Take(maxIterations).SequenceEqual(result)); }
public async Task Process_ReceivesInput() { const string payload = "Test"; var result = new List <string>(); var chainBuilder = new TestChain <string> { ConfigureRootAction = root => root.TestInspect(onProcess: (input, _) => result.Add(input)) }; await chainBuilder.BuildAndExecuteAsync(payload); Assert.Single(result, payload); }
public async Task Process_StringArray_IteratesItems() { var payload = new[] { "Test1", "Test2", "Test3" }; var result = new List <string>(); var chainBuilder = new TestChain <string[]> { ConfigureRootAction = root => root .Each(each => each .TestInspect(onProcess: (input, _) => result.Add(input))) }; await chainBuilder.BuildAndExecuteAsync(payload); Assert.True(payload.SequenceEqual(result)); }
public async Task Process_ReturnsMappedValue() { const string testInput = "SomeString"; var result = 0; var chainBuilder = new TestChain <string> { ConfigureRootAction = root => root .Map(input => input.Length) .TestInspect(onProcess: (input, _) => result = input) }; await chainBuilder.BuildAndExecuteAsync(testInput); Assert.Equal(testInput.Length, result); }
public async Task ChainExecutionStart_NotifiesHandler() { var eventTracker = new TestEventTracker <ChainExecutionStartedEvent>(); var serviceProvider = new TestServiceProvider( configureServices: services => services .AddSingleton(eventTracker), configureDaisy: daisy => daisy .AddEventHandlerSingleton <TestEventTrackerHandler <ChainExecutionStartedEvent> >() ); var chainBuilder = new TestChain <Signal> { ConfigureRootAction = root => root .Link <NoopLink <Signal>, Signal>() }; await chainBuilder.BuildAndExecuteAsync(Signal.Static, default, serviceProvider);
public async Task Process_SetsResult() { const string reason = "TestReason"; var chainBuilder = new TestChain <Signal> { ConfigureRootAction = root => root .SubChain(subChain => subChain .Complete(reason) ) .Link <ThrowingLink <Signal>, Signal>() }; var result = await chainBuilder.BuildAndExecuteAsync(Signal.Static); Assert.Equal(ExecutionResult.Completed, result); }
public async Task Process_ReturnsInput() { const string payload = "Test"; var result = new List <string>(); var chainBuilder = new TestChain <string> { ConfigureRootAction = root => root .Conditional(payload.Equals, builder => builder .Link <NoopLink <string>, string>() ) .TestInspect(onProcess: (input, _) => result.Add(input)) }; await chainBuilder.BuildAndExecuteAsync(payload); Assert.Single(result, payload); }