2020import static io .camunda .search .entities .FlowNodeInstanceEntity .FlowNodeType .START_EVENT ;
2121import static io .camunda .search .entities .FlowNodeInstanceEntity .FlowNodeType .USER_TASK ;
2222import static org .assertj .core .api .Assertions .assertThat ;
23+ import static org .camunda .bpm .engine .impl .incident .IncidentHandling .createIncident ;
24+ import static org .camunda .bpm .engine .impl .jobexecutor .ExecuteJobHelper .executeJob ;
2325
2426import io .camunda .db .rdbms .write .domain .FlowNodeInstanceDbModel ;
2527import io .camunda .db .rdbms .write .domain .IncidentDbModel ;
26- import io .camunda .migration .data .MigratorMode ;
2728import io .camunda .migration .data .qa .history .HistoryMigrationAbstractTest ;
28- import io .camunda .search .entities .FlowNodeInstanceEntity ;
2929import io .camunda .search .entities .IncidentEntity ;
3030import java .util .Collections ;
3131import io .camunda .search .entities .ProcessInstanceEntity ;
@@ -59,7 +59,9 @@ public void shouldMigrateIncidentTenant() {
5959 // then
6060 List <IncidentEntity > incidentsDefaultTenant = searchHistoricIncidents ("incidentProcessId" );
6161 List <IncidentEntity > incidentsTenant1 = searchHistoricIncidents ("incidentProcessId2" );
62- assertThat (incidentsDefaultTenant ).singleElement ().extracting (IncidentEntity ::tenantId ).isEqualTo (C8_DEFAULT_TENANT );
62+ assertThat (incidentsDefaultTenant ).singleElement ()
63+ .extracting (IncidentEntity ::tenantId )
64+ .isEqualTo (C8_DEFAULT_TENANT );
6365 assertThat (incidentsTenant1 ).singleElement ().extracting (IncidentEntity ::tenantId ).isEqualTo ("tenant1" );
6466 }
6567
@@ -117,13 +119,19 @@ public void shouldMigrateIncidentForNestedProcessInstance() {
117119 deployer .deployCamunda7Process ("callActivityProcess.bpmn" );
118120 deployer .deployCamunda7Process ("calledActivitySubprocess.bpmn" );
119121 ProcessInstance parentProcess = runtimeService .startProcessInstanceByKey ("callingProcessId" );
120- ProcessInstance childProcess = runtimeService .createProcessInstanceQuery ().processDefinitionKey ("calledProcessInstanceId" ).singleResult ();
122+ ProcessInstance childProcess = runtimeService .createProcessInstanceQuery ()
123+ .processDefinitionKey ("calledProcessInstanceId" )
124+ .singleResult ();
121125 createIncident ("userTaskId" ); // create incident in child's task
122126
123- HistoricIncident c7ChildIncident = historyService .createHistoricIncidentQuery ().processInstanceId (childProcess .getProcessInstanceId ()).singleResult ();
127+ HistoricIncident c7ChildIncident = historyService .createHistoricIncidentQuery ()
128+ .processInstanceId (childProcess .getProcessInstanceId ())
129+ .singleResult ();
124130 assertThat (c7ChildIncident ).isNotNull ();
125131
126- HistoricIncident c7ParentIncident = historyService .createHistoricIncidentQuery ().processInstanceId (parentProcess .getProcessInstanceId ()).singleResult ();
132+ HistoricIncident c7ParentIncident = historyService .createHistoricIncidentQuery ()
133+ .processInstanceId (parentProcess .getProcessInstanceId ())
134+ .singleResult ();
127135 assertThat (c7ParentIncident ).isNotNull ();
128136
129137 // when
@@ -134,7 +142,8 @@ public void shouldMigrateIncidentForNestedProcessInstance() {
134142 // child incident is migrated
135143 List <IncidentEntity > childIncidents = searchHistoricIncidents (childProcess .getProcessDefinitionKey ());
136144 assertThat (childIncidents ).hasSize (1 );
137- assertOnIncidentBasicFields (childIncidents .getFirst (), c7ChildIncident , childProcess , parentProcess , UNKNOWN , false );
145+ assertOnIncidentBasicFields (childIncidents .getFirst (), c7ChildIncident , childProcess , parentProcess , UNKNOWN ,
146+ false );
138147
139148 // parent incident is migrated
140149 List <IncidentEntity > parentIncidents = searchHistoricIncidents (parentProcess .getProcessDefinitionKey ());
@@ -289,7 +298,8 @@ public void shouldMigrateIncidentWithDecisionEvaluationErrorType() {
289298 // given
290299 deployer .deployCamunda7Process ("ruleTaskProcess.bpmn" );
291300 deployer .deployCamunda7Decision ("mappingFailureDmn.dmn" );
292- ProcessInstance c7ProcessInstance = runtimeService .startProcessInstanceByKey ("ruleTaskProcessId" , Collections .singletonMap ("input" , "single entry list" ));
301+ ProcessInstance c7ProcessInstance = runtimeService .startProcessInstanceByKey ("ruleTaskProcessId" ,
302+ Collections .singletonMap ("input" , "single entry list" ));
293303 triggerIncident (c7ProcessInstance .getId ());
294304
295305 HistoricIncident c7Incident = historyService .createHistoricIncidentQuery ()
@@ -376,7 +386,7 @@ public void shouldMigrateIncidentWithNoJobRetriesErrorType() {
376386 }
377387
378388 @ Test
379- public void shouldGenerateTreePathForIncidents () {
389+ public void shouldGenerateTreePathForIncidentsWithFlowNodeInstanceKey () {
380390 // given
381391 deployer .deployCamunda7Process ("userTaskProcessAsyncAfter.bpmn" );
382392 ProcessInstance c7ProcessInstance = runtimeService .startProcessInstanceByKey ("userTaskProcessId" );
@@ -408,19 +418,58 @@ public void shouldGenerateTreePathForIncidents() {
408418 .isEqualTo ("PI_" + processInstanceKey + "/FNI_" + flownodeInstanceKey );
409419 }
410420
411- protected void assertOnIncidentBasicFields (IncidentEntity c8Incident , HistoricIncident c7Incident , ProcessInstance c7ChildInstance , ProcessInstance c7ParentInstance ) {
421+ @ Test
422+ public void shouldGenerateTreePathForIncidentsWithoutFlowNodeInstanceKey () {
423+ // given
424+ deployer .deployCamunda7Process ("incidentProcess.bpmn" );
425+ ProcessInstance c7ProcessInstance = runtimeService .startProcessInstanceByKey ("incidentProcessId" );
426+ triggerIncident (c7ProcessInstance .getId ());
427+
428+ HistoricIncident c7Incident = historyService .createHistoricIncidentQuery ()
429+ .processInstanceId (c7ProcessInstance .getId ())
430+ .singleResult ();
431+ assertThat (c7Incident ).isNotNull ();
432+
433+ // when
434+ historyMigrator .migrate ();
435+
436+ // then
437+ List <ProcessInstanceEntity > processInstances = searchHistoricProcessInstances ("incidentProcessId" );
438+ assertThat (processInstances ).hasSize (1 );
439+ Long processInstanceKey = processInstances .getFirst ().processInstanceKey ();
440+
441+ List <IncidentDbModel > incidents = searchIncidentsByProcessInstanceKeyAndReturnAsDbModel (processInstanceKey );
442+ assertThat (incidents ).singleElement ()
443+ .extracting (IncidentDbModel ::treePath )
444+ .isNotNull ()
445+ .isEqualTo ("PI_" + processInstanceKey );
446+ }
447+
448+ protected void assertOnIncidentBasicFields (IncidentEntity c8Incident ,
449+ HistoricIncident c7Incident ,
450+ ProcessInstance c7ChildInstance ,
451+ ProcessInstance c7ParentInstance ) {
412452 assertOnIncidentBasicFields (c8Incident , c7Incident , c7ChildInstance , c7ParentInstance , UNKNOWN , false );
413453 }
414454
415- protected void assertOnIncidentBasicFields (IncidentEntity c8Incident , HistoricIncident c7Incident , ProcessInstance c7ChildInstance , ProcessInstance c7ParentInstance , IncidentEntity .ErrorType errorType , boolean waitingExecution ) {
455+ protected void assertOnIncidentBasicFields (IncidentEntity c8Incident ,
456+ HistoricIncident c7Incident ,
457+ ProcessInstance c7ChildInstance ,
458+ ProcessInstance c7ParentInstance ,
459+ IncidentEntity .ErrorType errorType ,
460+ boolean waitingExecution ) {
416461 // specific values
417462 assertThat (c8Incident .tenantId ()).isEqualTo (C8_DEFAULT_TENANT );
418- assertThat (c8Incident .processDefinitionId ()).isEqualTo (prefixDefinitionId (c7ChildInstance .getProcessDefinitionKey ()));
463+ assertThat (c8Incident .processDefinitionId ()).isEqualTo (
464+ prefixDefinitionId (c7ChildInstance .getProcessDefinitionKey ()));
419465 assertThat (c8Incident .flowNodeId ()).isEqualTo (c7Incident .getActivityId ());
420466 assertThat (c8Incident .state ()).isEqualTo (IncidentEntity .IncidentState .RESOLVED );
421467 assertThat (c8Incident .errorMessage ()).isEqualTo (c7Incident .getIncidentMessage ());
422- assertThat (c8Incident .processInstanceKey ()).isEqualTo (findMigratedProcessInstanceKey (c7ChildInstance .getProcessDefinitionKey ()));
423- String expectedRootProcessKey = c7ParentInstance != null ? c7ParentInstance .getProcessDefinitionKey () : c7ChildInstance .getProcessDefinitionKey ();
468+ assertThat (c8Incident .processInstanceKey ()).isEqualTo (
469+ findMigratedProcessInstanceKey (c7ChildInstance .getProcessDefinitionKey ()));
470+ String expectedRootProcessKey = c7ParentInstance != null ?
471+ c7ParentInstance .getProcessDefinitionKey () :
472+ c7ChildInstance .getProcessDefinitionKey ();
424473 assertThat (c8Incident .rootProcessInstanceKey ()).isEqualTo (findMigratedProcessInstanceKey (expectedRootProcessKey ));
425474 assertThat (c8Incident .errorType ()).isEqualTo (errorType );
426475
@@ -440,10 +489,7 @@ protected void assertOnIncidentBasicFields(IncidentEntity c8Incident, HistoricIn
440489 }
441490
442491 protected void executeJob (ProcessInstance c7ProcessInstance ) {
443- Job job = managementService
444- .createJobQuery ()
445- .processInstanceId (c7ProcessInstance .getId ())
446- .singleResult ();
492+ Job job = managementService .createJobQuery ().processInstanceId (c7ProcessInstance .getId ()).singleResult ();
447493
448494 if (job != null ) {
449495 managementService .executeJob (job .getId ());
0 commit comments