public async void ExpectCorrectStateAndExceptions() { var did = new Did("mstd:bpm").ToString(); var sut = cluster.GrainFactory.GetGrain <IBpmProcessGrain>(did); Assert.Equal(BpmProcessExecutionTypes.Uninitialized, sut.GetProcessStatus().Result); var ex = Assert.Throws <AggregateException>(() => sut.StartProcess().Wait()); Assert.EndsWith($"started.", ex.InnerException.Message); ex = Assert.Throws <AggregateException>(() => sut.PauseProcess().Wait()); Assert.EndsWith($"paused.", ex.InnerException.Message); ex = Assert.Throws <AggregateException>(() => sut.StopProcess().Wait()); Assert.EndsWith($"stopped.", ex.InnerException.Message); await sut.LoadProcess(TestFileLoader.Load(@"Bpmn20/simple-task.bpmn")); Assert.Equal(BpmProcessExecutionTypes.Initialized, sut.GetProcessStatus().Result); await sut.StartProcess(); Assert.Equal(BpmProcessExecutionTypes.Started, sut.GetProcessStatus().Result); await sut.PauseProcess(); Assert.Equal(BpmProcessExecutionTypes.Paused, sut.GetProcessStatus().Result); await sut.StopProcess(); Assert.Equal(BpmProcessExecutionTypes.Stopped, sut.GetProcessStatus().Result); }
public void CanDetermineFlowTargetTypeThroughFactory() { var doc = XDocument.Parse(TestFileLoader.Load(@"Bpmn20/simple-exclusive-gateway.bpmn")); string json = JsonConvert.SerializeXNode(doc); JObject bpmn = JObject.Parse(json); var process = bpmn["bpmn:definitions"]["bpmn:process"]; var factory = new FlowTargetFactory(process, "Activity_A"); Assert.Equal("bpmn:task", factory.Target); var bpmnTask = new BpmnTask(factory.Token, new ExpressionContext()); factory = new FlowTargetFactory(process, "Gateway_1d2x0fd"); Assert.Equal("bpmn:exclusiveGateway", factory.Target); }
public async Task LoadsAndCombinesFiles() { var loader = new TestFileLoader(); var loaded = await loader.Load( new DirectoryInfo(RootPath("folder1", "folder2"))); Assert.That(loaded, Is.EqualTo(new[] { "Well", "hello", "there!", })); }
public void ExclusiveGatewayCanRead() { var doc = XDocument.Parse(TestFileLoader.Load(@"Bpmn20/simple-exclusive-gateway.bpmn")); string json = JsonConvert.SerializeXNode(doc); JObject bpmn = JObject.Parse(json); var process = bpmn["bpmn:definitions"]["bpmn:process"]; var factory = new FlowTargetFactory(process, "Gateway_1d2x0fd"); BpmExclusiveGateway gateway = new BpmExclusiveGateway(factory.Token); Assert.Equal("Gateway_1d2x0fd", gateway.Id); Assert.Single(gateway.Incoming); Assert.Equal("Flow_0hzr3el", gateway.Incoming[0]); Assert.Equal(2, gateway.Outgoing.Count); Assert.Equal("Flow_0gzbcgc", gateway.Outgoing[0]); Assert.Equal("Flow_1fg2zon", gateway.Outgoing[1]); }
public void ConditionalFlowCanReadAndEvaluateTFormalExpression() { var doc = XDocument.Parse(TestFileLoader.Load(@"Bpmn20/simple-exclusive-gateway.bpmn")); string json = JsonConvert.SerializeXNode(doc); JObject bpmn = JObject.Parse(json); var process = bpmn["bpmn:definitions"]["bpmn:process"]; var flow = process["bpmn:sequenceFlow"].Where(p => p["@id"].Value <string>() == "Flow_0gzbcgc").Single()["bpmn:conditionExpression"]["#text"]; ExpressionContext context = new ExpressionContext(); context.Variables["A"] = 1; IGenericExpression <bool> eDynamic = context.CompileGeneric <bool>((string)flow); var result = eDynamic.Evaluate(); Assert.True(result); flow = process["bpmn:sequenceFlow"].Where(p => p["@id"].Value <string>() == "Flow_1fg2zon").Single()["bpmn:conditionExpression"]["#text"]; eDynamic = context.CompileGeneric <bool>((string)flow); result = eDynamic.Evaluate(); Assert.False(result); }
public void LoadBpmn(string path) { Process = new BpmnProcess(TestFileLoader.Load(path)); }
public void CanReadSomeSimpleTasks() { var doc = XDocument.Parse(TestFileLoader.Load(@"Bpmn20/simple-task.bpmn")); string json = JsonConvert.SerializeXNode(doc); JObject rss = JObject.Parse(json); var process = rss["bpmn:definitions"]["bpmn:process"]; var startEvent = process["bpmn:startEvent"]["bpmn:outgoing"].Value <string>(); Output.WriteLine($"process start event: {startEvent}."); var endEvent = process["bpmn:endEvent"]["bpmn:incoming"].Value <string>(); // step through the sequence string step = startEvent; while (step != endEvent) { var sequence = process["bpmn:sequenceFlow"].Single(p => p.Value <string>("@id") == step); var target = sequence["@targetRef"].Value <string>(); // find target ref in tasks. var task = process["bpmn:task"].Where(p => p.Value <string>("@id") == target).Single(); var doc2 = task["@name"].Value <string>(); var incoming = task["bpmn:incoming"].Value <string>(); Assert.Equal(step, incoming); var outgoing = task["bpmn:outgoing"].Value <string>(); // execution listener var ext = task["bpmn:extensionElements"]; if (ext != null) { var listener = ext["camunda:executionListener"]; if (listener != null) { var exp = listener["@delegateExpression"].Value <string>(); // triggered at start of task or end. var evtType = listener["@event"].Value <string>(); var io = ext["camunda:inputOutput"]; if (io != null) { var parameters = new System.Collections.Generic.Dictionary <string, string>(); foreach (var item in io["camunda:outputParameter"].Children()) { var name = item["@name"].Value <string>(); var value = item["#text"].Value <string>(); parameters.Add(name, value); } Assert.Equal(4, parameters.Count); Assert.Equal("*****@*****.**", parameters["From"]); Assert.Equal("*****@*****.**", parameters["To"]); Assert.Equal("This a Test Email Topic", parameters["Topic"]); Assert.Equal("This is the body of the email message", parameters["Content"]); } } } Output.WriteLine($"step executing task {target}: '{doc2}'. Next step {outgoing}."); step = outgoing; } Output.WriteLine($"process end event: {endEvent}."); }
public SimpleTaskTests(ITestOutputHelper output) { Output = output; process = new BpmnProcess(TestFileLoader.Load(@"Bpmn20/simple-task.bpmn")); }