Skip to content

Commit 515ad25

Browse files
authored
603: Fix - sort jobs in workflow (#604)
1 parent cd94815 commit 515ad25

File tree

3 files changed

+56
-4
lines changed

3 files changed

+56
-4
lines changed

src/main/scala/za/co/absa/hyperdrive/trigger/persistance/WorkflowRepository.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ class WorkflowRepositoryImpl @Inject()(
151151
sensor = s,
152152
dagDefinitionJoined = DagDefinitionJoined(
153153
workflowId = dd.workflowId,
154-
jobDefinitions = wsddjd.map(_._4),
154+
jobDefinitions = wsddjd.map(_._4).sortBy(_.order),
155155
id = dd.id
156156
),
157157
id = w.id

ui/src/app/stores/workflows/workflows.effects.spec.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,4 +1168,51 @@ describe('WorkflowsEffects', () => {
11681168
expect(toastrServiceSpy).toHaveBeenCalledWith(texts.LOAD_WORKFLOW_FROM_HISTORY_FAILURE_NOTIFICATION);
11691169
});
11701170
});
1171+
1172+
describe('sortJobsInWorkflow', () => {
1173+
it('should return input workflow if workflow contains 0 jobs', () => {
1174+
const workflow = WorkflowJoinedModelFactory.createEmpty();
1175+
const inputWorkflow = { ...workflow, dagDefinitionJoined: { ...workflow.dagDefinitionJoined, jobDefinitions: [] } };
1176+
1177+
const result = underTest.sortJobsInWorkflow(inputWorkflow);
1178+
1179+
expect(result).toEqual(inputWorkflow);
1180+
});
1181+
1182+
it('should return input workflow with sorted jobs', () => {
1183+
const workflow = WorkflowJoinedModelFactory.createEmpty();
1184+
const firstJob = JobDefinitionModelFactory.createDefault(0);
1185+
const secondJob = JobDefinitionModelFactory.createDefault(1);
1186+
const thirdJob = JobDefinitionModelFactory.createDefault(2);
1187+
1188+
const inputWorkflow = {
1189+
...workflow,
1190+
dagDefinitionJoined: { ...workflow.dagDefinitionJoined, jobDefinitions: [thirdJob, secondJob, firstJob] },
1191+
};
1192+
const expectedWorkflow = {
1193+
...workflow,
1194+
dagDefinitionJoined: { ...workflow.dagDefinitionJoined, jobDefinitions: [firstJob, secondJob, thirdJob] },
1195+
};
1196+
1197+
const result = underTest.sortJobsInWorkflow(inputWorkflow);
1198+
1199+
expect(result).toEqual(expectedWorkflow);
1200+
});
1201+
1202+
it('should return input workflow if jobs are already sorted', () => {
1203+
const workflow = WorkflowJoinedModelFactory.createEmpty();
1204+
const firstJob = JobDefinitionModelFactory.createDefault(0);
1205+
const secondJob = JobDefinitionModelFactory.createDefault(1);
1206+
const thirdJob = JobDefinitionModelFactory.createDefault(2);
1207+
1208+
const inputWorkflow = {
1209+
...workflow,
1210+
dagDefinitionJoined: { ...workflow.dagDefinitionJoined, jobDefinitions: [firstJob, secondJob, thirdJob] },
1211+
};
1212+
1213+
const result = underTest.sortJobsInWorkflow(inputWorkflow);
1214+
1215+
expect(result).toEqual(inputWorkflow);
1216+
});
1217+
});
11711218
});

ui/src/app/stores/workflows/workflows.effects.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ export class WorkflowsEffects {
139139
return [
140140
{
141141
type: WorkflowActions.LOAD_WORKFLOW_SUCCESS,
142-
payload: workflow,
142+
payload: this.sortJobsInWorkflow(workflow),
143143
},
144144
];
145145
}),
@@ -563,7 +563,7 @@ export class WorkflowsEffects {
563563
return [
564564
{
565565
type: WorkflowActions.LOAD_WORKFLOW_SUCCESS,
566-
payload: workflow,
566+
payload: this.sortJobsInWorkflow(workflow),
567567
},
568568
];
569569
}),
@@ -649,7 +649,7 @@ export class WorkflowsEffects {
649649
return [
650650
{
651651
type: WorkflowActions.REVERT_WORKFLOW_SUCCESS,
652-
payload: workflow,
652+
payload: this.sortJobsInWorkflow(workflow),
653653
},
654654
];
655655
}),
@@ -664,4 +664,9 @@ export class WorkflowsEffects {
664664
);
665665
}),
666666
);
667+
668+
sortJobsInWorkflow(workflow: WorkflowJoinedModel): WorkflowJoinedModel {
669+
const sortedJobs = workflow.dagDefinitionJoined.jobDefinitions.sort((jobLeft, jobRight) => jobLeft.order - jobRight.order);
670+
return { ...workflow, dagDefinitionJoined: { ...workflow.dagDefinitionJoined, jobDefinitions: sortedJobs } };
671+
}
667672
}

0 commit comments

Comments
 (0)