public void StartMiddleEnd() { var models = new InMemoryProcessModelsStore(); models.Store(ProcessModel.Create() .AddEventCatcher("start", TypedEventCatcher <Start> .Create()) .AddEventCatcher("middle", CatchAnyEventCatcher.Create()) .AddEventThrower("end", SilentEventThrower.Instance) .AddSequenceFlow("start", "middle", "end")); var instances = new InMemoryProcessInstancesStore(); var manager = new ProcessManager(models, instances); var result = manager.HandleEvent(new Start()).First(); manager.GetExecutionPoint( result.ProcessInstanceId, result.AffectedTokens.First() ).Should().Be("middle"); result = manager.HandleEvent(result.ProcessInstanceId, result.AffectedTokens.First(), new object()); manager.InstancesStore.GetById(result.ProcessInstanceId) .IsDone.Should().Be(true); }
public void UpdateTheDataInputCurrentValue() { var output = new DataOutput("a"); var element1 = new NullElement(); element1.Outputs.Add(output); var input = new DataInput("a"); var element2 = new NullElement(); element2.Inputs.Add(input); var model = ProcessModel.Create() .AddNullElement("element1", element1) .AddNullElement("element2", element2) .AddDataAssociation("assoc", DataAssociation.Create("element1", "a", "element2", "a")); var models = new InMemoryProcessModelsStore(); models.Store(model); var manager = new ProcessManager( models, new InMemoryProcessInstancesStore() ); var instance = ProcessInstance.Create(model); manager.Attach(instance); var context = new ExecutionContext(manager, model, instance, instance.Token, null); output.Update(context, "element1", "Hello World"); input.GetCurrentValue(context, "element2").Should().Be("Hello World"); }
public IProcessModelsStore Create() { var result = new InMemoryProcessModelsStore(); var model = MessagingProcessFactory.Create(); result.Store(model); return(result); }
public void CreateInstancesOnlyWhenApplicable() { var model = ProcessModel.Create() .AddEventCatcher("start", TypedEventCatcher <Start> .Create()) .AddEventCatcher("middle", CatchAnyEventCatcher.Create()) .AddEventThrower("end", SilentEventThrower.Instance) .AddSequenceFlow("start", "middle", "end"); var models = new InMemoryProcessModelsStore(); models.Store(model); var instances = new InMemoryProcessInstancesStore(); var manager = new ProcessManager(models, instances); manager.HandleEvent(new object()); manager.InstancesStore.GetRunningInstancesCount().Should().Be(0); manager.HandleEvent(new Start()); manager.InstancesStore.GetRunningInstancesCount().Should().Be(1); }
public void UsingDataReceivedInStartEventInTheFollowingAction() { var input = "Hello World"; string output = null; var start = CatchAnyEventCatcher.Create(); start.SetEventDataOutput("o"); var activity = LambdaActivity.Create((la, ctx) => { var i = la.GetDataInputByName("i"); output = (string)i.GetCurrentValue(ctx, "middle"); }); activity.Inputs.Add("i"); var model = ProcessModel.Create() .AddEventCatcher("start", start) .AddActivity("middle", activity) .AddEventThrower("end", SilentEventThrower.Instance) .AddSequenceFlow("start", "middle", "end") .AddDataAssociation("startToMiddle", DataAssociation.Create("start", "o", "middle", "i")); var models = new InMemoryProcessModelsStore(); models.Store(model); var instances = new InMemoryProcessInstancesStore(); var pm = new ProcessManager(models, instances); pm.HandleEvent(input); output.Should().Be(input); }