@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); }
@Test public void createModificationUsingProcessInstanceIdsListWithNullValueAsync() { try { runtimeService.createModification("processDefinitionId").startAfterActivity("user1").processInstanceIds(Arrays.asList("foo", null, "bar")).executeAsync(); fail("Should not succeed"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), containsString("Process instance ids contains null value")); } }
@Test public void createModificationWithEmptyProcessInstanceIdsList() { try { runtimeService.createModification("processDefinitionId").startAfterActivity("user1").processInstanceIds(Collections.<String> emptyList()).execute(); fail("Should not succeed"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), containsString("Process instance ids is empty")); } }
@Test public void createModificationWithEmptyProcessInstanceIdsListAsync() { try { runtimeService.createModification("processDefinitionId").startAfterActivity("user1").processInstanceIds(Collections.<String> emptyList()).executeAsync(); fail("Should not succeed"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), containsString("Process instance ids is empty")); } }
@Test public void createModificationUsingProcessInstanceIdsListWithNullValue() { try { runtimeService.createModification("processDefinitionId").startAfterActivity("user1").processInstanceIds(Arrays.asList("foo", null, "bar")).execute(); fail("Should not succeed"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), containsString("Process instance ids contains null value")); } }
@Test public void executeModificationWithValidProcessInstanceQuerySync() { when(runtimeServiceMock.createProcessInstanceQuery()).thenReturn(new ProcessInstanceQueryImpl()); Map<String, Object> json = new HashMap<String, Object>(); List<Map<String, Object>> instructions = new ArrayList<Map<String, Object>>(); instructions.add(ModificationInstructionBuilder.startAfter().activityId("activityId").getJson()); json.put("processDefinitionId", "processDefinitionId"); ProcessInstanceQueryDto processInstanceQueryDto = new ProcessInstanceQueryDto(); processInstanceQueryDto.setBusinessKey("foo"); json.put("processInstanceQuery", processInstanceQueryDto); json.put("instructions", instructions); given() .contentType(ContentType.JSON) .body(json) .then() .expect() .statusCode(Status.NO_CONTENT.getStatusCode()) .when() .post(EXECUTE_MODIFICATION_SYNC_URL); verify(runtimeServiceMock, times(1)).createProcessInstanceQuery(); verify(modificationBuilderMock).startAfterActivity("activityId"); verify(modificationBuilderMock).processInstanceQuery(processInstanceQueryDto.toQuery(processEngine)); verify(modificationBuilderMock).execute(); }
@Test public void testNullProcessInstanceQuery() { try { runtimeService.createModification("processDefinitionId").startAfterActivity("user1").processInstanceQuery(null).execute(); fail("Should not succeed"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), containsString("Process instance ids is empty")); } }
public Batch startAfterAsync(String key, int numberOfProcessInstances, String activityId, String processDefinitionId) { RuntimeService runtimeService = engineRule.getRuntimeService(); List<String> processInstanceIds = startInstances(key, numberOfProcessInstances); return runtimeService .createModification(processDefinitionId) .startAfterActivity(activityId) .processInstanceIds(processInstanceIds) .executeAsync(); }
@Test public void testNullProcessInstanceQueryAsync() { try { runtimeService.createModification("processDefinitionId").startAfterActivity("user1").processInstanceQuery(null).executeAsync(); fail("Should not succeed"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), containsString("Process instance ids is empty")); } }
@Test public void createModificationWithNullProcessInstanceIdsListAsync() { try { runtimeService.createModification("processDefinitionId").startAfterActivity("user1").processInstanceIds((List<String>) null).executeAsync(); fail("Should not succeed"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), containsString("Process instance ids is empty")); } }
@Test public void createModificationWithNullProcessInstanceIdsArray() { try { runtimeService.createModification("processDefinitionId") .startAfterActivity("user1") .processInstanceIds((String[]) null).execute(); fail("Should not be able to modify"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), CoreMatchers.containsString("Process instance ids is empty")); } }
@Test public void createModificationWithNullProcessInstanceIdsArrayAsync() { try { runtimeService.createModification("processDefinitionId").startAfterActivity("user1").processInstanceIds((String[]) null).executeAsync(); fail("Should not be able to modify"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), CoreMatchers.containsString("Process instance ids is empty")); } }
@Test public void createModificationWithNullProcessInstanceIdsList() { try { runtimeService.createModification("processDefinitionId").startAfterActivity("user1") .processInstanceIds((List<String>) null).execute(); fail("Should not succeed"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), containsString("Process instance ids is empty")); } }
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 createBatchModification() { ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> processInstanceIds = helper.startInstances("process1", 2); Batch batch = runtimeService.createModification(processDefinition.getId()).startAfterActivity("user2").processInstanceIds(processInstanceIds).executeAsync(); assertBatchCreated(batch, 2); }
@Test public void testBatchCreationWithProcessInstanceQuery() { int processInstanceCount = 15; DeploymentWithDefinitions deployment = testRule.deploy(instance); ProcessDefinition processDefinition = deployment.getDeployedProcessDefinitions().get(0); helper.startInstances("process1", 15); ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(processDefinition.getId()); assertEquals(processInstanceCount, processInstanceQuery.count()); // when Batch batch = runtimeService .createModification(processDefinition.getId()) .startAfterActivity("user1") .processInstanceQuery(processInstanceQuery) .executeAsync(); // then a batch is created assertBatchCreated(batch, processInstanceCount); }
@Test public void testStartAfter() { DeploymentWithDefinitions deployment = testRule.deploy(instance); ProcessDefinition definition = deployment.getDeployedProcessDefinitions().get(0); List<String> processInstanceIds = helper.startInstances("process1", 2); runtimeService.createModification(definition.getId()).startAfterActivity("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("user3").done()); } }
@Test public void testNoCreationOnSyncBatchJobExecution() { // given ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId()); Batch batch = runtimeService.createModification(processDefinition.getId()) .startAfterActivity("user2") .processInstanceIds(Arrays.asList(processInstance.getId())) .executeAsync(); helper.executeSeedJob(batch); // when rule.getIdentityService().setAuthenticatedUserId("userId"); helper.executeJobs(batch); rule.getIdentityService().clearAuthentication(); // then Assert.assertEquals(0, rule.getHistoryService().createUserOperationLogQuery().count()); }
@Test public void createBatchModification() { //given BpmnModelInstance instance = Bpmn.createExecutableProcess("process1").startEvent().userTask("user1").userTask("user2").endEvent().done(); ProcessDefinition processDefinition = testHelper.deployAndGetDefinition(instance); List<String> instances = new ArrayList<String>(); for (int i = 0; i < 2; i++) { ProcessInstance processInstance = engineRule.getRuntimeService().startProcessInstanceByKey("process1"); instances.add(processInstance.getId()); } authRule .init(scenario) .withUser("userId") .bindResource("batchId", "*") .start(); // when engineRule.getRuntimeService().createModification(processDefinition.getId()).startAfterActivity("user1").processInstanceIds(instances).executeAsync(); // then if (authRule.assertScenario(scenario)) { Batch batch = engineRule.getManagementService().createBatchQuery().singleResult(); assertEquals("userId", batch.getCreateUserId()); } }
@Test public void executeModification() { //given ProcessInstance processInstance1 = engineRule.getRuntimeService().startProcessInstanceByKey(ProcessModels.PROCESS_KEY); ProcessInstance processInstance2 = engineRule.getRuntimeService().startProcessInstanceByKey(ProcessModels.PROCESS_KEY); authRule .init(scenario) .withUser("userId") .bindResource("processInstance1", processInstance1.getId()) .bindResource("processInstance2", processInstance2.getId()) .bindResource("processDefinition", ProcessModels.PROCESS_KEY) .bindResource("batchId", "*") .start(); // when engineRule.getRuntimeService() .createModification(processDefinition.getId()) .processInstanceIds(processInstance1.getId(), processInstance2.getId()) .startAfterActivity("userTask2") .execute(); // then authRule.assertScenario(scenario); } }