package brainslug.bpmn; import brainslug.flow.definition.FlowDefinition; import brainslug.flow.expression.Expression; import brainslug.flow.node.ChoiceDefinition; import brainslug.flow.node.EventDefinition; import brainslug.flow.node.JoinDefinition; import brainslug.flow.node.TaskDefinition; import brainslug.flow.node.task.Task; import brainslug.juel.JuelExpression; import brainslug.util.FlowDefinitionAssert; import org.junit.Test; import java.util.Collection; import static brainslug.util.IdUtil.id; import static org.assertj.core.api.Assertions.assertThat; public class BpmnModelImporterTest { @Test public void shouldTransformBpmnModelToFlowDefinition() { BpmnModelImporter bpmnModelImporter = new BpmnModelImporter(); Collection<FlowDefinition> flowDefinition = bpmnModelImporter.fromBpmnXml(getClass().getClassLoader().getResourceAsStream("simple-process.bpmn")); FlowDefinition importedDefinition = flowDefinition.iterator().next(); FlowDefinitionAssert.assertThat(importedDefinition) .hasFlowNodesWithType(EventDefinition.class, 3) .hasFlowNodesWithType(TaskDefinition.class, 3) .hasFlowNodesWithType(ChoiceDefinition.class, 1) .hasFlowNodesWithType(JoinDefinition.class, 1) .hasEdgesCount(8); TaskDefinition task1 = (TaskDefinition) importedDefinition.getNode(id("Task_0zf0c5m")); assertThat(task1.isRetryAsync()).isTrue(); assertThat(task1.getTaskScript().isPresent()).isTrue(); assertThat(task1.getTaskScript().get().getLanguage()).isEqualTo("JavaScript"); assertThat(task1.getTaskScript().get().getText()).isEqualTo("execution.setProperty(\"foo\", \"bar\");"); TaskDefinition task2 = (TaskDefinition) importedDefinition.getNode(id("Task_09b543m")); assertThat(task2.getDelegateClass()).isEqualTo(Task.class); assertThat(task2.isAsync()).isTrue(); assertThat(task2.getConfiguration()) .containsEntry("param1", "value1") .containsEntry("param2", "value2"); ChoiceDefinition choice = (ChoiceDefinition) importedDefinition.getNode(id("ExclusiveGateway_0s7cjkk")); Expression expression = firstChoiceExpression(choice); assertThat(expression) .isInstanceOf(JuelExpression.class); assertThat(((JuelExpression) expression).getValue()).isEqualTo("x == 1"); System.out.println(new BpmnModelExporter().toBpmnXml(importedDefinition)); } private Expression firstChoiceExpression(ChoiceDefinition choice) { return choice.getThenPaths().get(0).getExpression(); } }