@Before public void setUpRuntimeData() { runtimeServiceMock = mock(RuntimeService.class); when(processEngine.getRuntimeService()).thenReturn(runtimeServiceMock); modificationBuilderMock = mock(ModificationBuilder.class); when(modificationBuilderMock.cancelAllForActivity(anyString())).thenReturn(modificationBuilderMock); when(modificationBuilderMock.startAfterActivity(anyString())).thenReturn(modificationBuilderMock); when(modificationBuilderMock.startBeforeActivity(anyString())).thenReturn(modificationBuilderMock); when(modificationBuilderMock.startTransition(anyString())).thenReturn(modificationBuilderMock); when(modificationBuilderMock.processInstanceIds(anyListOf(String.class))).thenReturn(modificationBuilderMock); Batch batchMock = createMockBatch(); when(modificationBuilderMock.executeAsync()).thenReturn(batchMock); when(runtimeServiceMock.createModification(anyString())).thenReturn(modificationBuilderMock); }
public void execute(ProcessEngine engine, String scenarioName) { String processDefinitionId = engine.getRepositoryService().createProcessDefinitionQuery() .processDefinitionKey("oneTaskProcessModification_710") .singleResult() .getId(); List<String> processInstanceIds = new ArrayList<>(); for (int i = 0; i < 10; i++) { String processInstanceId = engine.getRuntimeService() .startProcessInstanceById(processDefinitionId, "ModificationBatchScenario").getId(); processInstanceIds.add(processInstanceId); } engine.getRuntimeService().createModification(processDefinitionId) .startAfterActivity("theStart") .startBeforeActivity("theTask") .startBeforeActivity("userTask4") .startTransition("flow2") .cancelAllForActivity("userTask4", false) .processInstanceIds(processInstanceIds) .skipCustomListeners() .skipIoMappings() .executeAsync(); } };
@Test public void createSimpleModificationPlan() { ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> instances = helper.startInstances("process1", 2); runtimeService.createModification(processDefinition.getId()).startBeforeActivity("user2").cancelAllForActivity("user1").processInstanceIds(instances).execute(); for (String instanceId : instances) { List<String> activeActivityIds = runtimeService.getActiveActivityIds(instanceId); assertEquals(1, activeActivityIds.size()); assertEquals(activeActivityIds.iterator().next(), "user2"); } }
public Batch startBeforeAsync(String key, int numberOfProcessInstances, String activityId, String processDefinitionId) { RuntimeService runtimeService = engineRule.getRuntimeService(); List<String> processInstanceIds = startInstances(key, numberOfProcessInstances); return runtimeService.createModification(processDefinitionId).startBeforeActivity(activityId).processInstanceIds(processInstanceIds).executeAsync(); }
@Test public void executeModificationAsync() { Map<String, Object> json = new HashMap<String, Object>(); List<Map<String, Object>> instructions = new ArrayList<Map<String, Object>>(); instructions.add(ModificationInstructionBuilder.startTransition().transitionId("transitionId").getJson()); instructions.add(ModificationInstructionBuilder.startBefore().activityId("activityId").getJson()); instructions.add(ModificationInstructionBuilder.startAfter().activityId("activityId").getJson()); instructions.add(ModificationInstructionBuilder.cancellation().activityId("activityId").getJson()); json.put("processDefinitionId", "processDefinitionId"); json.put("instructions", instructions); json.put("processInstanceIds", Arrays.asList("100", "20")); given() .contentType(POST_JSON_CONTENT_TYPE) .body(json) .then() .expect() .statusCode(Status.OK.getStatusCode()) .when() .post(EXECUTE_MODIFICATION_ASYNC_URL); verify(runtimeServiceMock).createModification("processDefinitionId"); verify(modificationBuilderMock).processInstanceIds(eq(Arrays.asList("100", "20"))); verify(modificationBuilderMock).cancelAllForActivity("activityId"); verify(modificationBuilderMock).startBeforeActivity("activityId"); verify(modificationBuilderMock).startAfterActivity("activityId"); verify(modificationBuilderMock).startTransition("transitionId"); verify(modificationBuilderMock).executeAsync(); }
@Test public void testListenerInvocation() { // given DelegateEvent.clearEvents(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(modify(instance) .activityBuilder("user2") .camundaExecutionListenerClass(ExecutionListener.EVENTNAME_START, DelegateExecutionListener.class.getName()) .done() ); ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId()); Batch batch = runtimeService .createModification(processDefinition.getId()) .startBeforeActivity("user2") .processInstanceIds(Arrays.asList(processInstance.getId())) .executeAsync(); helper.executeSeedJob(batch); // when helper.executeJobs(batch); // then List<DelegateEvent> recordedEvents = DelegateEvent.getEvents(); assertEquals(1, recordedEvents.size()); DelegateEvent event = recordedEvents.get(0); assertEquals(processDefinition.getId(), event.getProcessDefinitionId()); assertEquals("user2", event.getCurrentActivityId()); DelegateEvent.clearEvents(); }
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 testStartBeforeAndCancelAll() { DeploymentWithDefinitions deployment = testRule.deploy(instance); ProcessDefinition definition = deployment.getDeployedProcessDefinitions().get(0); List<String> processInstanceIds = helper.startInstances("process1", 2); runtimeService.createModification(definition.getId()).cancelAllForActivity("user1").startBeforeActivity("user2").processInstanceIds(processInstanceIds).execute(); for (String processInstanceId : processInstanceIds) { ActivityInstance updatedTree = runtimeService.getActivityInstance(processInstanceId); assertNotNull(updatedTree); assertEquals(processInstanceId, updatedTree.getProcessInstanceId()); assertThat(updatedTree).hasStructure(describeActivityInstanceTree(definition.getId()).activity("user2").done()); } }
@Test public void testCancelWithoutFlag2() { // given this.instance = Bpmn.createExecutableProcess("process1") .startEvent("start") .serviceTask("ser").camundaExpression("${true}") .userTask("user") .endEvent("end") .done(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> processInstanceIds = helper.startInstances("process1", 1); // when runtimeService.createModification(processDefinition.getId()) .startBeforeActivity("ser") .cancelAllForActivity("user", false) .processInstanceIds(processInstanceIds) .execute(); // then assertEquals(0, runtimeService.createExecutionQuery().list().size()); }
@Test public void testStartBefore() { DeploymentWithDefinitions deployment = testRule.deploy(instance); ProcessDefinition definition = deployment.getDeployedProcessDefinitions().get(0); List<String> processInstanceIds = helper.startInstances("process1", 2); runtimeService.createModification(definition.getId()).startBeforeActivity("user2").processInstanceIds(processInstanceIds).execute(); for (String processInstanceId : processInstanceIds) { ActivityInstance updatedTree = runtimeService.getActivityInstance(processInstanceId); assertNotNull(updatedTree); assertEquals(processInstanceId, updatedTree.getProcessInstanceId()); assertThat(updatedTree).hasStructure( describeActivityInstanceTree( definition.getId()) .activity("user1") .activity("user2") .done()); } }
@Test public void testCancelWithoutFlag() { // given this.instance = Bpmn.createExecutableProcess("process1") .startEvent("start") .serviceTask("ser").camundaExpression("${true}") .userTask("user") .endEvent("end") .done(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> processInstanceIds = helper.startInstances("process1", 1); // when runtimeService.createModification(processDefinition.getId()) .startBeforeActivity("ser") .cancelAllForActivity("user") .processInstanceIds(processInstanceIds) .execute(); // then assertEquals(0, runtimeService.createExecutionQuery().list().size()); }
@Test public void executeModificationJobsForStartBeforeAndCancelAll() { ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> instances = helper.startInstances("process1", 10); Batch batch = runtimeService .createModification(processDefinition.getId()) .startBeforeActivity("user1") .cancelAllForActivity("user1") .processInstanceIds(instances) .executeAsync(); helper.executeSeedJob(batch); List<Job> modificationJobs = helper.getExecutionJobs(batch); // when for (Job modificationJob : modificationJobs) { helper.executeJob(modificationJob); } // then all process instances where modified for (String processInstanceId : helper.currentProcessInstances) { ActivityInstance updatedTree = runtimeService.getActivityInstance(processInstanceId); assertNull(updatedTree); } // and the no modification jobs exist assertEquals(0, helper.getExecutionJobs(batch).size()); // but a monitor job exists assertNotNull(helper.getMonitorJob(batch)); }
@Test public void testDifferentStates() { DeploymentWithDefinitions deployment = testRule.deploy(instance); ProcessDefinition definition = deployment.getDeployedProcessDefinitions().get(0); List<String> processInstanceIds = helper.startInstances("process1", 1); Task task = rule.getTaskService().createTaskQuery().singleResult(); rule.getTaskService().complete(task.getId()); List<String> anotherProcessInstanceIds = helper.startInstances("process1", 1); processInstanceIds.addAll(anotherProcessInstanceIds); runtimeService.createModification(definition.getId()).startBeforeActivity("user3").processInstanceIds(processInstanceIds).execute(); ActivityInstance updatedTree = null; String processInstanceId = processInstanceIds.get(0); updatedTree = runtimeService.getActivityInstance(processInstanceId); assertNotNull(updatedTree); assertEquals(processInstanceId, updatedTree.getProcessInstanceId()); assertThat(updatedTree).hasStructure(describeActivityInstanceTree(definition.getId()).activity("user2").activity("user3").done()); processInstanceId = processInstanceIds.get(1); updatedTree = runtimeService.getActivityInstance(processInstanceId); assertNotNull(updatedTree); assertEquals(processInstanceId, updatedTree.getProcessInstanceId()); assertThat(updatedTree).hasStructure(describeActivityInstanceTree(definition.getId()).activity("user1").activity("user3").done()); }
@Test public void testSkipIoMappingInvocation() { // given ProcessDefinition processDefinition = testRule.deployAndGetDefinition(modify(instance) .activityBuilder("user2") .camundaInputParameter("foo", "bar") .done()); ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId()); Batch batch = runtimeService .createModification(processDefinition.getId()) .startBeforeActivity("user2") .processInstanceIds(Arrays.asList(processInstance.getId())) .skipIoMappings() .executeAsync(); helper.executeSeedJob(batch); // when helper.executeJobs(batch); // then assertEquals(0, runtimeService.createVariableInstanceQuery().count()); }
@Test public void testCancelWithoutFlag2() { // given this.instance = Bpmn.createExecutableProcess("process1") .startEvent("start") .serviceTask("ser").camundaExpression("${true}") .userTask("user") .endEvent("end") .done(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> processInstanceIds = helper.startInstances("process1", 1); // when Batch batch = runtimeService.createModification(processDefinition.getId()) .startBeforeActivity("ser") .cancelAllForActivity("user", false) .processInstanceIds(processInstanceIds) .executeAsync(); helper.executeSeedJob(batch); helper.executeJobs(batch); // then assertEquals(0, runtimeService.createExecutionQuery().list().size()); }
@Test public void testCancelWithoutFlag() { // given this.instance = Bpmn.createExecutableProcess("process1") .startEvent("start") .serviceTask("ser").camundaExpression("${true}") .userTask("user") .endEvent("end") .done(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> processInstanceIds = helper.startInstances("process1", 1); // when Batch batch = runtimeService.createModification(processDefinition.getId()) .startBeforeActivity("ser") .cancelAllForActivity("user") .processInstanceIds(processInstanceIds) .executeAsync(); helper.executeSeedJob(batch); helper.executeJobs(batch); // then assertEquals(0, runtimeService.createExecutionQuery().list().size()); }
@Test public void testCancelWithFlag() { // given this.instance = Bpmn.createExecutableProcess("process1") .startEvent("start") .serviceTask("ser").camundaExpression("${true}") .userTask("user") .endEvent("end") .done(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> processInstanceIds = helper.startInstances("process1", 1); // when runtimeService.createModification(processDefinition.getId()) .startBeforeActivity("ser") .cancelAllForActivity("user", true) .processInstanceIds(processInstanceIds) .execute(); // then ExecutionEntity execution = (ExecutionEntity) runtimeService.createExecutionQuery().singleResult(); assertNotNull(execution); assertEquals("user", execution.getActivityId()); }
@Test public void testCancelWithFlagForManyInstances() { // given this.instance = Bpmn.createExecutableProcess("process1") .startEvent("start") .serviceTask("ser").camundaExpression("${true}") .userTask("user") .endEvent("end") .done(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> processInstanceIds = helper.startInstances("process1", 10); // when runtimeService.createModification(processDefinition.getId()) .startBeforeActivity("ser") .cancelAllForActivity("user", true) .processInstanceIds(processInstanceIds) .execute(); // then for (String processInstanceId : processInstanceIds) { Execution execution = runtimeService.createExecutionQuery().processInstanceId(processInstanceId).singleResult(); assertNotNull(execution); assertEquals("user", ((ExecutionEntity) execution).getActivityId()); } }
@Test public void testCancelWithFlag() { // given this.instance = Bpmn.createExecutableProcess("process1") .startEvent("start") .serviceTask("ser").camundaExpression("${true}") .userTask("user") .endEvent("end") .done(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> processInstanceIds = helper.startInstances("process1", 1); // when Batch batch = runtimeService.createModification(processDefinition.getId()) .startBeforeActivity("ser") .cancelAllForActivity("user", true) .processInstanceIds(processInstanceIds) .executeAsync(); helper.executeSeedJob(batch); helper.executeJobs(batch); // then ExecutionEntity execution = (ExecutionEntity) runtimeService.createExecutionQuery().singleResult(); assertNotNull(execution); assertEquals("user", execution.getActivityId()); }
@Test public void testCancelWithFlagForManyInstances() { // given this.instance = Bpmn.createExecutableProcess("process1") .startEvent("start") .serviceTask("ser").camundaExpression("${true}") .userTask("user") .endEvent("end") .done(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> processInstanceIds = helper.startInstances("process1", 10); // when Batch batch = runtimeService.createModification(processDefinition.getId()) .startBeforeActivity("ser") .cancelAllForActivity("user", true) .processInstanceIds(processInstanceIds) .executeAsync(); helper.executeSeedJob(batch); helper.executeJobs(batch); // then for (String processInstanceId : processInstanceIds) { Execution execution = runtimeService.createExecutionQuery().processInstanceId(processInstanceId).singleResult(); assertNotNull(execution); assertEquals("user", ((ExecutionEntity) execution).getActivityId()); } }