use of org.camunda.bpm.engine.runtime.ActivityInstance in project camunda-bpm-platform by camunda.
the class ProcessInstanceModificationAsyncTest method testCancelAsyncAfterTransitionInstanceEndsProcessInstance.
@Deployment(resources = ASYNC_AFTER_ONE_TASK_PROCESS)
public void testCancelAsyncAfterTransitionInstanceEndsProcessInstance() {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
String processInstanceId = processInstance.getId();
Task task = taskService.createTaskQuery().singleResult();
assertNotNull(task);
taskService.complete(task.getId());
ActivityInstance tree = runtimeService.getActivityInstance(processInstance.getId());
runtimeService.createProcessInstanceModification(processInstanceId).cancelTransitionInstance(getChildTransitionInstanceForTargetActivity(tree, "theTask").getId()).execute();
// then the process instance has ended
assertProcessEnded(processInstanceId);
}
use of org.camunda.bpm.engine.runtime.ActivityInstance in project camunda-bpm-platform by camunda.
the class ProcessInstanceModificationAsyncTest method testStartAndCancelAllForTransitionInstance.
/**
* CAM-4090
*/
@Deployment(resources = NESTED_PARALLEL_ASYNC_BEFORE_SCOPE_TASK_PROCESS)
public void testStartAndCancelAllForTransitionInstance() {
// given there is one transition instance in a scope
ProcessInstance instance = runtimeService.createProcessInstanceByKey("nestedConcurrentTasksProcess").startBeforeActivity("innerTask1").startBeforeActivity("innerTask1").startBeforeActivity("innerTask1").execute();
// when I start an activity in the same scope
// and cancel the first transition instance
runtimeService.createProcessInstanceModification(instance.getId()).startBeforeActivity("innerTask2").cancelAllForActivity("innerTask1").execute();
// then the activity was successfully instantiated
ActivityInstance 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 testCancelTransitionInstanceShouldNotInvokeIoMappingAndListenersOfTargetActivity.
@Deployment(resources = NESTED_ASYNC_BEFORE_IO_LISTENER_PROCESS)
public void testCancelTransitionInstanceShouldNotInvokeIoMappingAndListenersOfTargetActivity() {
RecorderExecutionListener.clear();
// given a process instance with an async task in a subprocess
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("nestedOneTaskProcess", Variables.createVariables().putValue("listener", new RecorderExecutionListener()));
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 no io mapping is executed and no end listener is executed
assertTrue(RecorderExecutionListener.getRecordedEvents().isEmpty());
assertEquals(0, runtimeService.createVariableInstanceQuery().variableName("outputMappingExecuted").count());
// 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 testStartBeforeAsync.
@Deployment(resources = EXCLUSIVE_GATEWAY_ASYNC_BEFORE_TASK_PROCESS)
public void testStartBeforeAsync() {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("exclusiveGateway");
String processInstanceId = processInstance.getId();
runtimeService.createProcessInstanceModification(processInstance.getId()).startBeforeActivity("task2").execute();
// the task does not yet exist because it is started asynchronously
Task task = taskService.createTaskQuery().taskDefinitionKey("task2").singleResult();
assertNull(task);
// and there is no activity instance for task2 yet
ActivityInstance updatedTree = runtimeService.getActivityInstance(processInstanceId);
assertNotNull(updatedTree);
assertEquals(processInstanceId, updatedTree.getProcessInstanceId());
assertThat(updatedTree).hasStructure(describeActivityInstanceTree(processInstance.getProcessDefinitionId()).activity("task1").transition("task2").done());
ExecutionTree executionTree = ExecutionTree.forExecution(processInstanceId, processEngine);
assertThat(executionTree).matches(describeExecutionTree(null).scope().child("task1").concurrent().noScope().up().child("task2").concurrent().noScope().done());
// when the async job is executed
Job job = managementService.createJobQuery().singleResult();
assertNotNull(job);
executeAvailableJobs();
// then there is the task
task = taskService.createTaskQuery().taskDefinitionKey("task2").singleResult();
assertNotNull(task);
// and there is an activity instance for task2
updatedTree = runtimeService.getActivityInstance(processInstanceId);
assertNotNull(updatedTree);
assertThat(updatedTree).hasStructure(describeActivityInstanceTree(processInstance.getProcessDefinitionId()).activity("task1").activity("task2").done());
completeTasksInOrder("task1", "task2");
assertProcessEnded(processInstanceId);
}
use of org.camunda.bpm.engine.runtime.ActivityInstance in project camunda-bpm-platform by camunda.
the class ProcessInstanceModificationAsyncTest method testCancelAllCancelsTransitionInstances.
@Deployment(resources = NESTED_ASYNC_BEFORE_TASK_PROCESS)
public void testCancelAllCancelsTransitionInstances() {
// given a process instance with an async task in a subprocess
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("nestedOneTaskProcess");
assertEquals(1, managementService.createJobQuery().count());
// when the async task is cancelled via cancelAll
runtimeService.createProcessInstanceModification(processInstance.getId()).cancelAllForActivity("innerTask").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