@@ -439,6 +439,130 @@ void withSimpleOneTaskCaseChangingOnlyTaskProperties() {
439
439
}
440
440
}
441
441
}
442
+
443
+ @ Test
444
+ void withAutomatedMigrationFromTwoTasksToOneTask () {
445
+ // Arrange
446
+ deployCaseDefinition ("test1" , "org/flowable/cmmn/test/migration/two-task.cmmn.xml" );
447
+ CaseInstance caseInstance = cmmnRuntimeService .createCaseInstanceBuilder ().caseDefinitionKey ("testCase" ).start ();
448
+ CaseDefinition destinationDefinition = deployCaseDefinition ("test1" , "org/flowable/cmmn/test/migration/one-task.cmmn.xml" );
449
+
450
+ // Act
451
+ cmmnMigrationService .createCaseInstanceMigrationBuilder ()
452
+ .migrateToCaseDefinition (destinationDefinition .getId ())
453
+ .migrate (caseInstance .getId ());
454
+
455
+ // Assert
456
+ CaseInstance caseInstanceAfterMigration = cmmnRuntimeService .createCaseInstanceQuery ()
457
+ .caseInstanceId (caseInstance .getId ())
458
+ .singleResult ();
459
+ assertThat (caseInstanceAfterMigration .getCaseDefinitionId ()).isEqualTo (destinationDefinition .getId ());
460
+ assertThat (caseInstanceAfterMigration .getCaseDefinitionVersion ()).isEqualTo (2 );
461
+ assertThat (caseInstanceAfterMigration .getCaseDefinitionDeploymentId ()).isEqualTo (destinationDefinition .getDeploymentId ());
462
+ List <PlanItemInstance > planItemInstances = cmmnRuntimeService .createPlanItemInstanceQuery ()
463
+ .caseInstanceId (caseInstance .getId ())
464
+ .list ();
465
+ assertThat (planItemInstances ).hasSize (1 );
466
+ assertThat (planItemInstances )
467
+ .extracting (PlanItemInstance ::getCaseDefinitionId )
468
+ .containsOnly (destinationDefinition .getId ());
469
+ assertThat (planItemInstances )
470
+ .extracting (PlanItemInstance ::getName )
471
+ .containsExactlyInAnyOrder ("Task 1" );
472
+ assertThat (planItemInstances )
473
+ .extracting (PlanItemInstance ::getState )
474
+ .containsOnly (PlanItemInstanceState .ACTIVE );
475
+
476
+ List <Task > tasks = cmmnTaskService .createTaskQuery ().caseInstanceId (caseInstance .getId ()).list ();
477
+ assertThat (tasks ).hasSize (1 );
478
+ assertThat (tasks .get (0 ).getScopeDefinitionId ()).isEqualTo (destinationDefinition .getId ());
479
+ cmmnTaskService .complete (tasks .get (0 ).getId ());
480
+
481
+ assertThat (cmmnRuntimeService .createCaseInstanceQuery ().caseInstanceId (caseInstance .getId ()).count ()).isZero ();
482
+
483
+ if (CmmnHistoryTestHelper .isHistoryLevelAtLeast (HistoryLevel .ACTIVITY , cmmnEngineConfiguration )) {
484
+ assertThat (cmmnHistoryService .createHistoricCaseInstanceQuery ().caseInstanceId (caseInstance .getId ()).count ()).isEqualTo (1 );
485
+ assertThat (cmmnHistoryService .createHistoricCaseInstanceQuery ().caseInstanceId (caseInstance .getId ()).singleResult ().getCaseDefinitionId ())
486
+ .isEqualTo (destinationDefinition .getId ());
487
+
488
+ List <HistoricPlanItemInstance > historicPlanItemInstances = cmmnHistoryService .createHistoricPlanItemInstanceQuery ()
489
+ .planItemInstanceCaseInstanceId (caseInstance .getId ()).list ();
490
+ assertThat (historicPlanItemInstances ).hasSize (2 );
491
+ for (HistoricPlanItemInstance historicPlanItemInstance : historicPlanItemInstances ) {
492
+ assertThat (historicPlanItemInstance .getCaseDefinitionId ()).isEqualTo (destinationDefinition .getId ());
493
+ }
494
+
495
+ List <HistoricTaskInstance > historicTasks = cmmnHistoryService .createHistoricTaskInstanceQuery ().caseInstanceId (caseInstance .getId ()).list ();
496
+ assertThat (historicTasks ).hasSize (2 );
497
+ for (HistoricTaskInstance historicTask : historicTasks ) {
498
+ assertThat (historicTask .getScopeDefinitionId ()).isEqualTo (destinationDefinition .getId ());
499
+ }
500
+ }
501
+ }
502
+
503
+ @ Test
504
+ void withActivateTaskFromTwoTasksToOneTask () {
505
+ // Arrange
506
+ deployCaseDefinition ("test1" , "org/flowable/cmmn/test/migration/two-task.cmmn.xml" );
507
+ CaseInstance caseInstance = cmmnRuntimeService .createCaseInstanceBuilder ().caseDefinitionKey ("testCase" ).start ();
508
+ CaseDefinition destinationDefinition = deployCaseDefinition ("test1" , "org/flowable/cmmn/test/migration/one-task.cmmn.xml" );
509
+
510
+ Task task = cmmnTaskService .createTaskQuery ().caseInstanceId (caseInstance .getId ()).taskDefinitionKey ("humanTask1" ).singleResult ();
511
+ cmmnTaskService .complete (task .getId ());
512
+
513
+ // Act
514
+ cmmnMigrationService .createCaseInstanceMigrationBuilder ()
515
+ .migrateToCaseDefinition (destinationDefinition .getId ())
516
+ .addActivatePlanItemDefinitionMapping (PlanItemDefinitionMappingBuilder .createActivatePlanItemDefinitionMappingFor ("humanTask1" ))
517
+ .migrate (caseInstance .getId ());
518
+
519
+ // Assert
520
+ CaseInstance caseInstanceAfterMigration = cmmnRuntimeService .createCaseInstanceQuery ()
521
+ .caseInstanceId (caseInstance .getId ())
522
+ .singleResult ();
523
+ assertThat (caseInstanceAfterMigration .getCaseDefinitionId ()).isEqualTo (destinationDefinition .getId ());
524
+ assertThat (caseInstanceAfterMigration .getCaseDefinitionVersion ()).isEqualTo (2 );
525
+ assertThat (caseInstanceAfterMigration .getCaseDefinitionDeploymentId ()).isEqualTo (destinationDefinition .getDeploymentId ());
526
+ List <PlanItemInstance > planItemInstances = cmmnRuntimeService .createPlanItemInstanceQuery ()
527
+ .caseInstanceId (caseInstance .getId ())
528
+ .list ();
529
+ assertThat (planItemInstances ).hasSize (1 );
530
+ assertThat (planItemInstances )
531
+ .extracting (PlanItemInstance ::getCaseDefinitionId )
532
+ .containsOnly (destinationDefinition .getId ());
533
+ assertThat (planItemInstances )
534
+ .extracting (PlanItemInstance ::getName )
535
+ .containsExactlyInAnyOrder ("Task 1" );
536
+ assertThat (planItemInstances )
537
+ .extracting (PlanItemInstance ::getState )
538
+ .containsOnly (PlanItemInstanceState .ACTIVE );
539
+
540
+ List <Task > tasks = cmmnTaskService .createTaskQuery ().caseInstanceId (caseInstance .getId ()).list ();
541
+ assertThat (tasks ).hasSize (1 );
542
+ assertThat (tasks .get (0 ).getScopeDefinitionId ()).isEqualTo (destinationDefinition .getId ());
543
+ cmmnTaskService .complete (tasks .get (0 ).getId ());
544
+
545
+ assertThat (cmmnRuntimeService .createCaseInstanceQuery ().caseInstanceId (caseInstance .getId ()).count ()).isZero ();
546
+
547
+ if (CmmnHistoryTestHelper .isHistoryLevelAtLeast (HistoryLevel .ACTIVITY , cmmnEngineConfiguration )) {
548
+ assertThat (cmmnHistoryService .createHistoricCaseInstanceQuery ().caseInstanceId (caseInstance .getId ()).count ()).isEqualTo (1 );
549
+ assertThat (cmmnHistoryService .createHistoricCaseInstanceQuery ().caseInstanceId (caseInstance .getId ()).singleResult ().getCaseDefinitionId ())
550
+ .isEqualTo (destinationDefinition .getId ());
551
+
552
+ List <HistoricPlanItemInstance > historicPlanItemInstances = cmmnHistoryService .createHistoricPlanItemInstanceQuery ()
553
+ .planItemInstanceCaseInstanceId (caseInstance .getId ()).list ();
554
+ assertThat (historicPlanItemInstances ).hasSize (3 );
555
+ for (HistoricPlanItemInstance historicPlanItemInstance : historicPlanItemInstances ) {
556
+ assertThat (historicPlanItemInstance .getCaseDefinitionId ()).isEqualTo (destinationDefinition .getId ());
557
+ }
558
+
559
+ List <HistoricTaskInstance > historicTasks = cmmnHistoryService .createHistoricTaskInstanceQuery ().caseInstanceId (caseInstance .getId ()).list ();
560
+ assertThat (historicTasks ).hasSize (3 );
561
+ for (HistoricTaskInstance historicTask : historicTasks ) {
562
+ assertThat (historicTask .getScopeDefinitionId ()).isEqualTo (destinationDefinition .getId ());
563
+ }
564
+ }
565
+ }
442
566
443
567
@ Test
444
568
void withTwoTasksIntroducingANewStageAroundSecondTask () {
0 commit comments