public MigratingProcessInstanceValidationException failingMigratingProcessInstanceValidation(MigratingProcessInstanceValidationReportImpl validationReport) { StringBuilder sb = new StringBuilder(); validationReport.writeTo(sb); return new MigratingProcessInstanceValidationException(exceptionMessage( "004", "{}", sb.toString()), validationReport); }
public static MigratingProcessInstanceValidationExceptionDto from(MigratingProcessInstanceValidationException exception) { MigratingProcessInstanceValidationExceptionDto dto = new MigratingProcessInstanceValidationExceptionDto(); dto.message = exception.getMessage(); dto.type = exception.getClass().getSimpleName(); dto.setValidationReport(MigratingProcessInstanceValidationReportDto.from(exception.getValidationReport())); return dto; }
@Test public void testCannotMigrateWhenNotAllActivityInstancesAreMapped() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.PARALLEL_GATEWAY_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.PARALLEL_GATEWAY_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService().createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask1", "userTask1") .build(); // when try { testHelper.createProcessInstanceAndMigrate(migrationPlan); Assert.fail("should not succeed because the userTask2 instance is not mapped"); } catch (MigratingProcessInstanceValidationException e) { assertThat(e.getValidationReport()) .hasActivityInstanceFailures("userTask2", "There is no migration instruction for this instance's activity"); } }
@Test public void testCannotMigrateUnmappedTransitionInstance() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_USER_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_USER_TASK_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .build(); // when try { testHelper.createProcessInstanceAndMigrate(migrationPlan); Assert.fail("should fail"); } catch (MigratingProcessInstanceValidationException e) { // then assertThat(e.getValidationReport()) .hasTransitionInstanceFailures("userTask", "There is no migration instruction for this instance's activity" ); } }
@Test public void testMigrateAsyncBeforeStartEventTransitionInstanceCase2() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_START_EVENT_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_SUBPROCESS_START_EVENT_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("startEvent", "subProcessStart") .build(); // when try { testHelper.createProcessInstanceAndMigrate(migrationPlan); Assert.fail("should fail"); } catch (MigratingProcessInstanceValidationException e) { assertThat(e.getValidationReport()) .hasTransitionInstanceFailures("startEvent", "A transition instance that instantiates the process can only be migrated to a process-level flow node" ); } }
public static MigratingProcessInstanceValidationExceptionDto from(MigratingProcessInstanceValidationException exception) { MigratingProcessInstanceValidationExceptionDto dto = new MigratingProcessInstanceValidationExceptionDto(); dto.message = exception.getMessage(); dto.type = exception.getClass().getSimpleName(); dto.setValidationReport(MigratingProcessInstanceValidationReportDto.from(exception.getValidationReport())); return dto; }
public MigratingProcessInstanceValidationException failingMigratingProcessInstanceValidation(MigratingProcessInstanceValidationReportImpl validationReport) { StringBuilder sb = new StringBuilder(); validationReport.writeTo(sb); return new MigratingProcessInstanceValidationException(exceptionMessage( "004", "{}", sb.toString()), validationReport); }
@Test public void testCannotMigrateAsyncBeforeTransitionInstanceToNonAsyncActivity() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_USER_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapEqualActivities() .build(); // when try { testHelper.createProcessInstanceAndMigrate(migrationPlan); Assert.fail("should fail"); } catch (MigratingProcessInstanceValidationException e) { // then assertThat(e.getValidationReport()) .hasTransitionInstanceFailures("userTask", "Target activity is not asyncBefore" ); } }
public static MigratingProcessInstanceValidationExceptionDto from(MigratingProcessInstanceValidationException exception) { MigratingProcessInstanceValidationExceptionDto dto = new MigratingProcessInstanceValidationExceptionDto(); dto.message = exception.getMessage(); dto.type = exception.getClass().getSimpleName(); dto.setValidationReport(MigratingProcessInstanceValidationReportDto.from(exception.getValidationReport())); return dto; }
when(processInstanceReport.getTransitionInstanceReports()).thenReturn(Arrays.asList(instanceReport2)); doThrow(new MigratingProcessInstanceValidationException("fooo", processInstanceReport)) .when(migrationPlanExecutionBuilderMock).execute();
@Test public void testCannotMigrateActivityInstance() { // given BpmnModelInstance model = ProcessModels.newModel() .startEvent() .serviceTask("serviceTask") .camundaClass(SignallableServiceTaskDelegate.class.getName()) .endEvent() .done(); ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(model); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(model); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("serviceTask", "serviceTask") .build(); // when try { testHelper.createProcessInstanceAndMigrate(migrationPlan); Assert.fail("should fail"); } catch (MigratingProcessInstanceValidationException e) { // then assertThat(e.getValidationReport()) .hasActivityInstanceFailures("serviceTask", "The type of the source activity is not supported for activity instance migration" ); } }
public MigratingProcessInstanceValidationException failingMigratingProcessInstanceValidation(MigratingProcessInstanceValidationReportImpl validationReport) { StringBuilder sb = new StringBuilder(); validationReport.writeTo(sb); return new MigratingProcessInstanceValidationException(exceptionMessage( "004", "{}", sb.toString()), validationReport); }
@Test public void testCannotMigrateUnmappedTransitionInstanceAtNonLeafActivity() { // given BpmnModelInstance model = modify(ProcessModels.SUBPROCESS_PROCESS) .activityBuilder("subProcess") .camundaAsyncBefore(true) .done(); ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(model); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(model); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .build(); // when try { testHelper.createProcessInstanceAndMigrate(migrationPlan); Assert.fail("should fail"); } catch (MigratingProcessInstanceValidationException e) { // then assertThat(e.getValidationReport()) .hasTransitionInstanceFailures("subProcess", "There is no migration instruction for this instance's activity" ); } }
@Test public void testCannotMigrateAsyncAfterTransitionInstanceToNonAsyncActivity() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_AFTER_USER_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask1", "userTask") .build(); ProcessInstance processInstance = rule.getRuntimeService() .startProcessInstanceById(sourceProcessDefinition.getId()); testHelper.completeTask("userTask1"); // when try { testHelper.migrateProcessInstance(migrationPlan, processInstance); Assert.fail("should fail"); } catch (MigratingProcessInstanceValidationException e) { // then assertThat(e.getValidationReport()) .hasTransitionInstanceFailures("userTask1", "Target activity is not asyncAfter" ); } }
@Test public void testCannotMigrateWhenNotAllTransitionInstancesAreMapped() { // given BpmnModelInstance model = ModifiableBpmnModelInstance.modify(ProcessModels.PARALLEL_GATEWAY_PROCESS) .activityBuilder("userTask1") .camundaAsyncBefore() .moveToActivity("userTask2") .camundaAsyncBefore() .done(); ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(model); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(model); MigrationPlan migrationPlan = rule.getRuntimeService().createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask1", "userTask1") .build(); // when try { testHelper.createProcessInstanceAndMigrate(migrationPlan); Assert.fail("should not succeed because the userTask2 instance is not mapped"); } catch (MigratingProcessInstanceValidationException e) { assertThat(e.getValidationReport()) .hasTransitionInstanceFailures("userTask2", "There is no migration instruction for this instance's activity"); } }
@Test public void testCannotRemoveCompensationEventSubscriptions() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.ONE_COMPENSATION_TASK_MODEL); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.TWO_TASKS_PROCESS); ProcessInstance processInstance = rule.getRuntimeService().startProcessInstanceById(sourceProcessDefinition.getId()); testHelper.completeTask("userTask1"); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask2", "userTask2") .build(); // when try { testHelper.migrateProcessInstance(migrationPlan, processInstance); Assert.fail("should fail"); } catch (MigratingProcessInstanceValidationException e) { // then assertThat(e.getValidationReport()) .hasProcessInstanceId(testHelper.snapshotBeforeMigration.getProcessInstanceId()) .hasActivityInstanceFailures( sourceProcessDefinition.getId(), "Cannot migrate subscription for compensation handler 'compensationHandler'. " + "There is no migration instruction for the compensation boundary event"); } }
@Test public void testCannotMigrateWithoutMappingCompensationBoundaryEvents() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.ONE_COMPENSATION_TASK_MODEL); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.ONE_COMPENSATION_TASK_MODEL); ProcessInstance processInstance = rule.getRuntimeService().startProcessInstanceById(sourceProcessDefinition.getId()); testHelper.completeTask("userTask1"); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask2", "userTask2") .build(); // when try { testHelper.migrateProcessInstance(migrationPlan, processInstance); Assert.fail("should fail"); } catch (MigratingProcessInstanceValidationException e) { // then assertThat(e.getValidationReport()) .hasProcessInstanceId(testHelper.snapshotBeforeMigration.getProcessInstanceId()) .hasActivityInstanceFailures( sourceProcessDefinition.getId(), "Cannot migrate subscription for compensation handler 'compensationHandler'. " + "There is no migration instruction for the compensation boundary event"); } }
@Test public void testCannotMigrateActiveCompensationWithoutInstructionForThrowingEventCase1() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.ONE_COMPENSATION_TASK_MODEL); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.ONE_COMPENSATION_TASK_MODEL); ProcessInstance processInstance = rule.getRuntimeService().startProcessInstanceById(sourceProcessDefinition.getId()); testHelper.completeTask("userTask1"); testHelper.completeTask("userTask2"); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("compensationHandler", "compensationHandler") .build(); // when try { testHelper.migrateProcessInstance(migrationPlan, processInstance); Assert.fail("should fail"); } catch (MigratingProcessInstanceValidationException e) { // then assertThat(e.getValidationReport()) .hasProcessInstanceId(testHelper.snapshotBeforeMigration.getProcessInstanceId()) .hasActivityInstanceFailures("compensationEvent", "There is no migration instruction for this instance's activity", "The type of the source activity is not supported for activity instance migration" ); } }
@Test public void testCannotMigrateActiveCompensationWithoutInstructionForThrowingEventCase2() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.COMPENSATION_END_EVENT_MODEL); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.COMPENSATION_END_EVENT_MODEL); ProcessInstance processInstance = rule.getRuntimeService().startProcessInstanceById(sourceProcessDefinition.getId()); testHelper.completeTask("userTask1"); testHelper.completeTask("userTask2"); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("compensationHandler", "compensationHandler") .build(); // when try { testHelper.migrateProcessInstance(migrationPlan, processInstance); Assert.fail("should fail"); } catch (MigratingProcessInstanceValidationException e) { // then assertThat(e.getValidationReport()) .hasProcessInstanceId(testHelper.snapshotBeforeMigration.getProcessInstanceId()) .hasActivityInstanceFailures("compensationEvent", "There is no migration instruction for this instance's activity", "The type of the source activity is not supported for activity instance migration" ); } }
assertThat(e.getValidationReport()) .hasActivityInstanceFailures("serviceTask", "The type of the source activity is not supported for activity instance migration"