use of org.camunda.bpm.engine.test.util.ExecutionTree in project camunda-bpm-platform by camunda.
the class ProcessInstanceModificationTest method testStartBeforeWithAncestorInstanceId.
@Deployment(resources = EXCLUSIVE_GATEWAY_PROCESS)
public void testStartBeforeWithAncestorInstanceId() {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("exclusiveGateway");
String processInstanceId = processInstance.getId();
ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId);
runtimeService.createProcessInstanceModification(processInstance.getId()).startBeforeActivity("task2", tree.getId()).execute();
ActivityInstance updatedTree = runtimeService.getActivityInstance(processInstanceId);
assertNotNull(updatedTree);
assertEquals(processInstanceId, updatedTree.getProcessInstanceId());
assertThat(updatedTree).hasStructure(describeActivityInstanceTree(processInstance.getProcessDefinitionId()).activity("task1").activity("task2").done());
ExecutionTree executionTree = ExecutionTree.forExecution(processInstanceId, processEngine);
assertThat(executionTree).matches(describeExecutionTree(null).scope().child("task1").concurrent().noScope().up().child("task2").concurrent().noScope().done());
assertEquals(2, taskService.createTaskQuery().count());
// complete the process
completeTasksInOrder("task1", "task2");
assertProcessEnded(processInstanceId);
}
use of org.camunda.bpm.engine.test.util.ExecutionTree in project camunda-bpm-platform by camunda.
the class ProcessInstanceModificationTest method testStartTransitionListenerInvocation.
@Deployment(resources = TRANSITION_LISTENER_PROCESS)
public void testStartTransitionListenerInvocation() {
RecorderExecutionListener.clear();
ProcessInstance instance = runtimeService.startProcessInstanceByKey("transitionListenerProcess", Variables.createVariables().putValue("listener", new RecorderExecutionListener()));
runtimeService.createProcessInstanceModification(instance.getId()).startTransition("flow2").execute();
// transition listener should have been invoked
List<RecordedEvent> events = RecorderExecutionListener.getRecordedEvents();
assertEquals(1, events.size());
RecordedEvent event = events.get(0);
assertEquals("flow2", event.getTransitionId());
RecorderExecutionListener.clear();
ActivityInstance updatedTree = runtimeService.getActivityInstance(instance.getId());
assertNotNull(updatedTree);
assertEquals(instance.getId(), updatedTree.getProcessInstanceId());
assertThat(updatedTree).hasStructure(describeActivityInstanceTree(instance.getProcessDefinitionId()).activity("task1").activity("task2").done());
ExecutionTree executionTree = ExecutionTree.forExecution(instance.getId(), processEngine);
assertThat(executionTree).matches(describeExecutionTree(null).scope().child("task1").concurrent().noScope().up().child("task2").concurrent().noScope().done());
completeTasksInOrder("task1", "task2", "task2");
assertProcessEnded(instance.getId());
}
use of org.camunda.bpm.engine.test.util.ExecutionTree in project camunda-bpm-platform by camunda.
the class ProcessInstanceModificationTest method testStartAfterActivityListenerInvocation.
@Deployment(resources = TRANSITION_LISTENER_PROCESS)
public void testStartAfterActivityListenerInvocation() {
RecorderExecutionListener.clear();
ProcessInstance instance = runtimeService.startProcessInstanceByKey("transitionListenerProcess", Variables.createVariables().putValue("listener", new RecorderExecutionListener()));
runtimeService.createProcessInstanceModification(instance.getId()).startTransition("flow2").execute();
// transition listener should have been invoked
List<RecordedEvent> events = RecorderExecutionListener.getRecordedEvents();
assertEquals(1, events.size());
RecordedEvent event = events.get(0);
assertEquals("flow2", event.getTransitionId());
RecorderExecutionListener.clear();
ActivityInstance updatedTree = runtimeService.getActivityInstance(instance.getId());
assertNotNull(updatedTree);
assertEquals(instance.getId(), updatedTree.getProcessInstanceId());
assertThat(updatedTree).hasStructure(describeActivityInstanceTree(instance.getProcessDefinitionId()).activity("task1").activity("task2").done());
ExecutionTree executionTree = ExecutionTree.forExecution(instance.getId(), processEngine);
assertThat(executionTree).matches(describeExecutionTree(null).scope().child("task1").concurrent().noScope().up().child("task2").concurrent().noScope().done());
completeTasksInOrder("task1", "task2", "task2");
assertProcessEnded(instance.getId());
}
use of org.camunda.bpm.engine.test.util.ExecutionTree in project camunda-bpm-platform by camunda.
the class ProcessInstanceModificationTest method testStartTransitionWithAncestorInstanceIdTwoScopesUp.
@Deployment(resources = DOUBLE_NESTED_SUB_PROCESS)
public void testStartTransitionWithAncestorInstanceIdTwoScopesUp() {
// given two instances of the outer subprocess
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("doubleNestedSubprocess");
String processInstanceId = processInstance.getId();
runtimeService.createProcessInstanceModification(processInstance.getId()).startBeforeActivity("subProcess").execute();
// when I start the inner subprocess task without explicit ancestor
try {
runtimeService.createProcessInstanceModification(processInstance.getId()).startTransition("flow5").execute();
// then the command fails
fail("should not succeed because the ancestors are ambiguous");
} catch (ProcessEngineException e) {
// happy path
}
// when I start the inner subprocess task with an explicit ancestor activity
// instance id
ActivityInstance updatedTree = runtimeService.getActivityInstance(processInstanceId);
ActivityInstance randomSubProcessInstance = getChildInstanceForActivity(updatedTree, "subProcess");
// then the command suceeds
runtimeService.createProcessInstanceModification(processInstanceId).startTransition("flow5", randomSubProcessInstance.getId()).execute();
// and the trees are correct
updatedTree = runtimeService.getActivityInstance(processInstanceId);
assertNotNull(updatedTree);
assertEquals(processInstanceId, updatedTree.getProcessInstanceId());
assertThat(updatedTree).hasStructure(describeActivityInstanceTree(processInstance.getProcessDefinitionId()).beginScope("subProcess").activity("subProcessTask").endScope().beginScope("subProcess").activity("subProcessTask").beginScope("innerSubProcess").activity("innerSubProcessTask").done());
ActivityInstance innerSubProcessInstance = getChildInstanceForActivity(updatedTree, "innerSubProcess");
assertEquals(randomSubProcessInstance.getId(), innerSubProcessInstance.getParentActivityInstanceId());
ExecutionTree executionTree = ExecutionTree.forExecution(processInstanceId, processEngine);
assertThat(executionTree).matches(describeExecutionTree(null).scope().child(null).concurrent().noScope().child("subProcessTask").scope().up().up().child(null).concurrent().noScope().child(null).scope().child("subProcessTask").concurrent().noScope().up().child(null).concurrent().noScope().child("innerSubProcessTask").scope().done());
assertEquals(3, taskService.createTaskQuery().count());
// complete the process
completeTasksInOrder("subProcessTask", "subProcessTask", "innerSubProcessTask", "innerSubProcessTask", "innerSubProcessTask");
assertProcessEnded(processInstanceId);
}
use of org.camunda.bpm.engine.test.util.ExecutionTree in project camunda-bpm-platform by camunda.
the class ProcessInstanceModificationTest method testEndProcessInstanceIntermediately.
/**
* CAM-3718
*/
@Deployment(resources = EXCLUSIVE_GATEWAY_PROCESS)
public void testEndProcessInstanceIntermediately() {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("exclusiveGateway");
String processInstanceId = processInstance.getId();
ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId);
runtimeService.createProcessInstanceModification(processInstance.getId()).cancelActivityInstance(getInstanceIdForActivity(tree, "task1")).startAfterActivity("task1").startBeforeActivity("task1").execute();
ActivityInstance updatedTree = runtimeService.getActivityInstance(processInstanceId);
assertThat(updatedTree).hasStructure(describeActivityInstanceTree(processInstance.getProcessDefinitionId()).activity("task1").done());
ExecutionTree executionTree = ExecutionTree.forExecution(processInstanceId, processEngine);
assertThat(executionTree).matches(describeExecutionTree("task1").scope().done());
assertEquals(1, taskService.createTaskQuery().count());
// complete the process
completeTasksInOrder("task1");
assertProcessEnded(processInstanceId);
}
Aggregations