public async void Subject_Of_Inherited_Type_Works_With_Func_Node() { var node = new FuncNode <TestObjectA>(); node.ShouldExecuteFunc = context => Task.FromResult(((TestObjectA)context.Subject).TestValueInt == 0); node.ExecutedFunc = context => { context.Subject.TestValueString = "Completed"; return(Task.FromResult(NodeResultStatus.Succeeded)); }; var testObject = new TestObjectASub(); NodeResult result = await node.ExecuteAsync(testObject); node.Status.ShouldEqual(NodeRunStatus.Completed); result.Status.ShouldEqual(NodeResultStatus.Succeeded); result.GetSubjectAs <TestObjectA>().TestValueString.ShouldEqual("Completed"); }
public async void FuncNode_With_ShouldExecute_False_Shouldnt_Run() { var node = new FuncNode <TestObjectA>(); node.AddShouldExecute(context => Task.FromResult(context.Subject.TestValueInt == 5)); node.ExecutedFunc = context => { context.Subject.TestValueString = "Completed"; return(Task.FromResult(NodeResultStatus.Succeeded)); }; var testObject = new TestObjectA(); NodeResult result = await node.ExecuteAsync(testObject); node.Status.ShouldEqual(NodeRunStatus.NotRun); result.Status.ShouldEqual(NodeResultStatus.NotRun); result.GetSubjectAs <TestObjectA>().TestValueString.ShouldBeNull(); }
public async void Successful_FuncNode_Values_Match_Expected() { var node = new FuncNode <TestObjectA>(); node.AddShouldExecute(context => Task.FromResult(context.Subject.TestValueInt == 0)); node.ExecutedFunc = context => { context.Subject.TestValueString = "Completed"; return(Task.FromResult(NodeResultStatus.Succeeded)); }; var testObject = new TestObjectA(); NodeResult result = await node.ExecuteAsync(testObject); node.Status.ShouldEqual(NodeRunStatus.Completed); result.Status.ShouldEqual(NodeResultStatus.Succeeded); result.GetSubjectAs <TestObjectA>().TestValueString.ShouldEqual("Completed"); }
public async Task Node_With_ShouldExecuteBlock_Should_Run() { var node = new FuncNode <TestObjectA>(); node.AddShouldExecuteBlock(new ShouldExecuteBlockA()); node.ExecutedFunc = context => { context.Subject.TestValueString = "Completed"; return(Task.FromResult(NodeResultStatus.Succeeded)); }; var testObject = new TestObjectA(); NodeResult result = await node.ExecuteAsync(testObject); node.Status.Should().Be(NodeRunStatus.Completed); result.Status.Should().Be(NodeResultStatus.Succeeded); result.GetSubjectAs <TestObjectA>().TestValueString.Should().Be("Completed"); }
public async Task Can_Run_Func_Node_On_Inherited_Type() { var node = new FuncNode <TestObjectA>(); node.AddShouldExecute(context => Task.FromResult(context.Subject.TestValueInt == 0)); node.ExecutedFunc = context => { context.Subject.TestValueString = "Completed"; return(Task.FromResult(NodeResultStatus.Succeeded)); }; var testObject = new TestObjectASub(); NodeResult result = await node.ExecuteAsync(testObject); node.Status.Should().Be(NodeRunStatus.Completed); result.Status.Should().Be(NodeResultStatus.Succeeded); result.GetSubjectAs <TestObjectA>().TestValueString.Should().Be("Completed"); }
public async void Deserialized_Flow_Component_Can_Be_Built_And_Run() { var containerBuilder = new ContainerBuilder(); containerBuilder.RegisterBanzaiNodes(GetType().Assembly, true); containerBuilder.RegisterBanzaiNodes(typeof(JavaScriptMetaDataBuilder).Assembly, true); var flowBuilder = new FlowBuilder <TestObjectA>(new AutofacFlowRegistrar(containerBuilder)); flowBuilder.CreateFlow("TestFlow1") .AddRoot <IPipelineNode <TestObjectA> >() .AddChild <ITestJsNode2>() .AddChild <ITestNode2>() .ForChild <ITestJsNode2>() .SetExecutedJavaScript("context.Subject.TestValueString = 'Hello JavaScript';"); var rootComponent = flowBuilder.RootComponent; var serializer = new JsonComponentSerializer(); var definition = serializer.Serialize(rootComponent); Console.WriteLine(definition); FlowComponent <TestObjectA> deserializedComponent = serializer.Deserialize <TestObjectA>(definition); deserializedComponent.ShouldNotBeNull(); flowBuilder.RootComponent = deserializedComponent; flowBuilder.Register(); var container = containerBuilder.Build(); var factory = container.Resolve <INodeFactory <TestObjectA> >(); var flowRootNode = factory.BuildFlow("TestFlow1"); NodeResult result = await flowRootNode.ExecuteAsync(new TestObjectA()); result.Status.ShouldEqual(NodeResultStatus.Succeeded); var subject = result.GetSubjectAs <TestObjectA>(); subject.TestValueString.ShouldEqual("Hello JavaScript"); }