package org.camunda.bpm.model.bpmn.builder.di; import static org.camunda.bpm.model.bpmn.BpmnTestConstants.END_EVENT_ID; import static org.camunda.bpm.model.bpmn.BpmnTestConstants.SEQUENCE_FLOW_ID; import static org.camunda.bpm.model.bpmn.BpmnTestConstants.START_EVENT_ID; import static org.camunda.bpm.model.bpmn.BpmnTestConstants.USER_TASK_ID; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.io.IOException; import java.util.Collection; import java.util.Iterator; import org.camunda.bpm.model.bpmn.Bpmn; import org.camunda.bpm.model.bpmn.BpmnModelInstance; import org.camunda.bpm.model.bpmn.builder.ProcessBuilder; import org.camunda.bpm.model.bpmn.instance.bpmndi.BpmnEdge; import org.junit.After; import org.junit.Test; public class DiGeneratorForSequenceFlowsTest { private BpmnModelInstance instance; @After public void validateModel() throws IOException { if (instance != null) { Bpmn.validateModel(instance); } } @Test public void shouldGenerateEdgeForSequenceFlow() { ProcessBuilder builder = Bpmn.createExecutableProcess(); instance = builder .startEvent(START_EVENT_ID) .sequenceFlowId(SEQUENCE_FLOW_ID) .endEvent(END_EVENT_ID) .done(); Collection<BpmnEdge> allEdges = instance.getModelElementsByType(BpmnEdge.class); assertEquals(1, allEdges.size()); assertBpmnEdgeExists(SEQUENCE_FLOW_ID); } @Test public void shouldGenerateEdgesForSequenceFlowsUsingGateway() { ProcessBuilder builder = Bpmn.createExecutableProcess(); instance = builder .startEvent(START_EVENT_ID) .sequenceFlowId("s1") .parallelGateway("gateway") .sequenceFlowId("s2") .endEvent("e1") .moveToLastGateway() .sequenceFlowId("s3") .endEvent("e2") .done(); Collection<BpmnEdge> allEdges = instance.getModelElementsByType(BpmnEdge.class); assertEquals(3, allEdges.size()); assertBpmnEdgeExists("s1"); assertBpmnEdgeExists("s2"); assertBpmnEdgeExists("s3"); } @Test public void shouldGenerateEdgesWhenUsingMoveToActivity() { ProcessBuilder builder = Bpmn.createExecutableProcess(); instance = builder .startEvent(START_EVENT_ID) .sequenceFlowId("s1") .exclusiveGateway() .sequenceFlowId("s2") .userTask(USER_TASK_ID) .sequenceFlowId("s3") .endEvent("e1") .moveToActivity(USER_TASK_ID) .sequenceFlowId("s4") .endEvent("e2") .done(); Collection<BpmnEdge> allEdges = instance.getModelElementsByType(BpmnEdge.class); assertEquals(4, allEdges.size()); assertBpmnEdgeExists("s1"); assertBpmnEdgeExists("s2"); assertBpmnEdgeExists("s3"); assertBpmnEdgeExists("s4"); } @Test public void shouldGenerateEdgesWhenUsingMoveToNode() { ProcessBuilder builder = Bpmn.createExecutableProcess(); instance = builder .startEvent(START_EVENT_ID) .sequenceFlowId("s1") .exclusiveGateway() .sequenceFlowId("s2") .userTask(USER_TASK_ID) .sequenceFlowId("s3") .endEvent("e1") .moveToNode(USER_TASK_ID) .sequenceFlowId("s4") .endEvent("e2") .done(); Collection<BpmnEdge> allEdges = instance.getModelElementsByType(BpmnEdge.class); assertEquals(4, allEdges.size()); assertBpmnEdgeExists("s1"); assertBpmnEdgeExists("s2"); assertBpmnEdgeExists("s3"); assertBpmnEdgeExists("s4"); } @Test public void shouldGenerateEdgesWhenUsingConnectTo() { ProcessBuilder builder = Bpmn.createExecutableProcess(); instance = builder .startEvent(START_EVENT_ID) .sequenceFlowId("s1") .exclusiveGateway("gateway") .sequenceFlowId("s2") .userTask(USER_TASK_ID) .sequenceFlowId("s3") .endEvent(END_EVENT_ID) .moveToNode(USER_TASK_ID) .sequenceFlowId("s4") .connectTo("gateway") .done(); Collection<BpmnEdge> allEdges = instance.getModelElementsByType(BpmnEdge.class); assertEquals(4, allEdges.size()); assertBpmnEdgeExists("s1"); assertBpmnEdgeExists("s2"); assertBpmnEdgeExists("s3"); assertBpmnEdgeExists("s4"); } protected BpmnEdge findBpmnEdge(String sequenceFlowId) { Collection<BpmnEdge> allEdges = instance.getModelElementsByType(BpmnEdge.class); Iterator<BpmnEdge> iterator = allEdges.iterator(); while (iterator.hasNext()) { BpmnEdge edge = iterator.next(); if(edge.getBpmnElement().getId().equals(sequenceFlowId)) { return edge; } } return null; } protected void assertBpmnEdgeExists(String id) { BpmnEdge edge = findBpmnEdge(id); assertNotNull(edge); } }