public void SimpleCountingLoop( ) { using (new WorkflowRunContext { RunTriggersInCurrentThread = true }) { var wf = new Workflow() { Name = "Simple Counting " + DateTime.Now }; wf.AddDefaultExitPoint(); var input = new ResourceListArgument { Name = "in" }; wf.InputArguments.Add(input.As <ActivityArgument>()); var output = new IntegerArgument { Name = "out" }; wf.OutputArguments.Add(output.As <ActivityArgument>()); var employeeType = Entity.Get <EntityType>(new EntityRef("test", "employee")); wf.AddVariable <IntegerArgument>("Count") .AddAssignToVar("Assign To Count", "0", "Count") .AddForEach("foreach1", "in", "test:employee") .AddAssignToVar("Assign To Count 2", "[Count] + 1", "Count", "foreach1", "Loop") .AddTransition("Assign To Count 2", "foreach1"); ActivityTestHelper.AddAssignToVar(wf, "AssignOutput", "Count", "out"); ActivityTestHelper.AddMissingExpressionParametersToWorkflow(wf); wf.Save(); var createdCount = 15; var resources = Enumerable.Range(0, createdCount).Select(v => new Person() { Name = v.ToString() }).ToList(); Entity.Save(resources); var wfInput = new Dictionary <string, object> { { "in", resources } }; var run = (RunWorkflow(wf, wfInput)); IDictionary <string, object> outputs = run.GetOutput(); Assert.AreEqual(1, outputs.Count, "There is one output argument"); var result = (int)outputs["out"]; Assert.AreEqual(createdCount, result, "The loop ran the correct number of times"); } }
public void SetVariableTest( ) { using (new WorkflowRunContext { RunTriggersInCurrentThread = true }) { var workflow = new Workflow { Name = "Wf" + DateTime.Now }; workflow.AddDefaultExitPoint(); var v1 = Entity.Create <IntegerArgument>().As <ActivityArgument>(); v1.Name = "v1"; ActivityTestHelper.AddVariableToWorkflow(workflow, v1); var v2 = Entity.Create <ResourceArgument>().As <ActivityArgument>(); v2.Name = "v2"; ActivityTestHelper.AddVariableToWorkflow(workflow, v2); var v3 = Entity.Create <ResourceListArgument>().As <ActivityArgument>(); v3.Name = "v3"; ActivityTestHelper.AddVariableToWorkflow(workflow, v3); // set starting values workflow.AddExpressionToWorkflowVariable("v1", "111", false); workflow.AddEntityExpressionToVariable("v2", new EntityRef("core:person")); //ActivityHelper.AddExpressionToWorkflowVariable(workflow, "v3", "[Resource Type]", false); // assign 222 to v1 var setV1 = Entity.Create <AssignToVariable>(); var setV1As = setV1.Cast <WfActivity>(); setV1.TargetVariable = v1; ActivityTestHelper.AddExpressionToActivityArgument(workflow, setV1As, "Value", "222", false); workflow.FirstActivity = setV1As; workflow.ContainedActivities.Add(setV1As); ActivityTestHelper.AddTermination(workflow, setV1As); // output var v1Out = Entity.Create <StringArgument>(); var v1OutAs = v1Out.Cast <ActivityArgument>(); v1Out.Name = "v1Out"; workflow.OutputArguments.Add(v1OutAs); ActivityTestHelper.AddAssignToVar(workflow, "set out", "'output is ' + v1", "v1Out"); ActivityTestHelper.AddMissingExpressionParametersToWorkflow(workflow); workflow.Save(); ToDelete.Add(workflow.Id); var run = (RunWorkflow(workflow)); Assert.IsTrue(run.WorkflowRunStatus_Enum == WorkflowRunState_Enumeration.WorkflowRunCompleted, "Run Completed"); IDictionary <string, object> outputs = run.GetOutput(); Assert.IsTrue(outputs.ContainsKey("v1Out"), "Output has the result."); Assert.AreEqual("output is 222", outputs["v1Out"], "Ensure the variable was updated and sent to the output"); } }
public void LoopWithinLoop_bug_17651() { using (new WorkflowRunContext { RunTriggersInCurrentThread = true }) { var wf = new Workflow() { Name = "LoopWithinLoop_bug_17651" }; wf.AddDefaultExitPoint(); var count = new IntegerArgument() { Name = "count" }; ActivityTestHelper.AddVariableToWorkflow(wf, count.As <ActivityArgument>()); wf.AddExpressionToWorkflowVariable("count", "0"); var foreachX = new ForEachResource() { Name = "ForEachX" + DateTime.Now }; var foreachXAs = foreachX.As <WfActivity>(); ActivityTestHelper.AddExpressionToActivityArgument(wf, foreachXAs, "List", "all([Workflow Event])"); wf.FirstActivity = foreachXAs; wf.ContainedActivities.Add(foreachXAs); var foreachY = new ForEachResource() { Name = "ForEachY" + DateTime.Now }; var foreachYAs = foreachY.As <WfActivity>(); ActivityTestHelper.AddExpressionToActivityArgument(wf, foreachYAs, "List", "all([Event Email Priority Enum])"); wf.ContainedActivities.Add(foreachYAs); ActivityTestHelper.AddTransition(wf, foreachXAs, foreachYAs, "Loop"); ActivityTestHelper.AddTermination(wf, foreachXAs, "Finished"); var assign = new AssignToVariable() { Name = "Assign" }; var assignAs = assign.As <WfActivity>(); assign.TargetVariable = count.As <ActivityArgument>(); ActivityTestHelper.AddExpressionToActivityArgument(wf, assignAs, "Value", "count + 1"); wf.ContainedActivities.Add(assignAs); ActivityTestHelper.AddTransition(wf, foreachYAs, assignAs, "Loop"); ActivityTestHelper.AddTransition(wf, foreachYAs, foreachXAs, "Finished"); ActivityTestHelper.AddTransition(wf, assignAs, foreachYAs); var output = new IntegerArgument() { Name = "out" }; var outputAs = output.As <ActivityArgument>(); wf.OutputArguments.Add(outputAs); ActivityTestHelper.AddAssignToVar(wf, "Set Output", "count", "out"); ActivityTestHelper.AddMissingExpressionParametersToWorkflow(wf); wf.Save(); ToDelete.Add(wf.Id); var run = (RunWorkflow(wf)); var outputs = run.GetOutput(); Assert.AreEqual(1, outputs.Count, "There is one output argument"); var result = (int)outputs["out"]; var triggeredOnCount = Entity.GetInstancesOfType <WorkflowEventEnum>(false).Count(); var runStateCount = Entity.GetInstancesOfType <EventEmailPriorityEnum>(false).Count(); Assert.AreEqual(triggeredOnCount * runStateCount, result, "The nested loops ran the correct number of times."); } }