@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") ); }
@Test public void testMigrateTaskToHigherScope() { ProcessDefinition sourceDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetDefinition = testHelper.deployAndGetDefinition(ProcessModels.SUBPROCESS_PROCESS); MigrationPlan migrationPlan = runtimeService .createMigrationPlan(sourceDefinition.getId(), targetDefinition.getId()) .mapActivities("userTask", "userTask") .build(); assertThat(migrationPlan) .hasSourceProcessDefinition(sourceDefinition) .hasTargetProcessDefinition(targetDefinition) .hasInstructions( migrate("userTask").to("userTask") ); }
@Test public void testContinueProcess() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(TransactionModels.ONE_TASK_TRANSACTION); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(TransactionModels.ONE_TASK_TRANSACTION); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("transaction", "transaction") .mapActivities("userTask", "userTask") .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then testHelper.completeTask("userTask"); testHelper.assertProcessEnded(processInstance.getId()); }
@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()); } }
@Test public void testCanUpdateEventTriggerForEventSubProcessStartEvent() { ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(EventSubProcessModels.TIMER_EVENT_SUBPROCESS_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(EventSubProcessModels.TIMER_EVENT_SUBPROCESS_PROCESS); MigrationPlan migrationPlan = runtimeService .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("eventSubProcessStart", "eventSubProcessStart").updateEventTrigger() .build(); assertThat(migrationPlan) .hasSourceProcessDefinition(sourceProcessDefinition) .hasTargetProcessDefinition(targetProcessDefinition) .hasInstructions( migrate("eventSubProcessStart").to("eventSubProcessStart").updateEventTrigger(true) ); }