protected void verifyGenerateMigrationPlanInteraction(MigrationPlanBuilder migrationPlanBuilderMock, Map<String, Object> initialMigrationPlan) { verify(runtimeServiceMock).createMigrationPlan(eq(initialMigrationPlan.get(MigrationPlanDtoBuilder.PROP_SOURCE_PROCESS_DEFINITION_ID).toString()), eq(initialMigrationPlan.get(MigrationPlanDtoBuilder.PROP_TARGET_PROCESS_DEFINITION_ID).toString())); // the map equal activities method should be called verify(migrationPlanBuilderMock).mapEqualActivities(); // other instructions are ignored verify(migrationPlanBuilderMock, never()).mapActivities(anyString(), anyString()); }
public static MigrationPlan toMigrationPlan(ProcessEngine processEngine, MigrationPlanDto migrationPlanDto) { MigrationPlanBuilder migrationPlanBuilder = processEngine.getRuntimeService().createMigrationPlan(migrationPlanDto.getSourceProcessDefinitionId(), migrationPlanDto.getTargetProcessDefinitionId()); if (migrationPlanDto.getInstructions() != null) { for (MigrationInstructionDto migrationInstructionDto : migrationPlanDto.getInstructions()) { MigrationInstructionBuilder migrationInstructionBuilder = migrationPlanBuilder.mapActivities(migrationInstructionDto.getSourceActivityIds().get(0), migrationInstructionDto.getTargetActivityIds().get(0)); if (Boolean.TRUE.equals(migrationInstructionDto.isUpdateEventTrigger())) { migrationInstructionBuilder = migrationInstructionBuilder.updateEventTrigger(); } migrationPlanBuilder = migrationInstructionBuilder; } } return migrationPlanBuilder.build(); }
public static MigrationPlan toMigrationPlan(ProcessEngine processEngine, MigrationPlanDto migrationPlanDto) { MigrationPlanBuilder migrationPlanBuilder = processEngine.getRuntimeService().createMigrationPlan(migrationPlanDto.getSourceProcessDefinitionId(), migrationPlanDto.getTargetProcessDefinitionId()); if (migrationPlanDto.getInstructions() != null) { for (MigrationInstructionDto migrationInstructionDto : migrationPlanDto.getInstructions()) { MigrationInstructionBuilder migrationInstructionBuilder = migrationPlanBuilder.mapActivities(migrationInstructionDto.getSourceActivityIds().get(0), migrationInstructionDto.getTargetActivityIds().get(0)); if (Boolean.TRUE.equals(migrationInstructionDto.isUpdateEventTrigger())) { migrationInstructionBuilder = migrationInstructionBuilder.updateEventTrigger(); } migrationPlanBuilder = migrationInstructionBuilder; } } return migrationPlanBuilder.build(); }
@Test public void testMigrateNonExistingSourceDefinition() { ProcessDefinition processDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); try { runtimeService .createMigrationPlan("aNonExistingProcDefId", processDefinition.getId()) .mapActivities("userTask", "userTask") .build(); fail("Should not succeed"); } catch (BadUserRequestException e) { assertExceptionMessage(e, "Source process definition with id 'aNonExistingProcDefId' does not exist"); } }
@Test public void testMigrateNonExistingTargetDefinition() { ProcessDefinition processDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); try { runtimeService .createMigrationPlan(processDefinition.getId(), "aNonExistingProcDefId") .mapActivities("userTask", "userTask") .build(); fail("Should not succeed"); } catch (BadUserRequestException e) { assertExceptionMessage(e, "Target process definition with id 'aNonExistingProcDefId' does not exist"); } }
@Test public void testMigrateNullTargetDefinition() { ProcessDefinition processDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); try { runtimeService .createMigrationPlan(processDefinition.getId(), null) .mapActivities("userTask", "userTask") .build(); fail("Should not succeed"); } catch (BadUserRequestException e) { assertExceptionMessage(e, "Target process definition id is null"); } }
@Test public void testMigrateNullSourceDefinition() { ProcessDefinition processDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); try { runtimeService .createMigrationPlan(null, processDefinition.getId()) .mapActivities("userTask", "userTask") .build(); fail("Should not succeed"); } catch (BadUserRequestException e) { assertExceptionMessage(e, "Source process definition id is null"); } }
@Test public void testMigrateConditionalEventWithoutUpdateTrigger() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ONE_CONDITION_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ONE_CONDITION_PROCESS); //expect migration validation exception exceptionRule.expect(MigrationPlanValidationException.class); exceptionRule.expectMessage(MIGRATION_CONDITIONAL_VALIDATION_ERROR_MSG); //when conditional event is migrated without update event trigger rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(CONDITION_ID, CONDITION_ID) .build(); }
@Test public void testMigrateNullSourceActivityId() { ProcessDefinition sourceDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); try { runtimeService .createMigrationPlan(sourceDefinition.getId(), targetDefinition.getId()) .mapActivities(null, "userTask") .build(); fail("Should not succeed"); } catch (MigrationPlanValidationException e) { assertThat(e.getValidationReport()) .hasInstructionFailures(null, "Source activity id is null"); } }
@Test public void testMigrateNullTargetActivityId() { ProcessDefinition sourceDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); try { runtimeService .createMigrationPlan(sourceDefinition.getId(), targetDefinition.getId()) .mapActivities("userTask", null) .build(); fail("Should not succeed"); } catch (MigrationPlanValidationException e) { assertThat(e.getValidationReport()) .hasInstructionFailures("userTask", "Target activity id is null"); } }
@Test public void testMigrateConditionalBoundaryEventKeepTrigger() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CONDITIONAL_EVENT_SUBPROCESS_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CONDITIONAL_EVENT_SUBPROCESS_PROCESS); // expected migration validation exception exceptionRule.expect(MigrationPlanValidationException.class); exceptionRule.expectMessage(MIGRATION_CONDITIONAL_VALIDATION_ERROR_MSG); // when conditional event sub process is migrated without update event trigger rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(USER_TASK_ID, USER_TASK_ID) .mapActivities(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID) .build(); }
@Test public void testMigrateNonExistingSourceActivityId() { ProcessDefinition sourceDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); try { runtimeService .createMigrationPlan(sourceDefinition.getId(), targetDefinition.getId()) .mapActivities("thisActivityDoesNotExist", "userTask") .build(); fail("Should not succeed"); } catch (MigrationPlanValidationException e) { assertThat(e.getValidationReport()) .hasInstructionFailures("thisActivityDoesNotExist", "Source activity 'thisActivityDoesNotExist' does not exist"); } }
@Test public void testMigrateNonExistingTargetActivityId() { ProcessDefinition sourceDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); try { runtimeService .createMigrationPlan(sourceDefinition.getId(), targetDefinition.getId()) .mapActivities("userTask", "thisActivityDoesNotExist") .build(); fail("Should not succeed"); } catch (MigrationPlanValidationException e) { assertThat(e.getValidationReport()) .hasInstructionFailures("userTask", "Target activity 'thisActivityDoesNotExist' does not exist"); } }
@Test public void testRemoveTransactionContinueProcess() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(TransactionModels.ONE_TASK_TRANSACTION); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask", "userTask") .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then testHelper.completeTask("userTask"); testHelper.assertProcessEnded(processInstance.getId()); }
@Test public void testAddTransactionContinueProcess() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(TransactionModels.ONE_TASK_TRANSACTION); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask", "userTask") .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then testHelper.completeTask("userTask"); testHelper.assertProcessEnded(processInstance.getId()); }
@Test public void testRemoveSequentialMultiInstanceBodyVariables() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(MultiInstanceProcessModels.SEQ_MI_ONE_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask", "userTask") .build(); // when testHelper.createProcessInstanceAndMigrate(migrationPlan); // then all MI variables are gone Assert.assertEquals(0, rule.getRuntimeService().createVariableInstanceQuery().count()); }
@Test public void testMigrateSubProcessToProcessDefinition() { ProcessDefinition sourceDefinition = testHelper.deployAndGetDefinition(ProcessModels.SUBPROCESS_PROCESS); ProcessDefinition targetDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); try { runtimeService .createMigrationPlan(sourceDefinition.getId(), targetDefinition.getId()) .mapActivities("subProcess", targetDefinition.getId()) .build(); fail("Should not succeed"); } catch (MigrationPlanValidationException e) { assertThat(e.getValidationReport()) .hasInstructionFailures("subProcess", "Target activity '" + targetDefinition.getId() + "' does not exist"); } }
@Test public void testExplicitInstructionGeneration() { ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); MigrationPlan migrationPlan = runtimeService .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask", "userTask") .build(); assertThat(migrationPlan) .hasSourceProcessDefinition(sourceProcessDefinition) .hasTargetProcessDefinition(targetProcessDefinition) .hasInstructions( migrate("userTask").to("userTask") ); }
@Before public void initTest() { runtimeService = rule.getRuntimeService(); historyService = rule.getHistoryService(); sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ModifiableBpmnModelInstance modifiedModel = modify(ProcessModels.ONE_TASK_PROCESS).changeElementId("Process", "Process2") .changeElementId("userTask", "userTask2"); targetProcessDefinition = testHelper.deployAndGetDefinition(modifiedModel); migrationPlan = runtimeService.createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask", "userTask2") .build(); runtimeService.startProcessInstanceById(sourceProcessDefinition.getId()); }
@Test public void testMapUserTaskSiblingOfEventSubProcessAndTriggerEvent() { ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(configuration.getSourceProcess()); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(configuration.getSourceProcess()); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(USER_TASK_ID, USER_TASK_ID) .build(); // when testHelper.createProcessInstanceAndMigrate(migrationPlan); // then it is possible to trigger event sub process and successfully complete the migrated instance configuration.triggerEventSubProcess(testHelper); testHelper.completeTask(EVENT_SUB_PROCESS_TASK_ID); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); } }