use of org.camunda.bpm.engine.runtime.ActivityInstance in project camunda-bpm-platform by camunda.
the class ProcessInstanceModificationAsyncTest method testRepeatedStartAndCancellationForTransitionInstance.
/**
* CAM-4090
*/
@Deployment(resources = NESTED_PARALLEL_ASYNC_BEFORE_SCOPE_TASK_PROCESS)
public void testRepeatedStartAndCancellationForTransitionInstance() {
// given there is one transition instance in a scope
ProcessInstance instance = runtimeService.createProcessInstanceByKey("nestedConcurrentTasksProcess").startBeforeActivity("innerTask1").execute();
ActivityInstance tree = runtimeService.getActivityInstance(instance.getId());
TransitionInstance transitionInstance = tree.getTransitionInstances("innerTask1")[0];
// when I start an activity in the same scope
// and cancel the first transition instance
runtimeService.createProcessInstanceModification(instance.getId()).startBeforeActivity(// expand tree
"innerTask2").cancelAllForActivity(// compact tree
"innerTask2").startBeforeActivity(// expand tree
"innerTask2").cancelAllForActivity(// compact tree
"innerTask2").startBeforeActivity(// expand tree
"innerTask2").cancelAllForActivity(// compact tree
"innerTask2").cancelTransitionInstance(transitionInstance.getId()).execute();
// then the process has ended
assertProcessEnded(instance.getId());
}
use of org.camunda.bpm.engine.runtime.ActivityInstance in project camunda-bpm-platform by camunda.
the class ProcessInstanceModificationAsyncTest method testCancelAsyncAfterTransitionInstance.
@Deployment(resources = NESTED_ASYNC_AFTER_TASK_PROCESS)
public void testCancelAsyncAfterTransitionInstance() {
// given a process instance with an asyncAfter task in a subprocess
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("nestedOneTaskProcess");
Task innerTask = taskService.createTaskQuery().taskDefinitionKey("innerTask").singleResult();
assertNotNull(innerTask);
taskService.complete(innerTask.getId());
ActivityInstance tree = runtimeService.getActivityInstance(processInstance.getId());
assertEquals(1, managementService.createJobQuery().count());
// when the async task is cancelled via cancelTransitionInstance
runtimeService.createProcessInstanceModification(processInstance.getId()).cancelTransitionInstance(getChildTransitionInstanceForTargetActivity(tree, "innerTask").getId()).execute();
// then the job has been removed
assertEquals(0, managementService.createJobQuery().count());
// and the activity instance and execution trees match
ActivityInstance updatedTree = runtimeService.getActivityInstance(processInstance.getId());
assertThat(updatedTree).hasStructure(describeActivityInstanceTree(processInstance.getProcessDefinitionId()).activity("outerTask").done());
ExecutionTree executionTree = ExecutionTree.forExecution(processInstance.getId(), processEngine);
assertThat(executionTree).matches(describeExecutionTree("outerTask").scope().done());
// and the process can be completed successfully
completeTasksInOrder("outerTask");
assertProcessEnded(processInstance.getId());
}
use of org.camunda.bpm.engine.runtime.ActivityInstance in project camunda-bpm-platform by camunda.
the class ProcessInstanceModificationAsyncTest method testStartBeforeAndCancelSingleTransitionInstance.
/**
* CAM-4090
*/
@Deployment(resources = NESTED_PARALLEL_ASYNC_BEFORE_SCOPE_TASK_PROCESS)
public void testStartBeforeAndCancelSingleTransitionInstance() {
// given there is one transition instance in a scope
ProcessInstance instance = runtimeService.createProcessInstanceByKey("nestedConcurrentTasksProcess").startBeforeActivity("innerTask1").execute();
ActivityInstance tree = runtimeService.getActivityInstance(instance.getId());
TransitionInstance transitionInstance = tree.getTransitionInstances("innerTask1")[0];
// when I start an activity in the same scope
// and cancel the first transition instance
runtimeService.createProcessInstanceModification(instance.getId()).startBeforeActivity("innerTask2").cancelTransitionInstance(transitionInstance.getId()).execute();
// then the activity was successfully instantiated
tree = runtimeService.getActivityInstance(instance.getId());
assertThat(tree).hasStructure(describeActivityInstanceTree(instance.getProcessDefinitionId()).beginScope("subProcess").transition("innerTask2").done());
// assert executions
ExecutionTree executionTree = ExecutionTree.forExecution(instance.getId(), processEngine);
assertThat(executionTree).matches(describeExecutionTree(null).scope().child("innerTask2").scope().done());
}
use of org.camunda.bpm.engine.runtime.ActivityInstance in project camunda-bpm-platform by camunda.
the class ProcessInstanceModificationAsyncTest method testCancelParentScopeOfParallelAsyncBeforeScopeActivity.
@Deployment(resources = NESTED_PARALLEL_ASYNC_BEFORE_SCOPE_TASK_PROCESS)
public void testCancelParentScopeOfParallelAsyncBeforeScopeActivity() {
// given a process instance with two concurrent async scope tasks in a subprocess
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("nestedConcurrentTasksProcess");
ActivityInstance tree = runtimeService.getActivityInstance(processInstance.getId());
// when I cancel the subprocess
runtimeService.createProcessInstanceModification(processInstance.getId()).cancelActivityInstance(getInstanceIdForActivity(tree, "subProcess")).execute();
// then the process instance is in a valid state
ActivityInstance updatedTree = runtimeService.getActivityInstance(processInstance.getId());
assertNotNull(updatedTree);
assertThat(updatedTree).hasStructure(describeActivityInstanceTree(processInstance.getProcessDefinitionId()).activity("outerTask").done());
ExecutionTree executionTree = ExecutionTree.forExecution(processInstance.getId(), processEngine);
assertThat(executionTree).matches(describeExecutionTree("outerTask").scope().done());
completeTasksInOrder("outerTask");
assertProcessEnded(processInstance.getId());
}
use of org.camunda.bpm.engine.runtime.ActivityInstance in project camunda-bpm-platform by camunda.
the class ProcessInstanceModificationAsyncTest method testCancelAsyncAfterEndEventTransitionInstance.
@Deployment(resources = NESTED_ASYNC_AFTER_END_EVENT_PROCESS)
public void testCancelAsyncAfterEndEventTransitionInstance() {
// given a process instance with an asyncAfter end event in a subprocess
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("nestedAsyncEndEventProcess");
ActivityInstance tree = runtimeService.getActivityInstance(processInstance.getId());
assertEquals(1, managementService.createJobQuery().count());
// when the async task is cancelled via cancelTransitionInstance
runtimeService.createProcessInstanceModification(processInstance.getId()).cancelTransitionInstance(getChildTransitionInstanceForTargetActivity(tree, "subProcessEnd").getId()).execute();
// then the job has been removed
assertEquals(0, managementService.createJobQuery().count());
// and the activity instance and execution trees match
ActivityInstance updatedTree = runtimeService.getActivityInstance(processInstance.getId());
assertThat(updatedTree).hasStructure(describeActivityInstanceTree(processInstance.getProcessDefinitionId()).activity("outerTask").done());
ExecutionTree executionTree = ExecutionTree.forExecution(processInstance.getId(), processEngine);
assertThat(executionTree).matches(describeExecutionTree("outerTask").scope().done());
// and the process can be completed successfully
completeTasksInOrder("outerTask");
assertProcessEnded(processInstance.getId());
}
Aggregations