protected void assertTransitionInstances(String processInstanceId, String activityId, int numInstances) { ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId); assertEquals(numInstances, tree.getTransitionInstances(activityId).length); }
@Deployment(resources = "org/camunda/bpm/engine/test/api/runtime/RuntimeServiceTest.testGetTransitionInstancesForActivity.bpmn20.xml") @Test public void testGetInvalidTransitionInstancesForActivity() { ProcessInstance instance = runtimeService.startProcessInstanceByKey("miSubprocess"); ActivityInstance tree = runtimeService.getActivityInstance(instance.getId()); try { tree.getTransitionInstances(null); fail("exception expected"); } catch (NullValueException e) { // happy path } }
@Deployment(resources = "org/camunda/bpm/engine/test/api/runtime/RuntimeServiceTest.testGetTransitionInstancesForActivity.bpmn20.xml") @Test public void testGetTransitionInstancesForNonExistingActivity() { ProcessInstance instance = runtimeService.startProcessInstanceByKey("miSubprocess"); ActivityInstance tree = runtimeService.getActivityInstance(instance.getId()); TransitionInstance[] instances = tree.getTransitionInstances("aNonExistingActivityId"); assertNotNull(instances); assertEquals(0, instances.length); }
@Deployment @Test public void testGetTransitionInstancesForActivity() { // given ProcessInstance instance = runtimeService.startProcessInstanceByKey("miSubprocess"); // complete one async task Job job = managementService.createJobQuery().listPage(0, 1).get(0); managementService.executeJob(job.getId()); Task task = taskService.createTaskQuery().singleResult(); taskService.complete(task.getId()); // when ActivityInstance tree = runtimeService.getActivityInstance(instance.getId()); // then assertEquals(0, tree.getTransitionInstances("subProcess").length); TransitionInstance[] asyncBeforeInstances = tree.getTransitionInstances("innerTask"); assertEquals(2, asyncBeforeInstances.length); assertEquals("innerTask", asyncBeforeInstances[0].getActivityId()); assertEquals("innerTask", asyncBeforeInstances[1].getActivityId()); assertFalse(asyncBeforeInstances[0].getId().equals(asyncBeforeInstances[1].getId())); TransitionInstance[] asyncEndEventInstances = tree.getTransitionInstances("theSubProcessEnd"); assertEquals(1, asyncEndEventInstances.length); assertEquals("theSubProcessEnd", asyncEndEventInstances[0].getActivityId()); }
@Deployment @Test public void testTransitionInstanceActivityNamePropertyAfterTask() { // given String processInstanceId = runtimeService.startProcessInstanceByKey("process").getId(); // when ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId); // then TransitionInstance[] instances = tree.getTransitionInstances("firstServiceTask"); TransitionInstance task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityName()); assertEquals("First Service Task", task.getActivityName()); instances = tree.getTransitionInstances("secondServiceTask"); task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityName()); assertEquals("Second Service Task", task.getActivityName()); }
@Deployment(resources = "org/camunda/bpm/engine/test/api/runtime/RuntimeServiceTest.testTransitionInstanceActivityNamePropertyBeforeTask.bpmn20.xml") @Test public void testTransitionInstanceActivityTypePropertyBeforeTask() { // given String processInstanceId = runtimeService.startProcessInstanceByKey("process").getId(); // when ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId); // then TransitionInstance[] instances = tree.getTransitionInstances("firstServiceTask"); TransitionInstance task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityType()); assertEquals("serviceTask", task.getActivityType()); instances = tree.getTransitionInstances("secondServiceTask"); task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityType()); assertEquals("serviceTask", task.getActivityType()); }
@Deployment(resources = "org/camunda/bpm/engine/test/api/runtime/RuntimeServiceTest.testTransitionInstanceActivityNamePropertyAfterTask.bpmn20.xml") @Test public void testTransitionInstanceActivityTypePropertyAfterTask() { // given String processInstanceId = runtimeService.startProcessInstanceByKey("process").getId(); // when ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId); // then TransitionInstance[] instances = tree.getTransitionInstances("firstServiceTask"); TransitionInstance task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityType()); assertEquals("serviceTask", task.getActivityType()); instances = tree.getTransitionInstances("secondServiceTask"); task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityType()); assertEquals("serviceTask", task.getActivityType()); }
@Deployment @Test public void testTransitionInstanceActivityNamePropertyBeforeTask() { // given String processInstanceId = runtimeService.startProcessInstanceByKey("process").getId(); // when ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId); // then TransitionInstance[] instances = tree.getTransitionInstances("firstServiceTask"); TransitionInstance task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityName()); assertEquals("First Service Task", task.getActivityName()); instances = tree.getTransitionInstances("secondServiceTask"); task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityName()); assertEquals("Second Service Task", task.getActivityName()); }
@Deployment @Test public void testTransitionInstanceActivityNamePropertyBeforeStartEvent() { // given String processInstanceId = runtimeService.startProcessInstanceByKey("process").getId(); // when ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId); // then TransitionInstance[] instances = tree.getTransitionInstances("start"); TransitionInstance task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityName()); assertEquals("The Start Event", task.getActivityName()); }
@Deployment @Test public void testTransitionInstanceActivityNamePropertyAfterStartEvent() { // given String processInstanceId = runtimeService.startProcessInstanceByKey("process").getId(); // when ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId); // then TransitionInstance[] instances = tree.getTransitionInstances("start"); TransitionInstance task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityName()); assertEquals("The Start Event", task.getActivityName()); }
@Deployment(resources = "org/camunda/bpm/engine/test/api/runtime/RuntimeServiceTest.testTransitionInstanceActivityNamePropertyBeforeStartEvent.bpmn20.xml") @Test public void testTransitionInstanceActivityTypePropertyBeforeStartEvent() { // given String processInstanceId = runtimeService.startProcessInstanceByKey("process").getId(); // when ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId); // then TransitionInstance[] instances = tree.getTransitionInstances("start"); TransitionInstance task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityType()); assertEquals("startEvent", task.getActivityType()); }
@Deployment(resources = "org/camunda/bpm/engine/test/api/runtime/RuntimeServiceTest.testTransitionInstanceActivityNamePropertyAfterStartEvent.bpmn20.xml") @Test public void testTransitionInstanceActivityTypePropertyAfterStartEvent() { // given String processInstanceId = runtimeService.startProcessInstanceByKey("process").getId(); // when ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId); // then TransitionInstance[] instances = tree.getTransitionInstances("start"); TransitionInstance task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityType()); assertEquals("startEvent", task.getActivityType()); }
public void execute(ProcessEngine engine, String scenarioName) { String processDefinitionId = engine.getRepositoryService().createProcessDefinitionQuery() .processDefinitionKey("oneTaskProcessInstanceModification_710") .singleResult() .getId(); String processInstanceId = engine.getRuntimeService() .startProcessInstanceById(processDefinitionId, "ProcessInstanceModificationScenario").getId(); engine.getRuntimeService().createModification(processDefinitionId) .processInstanceIds(processInstanceId) .startBeforeActivity("userTask2") .execute(); ActivityInstance tree = engine.getRuntimeService().getActivityInstance(processInstanceId); engine.getRuntimeService().createProcessInstanceModification(processInstanceId) .cancelActivityInstance(tree.getActivityInstances("userTask1")[0].getId()) .cancelTransitionInstance(tree.getTransitionInstances("userTask2")[0].getId()) .executeAsync(); } };
@Test public void testPriorityOnModification() { // given processInstance = runtimeService.startProcessInstanceByKey("serviceTaskProcess"); TransitionInstance transitionInstance = runtimeService.getActivityInstance(processInstance.getId()) .getTransitionInstances("serviceTask")[0]; // when runtimeService.createProcessInstanceModification(processInstance.getId()) .startBeforeActivity("serviceTask") .cancelTransitionInstance(transitionInstance.getId()) .execute(); // then Job job = managementService.createJobQuery().singleResult(); Assert.assertEquals(PriorityBean.PRIORITY, job.getPriority()); }
@Test public void testMigrateHistoricIncidentAddScope() { // given ProcessDefinition sourceProcess = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_USER_TASK_PROCESS); ProcessDefinition targetProcess = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_SUBPROCESS_USER_TASK_PROCESS); MigrationPlan migrationPlan = runtimeService.createMigrationPlan(sourceProcess.getId(), targetProcess.getId()) .mapActivities("userTask", "userTask") .build(); ProcessInstance processInstance = runtimeService.startProcessInstanceById(sourceProcess.getId()); Job job = managementService.createJobQuery().singleResult(); managementService.setJobRetries(job.getId(), 0); // when runtimeService.newMigration(migrationPlan) .processInstanceIds(Arrays.asList(processInstance.getId())) .execute(); // then ActivityInstance activityInstance = runtimeService.getActivityInstance(processInstance.getId()); HistoricIncident historicIncident = historyService.createHistoricIncidentQuery().singleResult(); Assert.assertNotNull(historicIncident); Assert.assertEquals( activityInstance.getTransitionInstances("userTask")[0].getExecutionId(), historicIncident.getExecutionId()); } }
/** * 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("innerTask2") // expand tree .cancelAllForActivity("innerTask2") // compact tree .startBeforeActivity("innerTask2") // expand tree .cancelAllForActivity("innerTask2") // compact tree .startBeforeActivity("innerTask2") // expand tree .cancelAllForActivity("innerTask2") // compact tree .cancelTransitionInstance(transitionInstance.getId()) .execute(); // then the process has ended assertProcessEnded(instance.getId()); }
@Deployment(resources = ASYNC_BEFORE_FAILING_TASK_PROCESS) public void testRestartAFailedServiceTask() { // given a failed job ProcessInstance instance = runtimeService.createProcessInstanceByKey("failingAfterBeforeTask") .startBeforeActivity("task2") .execute(); executeAvailableJobs(); Incident incident = runtimeService.createIncidentQuery().singleResult(); assertNotNull(incident); // when the service task is restarted ActivityInstance tree = runtimeService.getActivityInstance(instance.getId()); runtimeService.createProcessInstanceModification(instance.getId()) .startBeforeActivity("task2") .cancelTransitionInstance(tree.getTransitionInstances("task2")[0].getId()) .execute(); executeAvailableJobs(); // then executing the task has failed again and there is a new incident Incident newIncident = runtimeService.createIncidentQuery().singleResult(); assertNotNull(newIncident); assertNotSame(incident.getId(), newIncident.getId()); }
@Test public void testExecuteExclusiveFollowUpJobInDifferentProcessInstance() { testHelper.deploy(CALL_ACTIVITY_PROCESS, ONE_TASK_PROCESS); // given // a process instance with a single job ProcessInstance processInstance = engineRule.getRuntimeService().startProcessInstanceByKey("callActivityProcess"); jobExecutor.start(); // and first job acquisition that acquires the job acquisitionThread.waitForSync(); acquisitionThread.makeContinueAndWaitForSync(); // and job is executed acquisitionThread.makeContinueAndWaitForSync(); // then // the called instance has been created ProcessInstance calledInstance = engineRule.getRuntimeService() .createProcessInstanceQuery() .superProcessInstanceId(processInstance.getId()) .singleResult(); Assert.assertNotNull(calledInstance); // and there is a transition instance for the service task ActivityInstance activityInstance = engineRule.getRuntimeService().getActivityInstance(calledInstance.getId()); Assert.assertEquals(1, activityInstance.getTransitionInstances("serviceTask").length); // but the corresponding job is not locked JobEntity followUpJob = (JobEntity) engineRule.getManagementService().createJobQuery().singleResult(); Assert.assertNotNull(followUpJob); Assert.assertNull(followUpJob.getLockOwner()); Assert.assertNull(followUpJob.getLockExpirationTime()); }
Assert.assertEquals(1, activityInstance.getTransitionInstances("serviceTask2").length);
TransitionInstance transitionInstance = tree.getTransitionInstances("innerTask1")[0];