public void Event_Triggers_Action() { var mockAction = new Mock <IAction>(); var flowDefinition = new FlowDefinition( states: new List <State>() { new State( name: "State1", events: new List <Event>() { new Event( name: "Event1", actions: new List <IAction>() { mockAction.Object } ) } ) } ); var flowInstance = new FlowInstance( currentState: "State1", flowDefinition: flowDefinition ); var result = flowInstance.SendEvent("Event1"); mockAction.Verify(action => action.Execute()); }
public void Event_Does_Not_Change_The_State() { var flowDefinition = new FlowDefinition( states: new List <State>() { new State( name: "State1", events: new List <Event>() { new Event(name: "Event1") } ) } ); var flowInstance = new FlowInstance( currentState: "State1", flowDefinition: flowDefinition ); var result = flowInstance.SendEvent("Event1"); Assert.AreEqual("State1", flowInstance.CurrentState); }
protected override void ConfigureDefinition(FlowDefinition <TextTestFlowRequest, TextTestFlowResponse> flowDefinition) { flowDefinition .Do("Activity_1", new FlowOverrideKey("Activity_1-OverrideKey", "Activity_1 override description"), new FlowActivityDefinition <BasicActivityRequest, BasicActivityResponse>()) .Do("Activity_2", new FlowActivityDefinition <TextTestActivityRequest, TextTestActivityResponse>() .SetValue(r => r.SetValue, "SetValue")) .Do("Activity_3", "Custom text", new FlowActivityDefinition <TextTestActivityRequest, TextTestActivityResponse>() .SetValue(r => r.SetValue, "SetValue")) .Check("Decision_1", new FlowOverrideKey("Decision_1-OverrideKey", "Decision_1 override description"), new FlowDecisionDefinition <BasicDecisionRequest, string>()) .Else().Continue() .Check("Decision_2", new FlowDecisionDefinition <TextTestDecisionRequest, string>() .SetValue(r => r.SetValue, "SetValue")) .Else().Continue() .Check("Decision_3", "Custom text", new FlowDecisionDefinition <TextTestDecisionRequest, string>() .SetValue(r => r.SetValue, "SetValue")) .Else().Continue() .Label("Label_1") .Label("Label_2", "Custom text") ; }
public void Action_Execution_Creates_Logs() { var mockAction = new Mock <IAction>(); var flowDefinition = new FlowDefinition( states: new List <State>() { new State( name: "State1", events: new List <Event>() { new Event( name: "Event1", actions: new List <IAction>() { mockAction.Object } ) } ) } ); var flowInstance = new FlowInstance( currentState: "State1", flowDefinition: flowDefinition ); var result = flowInstance.SendEvent("Event1"); Assert.IsTrue(result.CreatedLogs.Any(cl => cl.LogType == "Action_PostExecution")); }
protected override void ConfigureDefinition(FlowDefinition <ActivityStaticValueBindingsFlowRequest, ActivityStaticValueBindingsFlowResponse> flowDefinition) { flowDefinition .Do("BindFlowValues", new FlowActivityDefinition <StaticBindFlowValuesActivityRequest, StaticBindFlowValuesActivityResponse>() .BindInput(rq => rq.ActivityInputValue, nameof(ActivityStaticValueBindingsFlowRequest.FlowInput)) .BindOutput(rs => rs.ActivityOutputValue, nameof(ActivityStaticValueBindingsFlowResponse.FlowOutput))); }
public void There_Should_Be_No_Action_Log_If_No_Action_Executed() { var flowDefinition = new FlowDefinition( states: new List <State>() { new State( name: "State1", events: new List <Event>() { new Event(name: "Event1") } ) } ); var flowInstance = new FlowInstance( currentState: "State1", flowDefinition: flowDefinition ); { }; var result = flowInstance.SendEvent("Event1"); Assert.IsFalse(result.CreatedLogs.Any(cl => cl.LogType == "ActionLog")); }
protected override void ConfigureDefinition(FlowDefinition <SubPropertyBindingsFlowRequest, SubPropertyBindingsFlowResponse> flowDefinition) { flowDefinition .Check("Decision_1", FlowValueDecision <int?> .NewDefinition() .BindInput(rq => rq.SwitchValue, "StringValue1", (string s) => s.Length)) .When(0).End() .Else().Continue() .Check("Decision_2", FlowValueDecision <int?> .NewDefinition() .BindInput(rq => rq.SwitchValue, "StringValue2", (string s) => s.Length)) .When(0).End() .Else().Continue() .Do("Activity_1", new FlowActivityDefinition <SubPropertyBindingsActivityRequest, SubPropertyBindingsActivityResponse>() .BindInput(rq => rq.IntValue, "StringValue1", (string s) => s.Length) .BindOutput(rs => rs.IntValue, "StringValue1", i => i.ToString())) .Do("Activity_2", new FlowActivityDefinition <SubPropertyBindingsActivityRequest, SubPropertyBindingsActivityResponse>() .BindInput(rq => rq.IntValue, "StringValue2", (string s) => s.Length) .BindOutput(rs => rs.IntValue, "StringValue2", i => i.ToString())); }
public void Event_Changes_Flow_Instances_State_2() { var flowDefinition = new FlowDefinition( states: new List <State>() { new State( name: "StateA", events: new List <Event>() { new Event( name: "EventA", destinationState: "StateB" ) } ), new State(name: "StateB") } ); var flowInstance = new FlowInstance( currentState: "StateA", flowDefinition: flowDefinition ); SendEventResult result = flowInstance.SendEvent("EventA"); Assert.IsTrue(result.Succeeded); Assert.AreEqual("StateB", flowInstance.CurrentState); }
public void Undefined_Event_Returns_Unsuccessful_Result() { var flowDefinition = new FlowDefinition( states: new List <State>() { new State( name: "StateA", events: new List <Event>() { new Event(name: "EventA") } ) } ); var flowInstance = new FlowInstance( currentState: "StateA", flowDefinition: flowDefinition ); SendEventResult result = flowInstance.SendEvent("EventB"); Assert.AreEqual(false, result.Succeeded); }
protected override void ConfigureDefinition(FlowDefinition <MockedDecisionFlowRequest, MockedDecisionFlowResponse> flowDefinition) { var intValue = FlowValueDecision <int?> .NewDefinition() .BindInput(rq => rq.SwitchValue, nameof(MockedDecisionFlowRequest.IntValue)); var setOutputToX = new FlowActivityDefinition <SetStringFlowValueRequest, SetStringFlowValueResponse>() .SetValue(rq => rq.OutputValue, "X") .BindOutput(rs => rs.Output, nameof(MockedDecisionFlowResponse.BranchValue)); var setOutputToY = new FlowActivityDefinition <SetStringFlowValueRequest, SetStringFlowValueResponse>() .SetValue(rq => rq.OutputValue, "Y") .BindOutput(rs => rs.Output, nameof(MockedDecisionFlowResponse.BranchValue)); var setOutputToZ = new FlowActivityDefinition <SetStringFlowValueRequest, SetStringFlowValueResponse>() .SetValue(rq => rq.OutputValue, "Z") .BindOutput(rs => rs.Output, nameof(MockedDecisionFlowResponse.BranchValue)); flowDefinition .Check("Int_value", intValue) .When(1).Goto("Set_output_to_X") .When(2).Goto("Set_output_to_Y") .Else().Goto("Set_output_to_Z") .Do("Set_output_to_X", setOutputToX) .End() .Do("Set_output_to_Y", setOutputToY) .End() .Do("Set_output_to_Z", setOutputToZ) .End(); }
public void Flow_Instance_Construction_Wrong_State_Name_Throws_Error() { var flowDefinition = new FlowDefinition( states: new List <State>() { new State( name: "StateA", events: new List <Event>() { new Event(name: "EventA") } ) } ); FlowInstance flowInstance; var ex = Assert.Throws <FlowInstanceException>( () => { flowInstance = new FlowInstance(currentState: "StateB", flowDefinition: flowDefinition); }); }
protected override void ConfigureDefinition(FlowDefinition <DecisionWithEndFlowRequest, DecisionWithEndFlowResponse> flowDefinition) { var switchValueDecision = FlowValueDecision <string> .NewDefinition() .BindInput(rq => rq.SwitchValue, nameof(DecisionWithEndFlowRequest.StringValue)); var setOutputToX = new FlowActivityDefinition <SetStringFlowValueRequest, SetStringFlowValueResponse>() .SetValue(rq => rq.OutputValue, "X") .BindOutput(rs => rs.Output, nameof(DecisionWithEndFlowResponse.BranchValue)); var setOutputToY = new FlowActivityDefinition <SetStringFlowValueRequest, SetStringFlowValueResponse>() .SetValue(rq => rq.OutputValue, "Y") .BindOutput(rs => rs.Output, nameof(DecisionWithEndFlowResponse.BranchValue)); var setOutputToZ = new FlowActivityDefinition <SetStringFlowValueRequest, SetStringFlowValueResponse>() .SetValue(rq => rq.OutputValue, "Z") .BindOutput(rs => rs.Output, nameof(DecisionWithEndFlowResponse.BranchValue)); flowDefinition .Do("Set_output_to_X", setOutputToX) .Check("Switch_value_1", switchValueDecision) .When("A").End() .When("B").Goto("Set_output_to_Y") .Else().Continue() .Do("Set_output_to_Y", setOutputToY) .Check("Switch_value_2", switchValueDecision) .When("C").Goto("Set_output_to_Z") .Else().End() .Do("Set_output_to_Z", setOutputToZ) ; }
protected override void ConfigureDefinition(FlowDefinition <OverriddenActivityFlowRequest, OverriddenActivityFlowResponse> flowDefinition) { flowDefinition .Do("Activity", new FlowOverrideKey(OverriddenActivityFlowRequest.ActivityOverrideKey), new FlowActivityDefinition <OverridableActivityRequest, OverridableActivityResponse>() .SetValue(rq => rq.OverridableInputValue, OverriddenActivityFlowRequest.BaseValue) .SetValue(rq => rq.NonOverridableInputValue, OverriddenActivityFlowRequest.BaseValue)); }
protected override void ConfigureDefinition(FlowDefinition <ActivityOverriddenSettersFlowRequest, ActivityOverriddenSettersFlowResponse> flowDefinition) { flowDefinition .Do("SetOutputValues", new FlowActivityDefinition <OverriddenSettersActivityRequest, OverriddenSettersActivityResponse>() .BindInput(rq => rq.NonExistentSetterValue, "NonExistentValue") .BindInput(rq => rq.BoundValueWithDefault, nameof(ActivityOverriddenSettersFlowRequest.FlowNullValue)) .BindInput(rq => rq.InputValue, nameof(ActivityOverriddenSettersFlowRequest.FlowInputValue))); }
protected override void ConfigureDefinition(FlowDefinition <TestDictionaryListBindingsRequest, TestDictionaryListBindingsResponse> flowDefinition) { flowDefinition .Do("MapValues", new FlowActivityDefinition <DictionaryInputToOutputMapRequest, DictionaryInputToOutputMapResponse>() .BindInputs(rq => rq.FlowInputs, "FlowInput1", "FlowInput2") .BindOutputs(rs => rs.FlowOutputs, "FlowOutput1")); }
protected override void ConfigureDefinition(FlowDefinition <TestElseThrowRequest, TestElseThrowResponse> flowDefinition) { flowDefinition .Check("UnhandledDecisionName", NullableFlowValueDecision <string> .NewDefinition() .BindInput(rq => rq.SwitchValue, nameof(TestElseThrowRequest.Input))) .When((string)null).End() .Else().Unhandled(); }
protected override void ConfigureDefinition(FlowDefinition <OverriddenFlowRequest, OverriddenFlowResponse> flowDefinition) { flowDefinition .Do("Activity", new FlowActivityDefinition <SetStringFlowValueRequest, SetStringFlowValueResponse>() .SetValue(rq => rq.OutputValue, OverriddenFlowRequest.BaseValue) .BindOutput(rq => rq.Output, nameof(OverriddenFlowResponse.OutputValue))); }
protected override void ConfigureDefinition(FlowDefinition <TestDictionaryRegexBindingsRequest, TestDictionaryRegexBindingsResponse> flowDefinition) { flowDefinition .Do("MapValues", new FlowActivityDefinition <DictionaryInputToOutputMapRequest, DictionaryInputToOutputMapResponse>() .BindInputs(rq => rq.FlowInputs, new FlowValueRegexSelector("^FlowInput.*")) .BindOutputs(rs => rs.FlowOutputs, new FlowValueRegexSelector("^FlowOutput.*"))); }
public IFlowPlan StartFlow(FlowDefinition definition) { IFlowPlan flowPlan = CreateFlow(definition); flowPlan.Start(); return(flowPlan); }
/// <summary> /// Constructs a flow instance from a name and a flow definition string /// </summary> /// <param name="name"></param> /// <param name="definition"></param> public FlowInstance(FlowDefinition def, LogEvent log) : this(log) { OnLog += log; Name = def.Name; FlowDefinition = def.ToJson(); Flow = def.GetFlow(); AppId = def.AppId; Stitch(); }
protected override void ConfigureDefinition(FlowDefinition <LabelsAndGotosFlowRequest, LabelsAndGotosFlowResponse> flowDefinition) { flowDefinition .Goto("Label_one") .Label("Label_two") .End() .Label("Label_one") .Label("Label_three"); }
protected override void ConfigureDefinition(FlowDefinition <EnableableStepsFlowRequest, EnableableStepsFlowResponse> flowDefinition) { flowDefinition .Do("Activity_Default", new FlowActivityDefinition <EnableableActivityRequest, EnableableActivityResponse>()) .Do("Activity_Enabled", new FlowActivityDefinition <EnableableActivityRequest, EnableableActivityResponse>() .SetValue(rq => rq.IsEnabled, true)); }
protected override void ConfigureDefinition(FlowDefinition <TestDictionarySubPropertyBindingsRequest, TestDictionarySubPropertyBindingsResponse> flowDefinition) { flowDefinition .Do("MapValues", new FlowActivityDefinition <DictionarySubPropertyBindingsMappingRequest, DictionarySubPropertyBindingsMappingResponse>() .BindInputs(rq => rq.NamedFlowInputs, new FlowValueListSelector("NamedInput1", "NamedInput2"), (int v) => v + 1) .BindOutputs(rs => rs.NamedFlowOutputs, new FlowValueListSelector("NamedOutput1", "NamedOutput2"), v => v + 1) .BindInputs(rq => rq.RegexFlowInputs, new FlowValueRegexSelector("^RegexInput.*"), (int v) => v + 2) .BindOutputs(rs => rs.RegexFlowOutputs, new FlowValueRegexSelector("^RegexOutput.*"), v => v + 2) ); }
protected FlowPlanBase(FlowDefinition definition) { if (definition == null) { throw new ArgumentNullException(nameof(definition)); } Definition = definition; Logger = definition.Logger; AuditLogger = definition.AuditLogger; }
public override IFlowPlan GeneratePlan(FlowDefinition definition) { FlowPlanInternal internalPlan = new FlowPlanInternal(_actionFactory, definition); foreach (FlowProducerDefinitionBase entrypoint in definition.Entrypoints) { entrypoint.GeneratePlanItem(internalPlan); } return(internalPlan); }
protected override void ConfigureDefinition(FlowDefinition <ActivityBindingAttributesFlowRequest, ActivityBindingAttributesFlowResponse> flowDefinition) { flowDefinition .Do("Bind_inputs_and_outputs", new FlowActivityDefinition <BindingAttributesActivityRequest, BindingAttributesActivityResponse>() .SetValue(r => r.ActivityInput1Name, nameof(ActivityBindingAttributesFlowRequest.FlowInput1)) .SetValue(r => r.NamedActivityInputName, nameof(ActivityBindingAttributesFlowRequest.FlowInput2)) .SetValue(r => r.ActivityOutput1Name, nameof(ActivityBindingAttributesFlowResponse.FlowOutput1)) .SetValue(r => r.NamedActivityOutputName, nameof(ActivityBindingAttributesFlowResponse.FlowOutput2)) ); }
public FlowDefinition GetFlowDefinition(int id) { using (ISession session = InitNH.OppenSession()) { using (ITransaction transaction = session.BeginTransaction()) { FlowDefinition flow = session.QueryOver <FlowDefinition>().Where(x => x.id_flowDefinition == id).List().First(); transaction.Commit(); return(flow); } } }
protected override void ConfigureDefinition(FlowDefinition <DecisionFlowRequest, DecisionFlowResponse> flowDefinition) { flowDefinition .Label("Label_1") .Check("Decision_1", new FlowDecisionDefinition <BasicDecisionRequest, string>()) .When("X").End() .Else().Continue() .Check("Decision_2", new FlowDecisionDefinition <BasicDecisionRequest, string>()) .When("Y", "Z").Goto("Label_1") .Else().End(); }
public FlowPlanInternal(IBlockActionFactory actionFactory, FlowDefinition definition) : base(definition) { if (actionFactory == null) { throw new ArgumentNullException(nameof(actionFactory)); } _actionFactory = actionFactory; _blockContainer = new FlowBlockContainer(); _flowType = definition.Type; _iterations = definition.Iterations; }
private IFlowPlan CreateFlow(FlowDefinition definition) { definition.Logger ??= Logger; definition.AuditLogger ??= AuditLogger; IFlowPlan flowPlan = _planFactory.GeneratePlan(definition); if (!_flowPlans.TryAdd(definition.ServiceInfo.Id, flowPlan)) { throw new Exception("Plan already exists."); } return(flowPlan); }