@@ -2397,6 +2397,47 @@ void repetitionListenerAndChangedTask() {
23972397 cmmnRuntimeService .completeUserEventListenerInstance (userEventListenerInstance .getId ());
23982398 }
23992399
2400+ @ Test
2401+ void terminateUnavailableListener () {
2402+ // Arrange
2403+ CaseDefinition originalDefinition = deployCaseDefinition ("test1" , "org/flowable/cmmn/test/migration/unavailable-listener.cmmn.xml" );
2404+ CaseInstance caseInstance = cmmnRuntimeService .createCaseInstanceBuilder ().caseDefinitionKey ("testCase" ).start ();
2405+
2406+ List <PlanItemInstance > planItemInstances = cmmnRuntimeService .createPlanItemInstanceQuery ().caseInstanceId (caseInstance .getId ()).list ();
2407+ assertThat (planItemInstances ).hasSize (2 );
2408+ assertThat (planItemInstances )
2409+ .extracting (PlanItemInstance ::getCaseDefinitionId )
2410+ .containsOnly (originalDefinition .getId ());
2411+ assertThat (planItemInstances )
2412+ .extracting (PlanItemInstance ::getPlanItemDefinitionId )
2413+ .containsExactlyInAnyOrder ("humanTask1" , "userEventListener1" );
2414+
2415+ PlanItemInstance planItemInstance = cmmnRuntimeService .createPlanItemInstanceQuery ().caseInstanceId (caseInstance .getId ()).planItemDefinitionId ("userEventListener1" ).singleResult ();
2416+ assertThat (planItemInstance .getState ()).isEqualTo (PlanItemInstanceState .UNAVAILABLE );
2417+
2418+ CaseDefinition destinationDefinition = deployCaseDefinition ("test1" , "org/flowable/cmmn/test/migration/unavailable-listener.cmmn.xml" );
2419+
2420+ // Act
2421+ cmmnMigrationService .createCaseInstanceMigrationBuilder ()
2422+ .migrateToCaseDefinition (destinationDefinition .getId ())
2423+ .addTerminatePlanItemDefinitionMapping (PlanItemDefinitionMappingBuilder .createTerminatePlanItemDefinitionMappingFor ("userEventListener1" ))
2424+ .migrate (caseInstance .getId ());
2425+
2426+ // Assert
2427+ CaseInstance caseInstanceAfterMigration = cmmnRuntimeService .createCaseInstanceQuery ()
2428+ .caseInstanceId (caseInstance .getId ())
2429+ .singleResult ();
2430+ assertThat (caseInstanceAfterMigration .getCaseDefinitionId ()).isEqualTo (destinationDefinition .getId ());
2431+ planItemInstances = cmmnRuntimeService .createPlanItemInstanceQuery ().caseInstanceId (caseInstance .getId ()).list ();
2432+ assertThat (planItemInstances ).hasSize (1 );
2433+ assertThat (planItemInstances )
2434+ .extracting (PlanItemInstance ::getCaseDefinitionId )
2435+ .containsOnly (destinationDefinition .getId ());
2436+ assertThat (planItemInstances )
2437+ .extracting (PlanItemInstance ::getPlanItemDefinitionId )
2438+ .containsExactlyInAnyOrder ("humanTask1" );
2439+ }
2440+
24002441 @ Test
24012442 void activateNewStageWithSentry () {
24022443 // Arrange
0 commit comments