Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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!",
            }));
        }
Beispiel #4
0
        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]);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
 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"));
 }