예제 #1
0
        public virtual void testRemoveParallelMultiInstanceBodyScope()
        {
            // given
            var sourceProcessDefinition =
                testHelper.DeployAndGetDefinition(MultiInstanceProcessModels.PAR_MI_SUBPROCESS_PROCESS);
            var targetProcessDefinition = testHelper.DeployAndGetDefinition(ProcessModels.SubprocessProcess);

            var migrationPlan =
                rule.RuntimeService.CreateMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id)
                .MapActivities("subProcess", "subProcess")
                .MapActivities("userTask", "userTask")
                .Build();

            // when
            testHelper.CreateProcessInstanceAndMigrate(migrationPlan);

            // then
            var subProcessInstances = testHelper.SnapshotBeforeMigration.ActivityTree.GetActivityInstances("subProcess");

            testHelper.AssertExecutionTreeAfterMigration()
            .HasProcessDefinitionId(targetProcessDefinition.Id)
            .Matches(ExecutionAssert.DescribeExecutionTree(null)
                     .Scope()
                     .Id(testHelper.SnapshotBeforeMigration.ProcessInstanceId)
                     .Child(null)
                     .Concurrent()
                     .NoScope()
                     .Child("userTask")
                     .Scope()
                     .Id(testHelper.GetSingleExecutionIdForActivity(subProcessInstances[0], "subProcess"))
                     .Up()
                     .Up()
                     .Child(null)
                     .Concurrent()
                     .NoScope()
                     .Child("userTask")
                     .Scope()
                     .Id(testHelper.GetSingleExecutionIdForActivity(subProcessInstances[1], "subProcess"))
                     .Up()
                     .Up()
                     .Child(null)
                     .Concurrent()
                     .NoScope()
                     .Child("userTask")
                     .Scope()
                     .Id(testHelper.GetSingleExecutionIdForActivity(subProcessInstances[2], "subProcess"))
                     .Done());

            testHelper.AssertActivityTreeAfterMigration()
            .HasStructure(ActivityInstanceAssert.DescribeActivityInstanceTree(targetProcessDefinition.Id)
                          .BeginScope("subProcess", subProcessInstances[0].Id)
                          .Activity("userTask", subProcessInstances[0].GetActivityInstances("userTask")[0].Id)
                          .EndScope()
                          .BeginScope("subProcess", subProcessInstances[1].Id)
                          .Activity("userTask", subProcessInstances[1].GetActivityInstances("userTask")[0].Id)
                          .EndScope()
                          .BeginScope("subProcess", subProcessInstances[2].Id)
                          .Activity("userTask", subProcessInstances[2].GetActivityInstances("userTask")[0].Id)
                          .EndScope()
                          .Done());

            var migratedTasks = testHelper.SnapshotAfterMigration.Tasks;

            Assert.AreEqual(3, migratedTasks.Count);

            // and it is possible to successfully complete the migrated instance
            foreach (var migratedTask in migratedTasks)
            {
                rule.TaskService.Complete(migratedTask.Id);
            }
            testHelper.AssertProcessEnded(testHelper.SnapshotBeforeMigration.ProcessInstanceId);
        }