Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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")
            ;
        }
Esempio n. 4
0
        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)));
 }
Esempio n. 6
0
        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()));
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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();
        }
Esempio n. 11
0
        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);
            });
        }
Esempio n. 12
0
        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)
            ;
        }
Esempio n. 13
0
 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"));
 }
Esempio n. 16
0
 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();
 }
Esempio n. 17
0
 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);
        }
Esempio n. 20
0
 /// <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();
 }
Esempio n. 21
0
 protected override void ConfigureDefinition(FlowDefinition <LabelsAndGotosFlowRequest, LabelsAndGotosFlowResponse> flowDefinition)
 {
     flowDefinition
     .Goto("Label_one")
     .Label("Label_two")
     .End()
     .Label("Label_one")
     .Label("Label_three");
 }
Esempio n. 22
0
        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)
         );
 }
Esempio n. 24
0
        protected FlowPlanBase(FlowDefinition definition)
        {
            if (definition == null)
            {
                throw new ArgumentNullException(nameof(definition));
            }

            Definition  = definition;
            Logger      = definition.Logger;
            AuditLogger = definition.AuditLogger;
        }
Esempio n. 25
0
        public override IFlowPlan GeneratePlan(FlowDefinition definition)
        {
            FlowPlanInternal internalPlan = new FlowPlanInternal(_actionFactory, definition);

            foreach (FlowProducerDefinitionBase entrypoint in definition.Entrypoints)
            {
                entrypoint.GeneratePlanItem(internalPlan);
            }

            return(internalPlan);
        }
Esempio n. 26
0
        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))
                );
        }
Esempio n. 27
0
 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);
         }
     }
 }
Esempio n. 28
0
        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();
        }
Esempio n. 29
0
        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;
        }
Esempio n. 30
0
        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);
        }