public async Task Given_nodes_changing_direction_When_execute_Then_will_follow_it_commands() { var root = new LogicNode() { Name = "root" }; var childARedirectParent = new TestLogicNode() { Name = "nodeA", Parent = root, Behavior = () => new ExecutionSuccessAndRedirect(root) }; var childB = new LogicNode() { Name = "nodeB", Parent = root }; root.Children.Add(childARedirectParent); root.Children.Add(childB); var nodeAA = new LogicNode() { Name = "nodeAA", Parent = childARedirectParent }; childARedirectParent.Children.Add(nodeAA); var graph = new LogicGraph() { Root = root, ExecutionFlow = new OrderedExecutionFlow(new TestNodeExecutor()) }; var trace = new List <NodeVisitResult>(); await foreach (var visit in graph.Run()) { trace.Add(visit); } trace.Select(v => v.Node.Name).Should().Equal("root", "nodeA", "nodeB"); }
public async Task Given_nodes_stopping_flow_When_execute_Then_will_follow_it_commands() { var root = new LogicNode() { Name = "root" }; var childAStop = new TestLogicNode() { Name = "nodeA", Parent = root, Behavior = () => new ExecutionSuccessAndStop() { Result = 1 } }; var childB = new LogicNode() { Name = "nodeB", Parent = root }; root.Children.Add(childAStop); root.Children.Add(childB); var graph = new LogicGraph() { Root = root, ExecutionFlow = new OrderedExecutionFlow(new TestNodeExecutor()) }; var trace = new List <NodeVisitResult>(); await foreach (var visit in graph.Run()) { trace.Add(visit); } trace.Select(v => v.Node.Name).Should().Equal("root", "nodeA"); trace.Last().Result.As <ExecutionSuccessAndStop>().Result.Should().Be(1); }