Skip to content

Commit 88b49df

Browse files
authored
fix(orchestrator): fixes v2/instances endpoint (#1414)
* fix(orchestrator): fixes v2/instances endpoint The `start` and `end` fields are annotated as `strings` instead of `Date`. The format of the string is provided as a hint for the developer as a comment (date-time) due to limitations in the OpenAPI code generator. * chore(orchestrator): removes format: date-time
1 parent 19197f3 commit 88b49df

File tree

7 files changed

+32
-30
lines changed

7 files changed

+32
-30
lines changed

plugins/orchestrator-backend/src/service/api/mapping/V2Mappings.test.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -133,30 +133,30 @@ describe('scenarios to verify mapWorkflowCategoryDTOFromString', () => {
133133
describe('scenarios to verify mapToProcessInstanceDTO', () => {
134134
it('correctly maps ProcessInstanceDTO for not completed workflow', () => {
135135
// Arrange
136-
const processIntanceV1: ProcessInstance = generateProcessInstance(1);
137-
processIntanceV1.end = undefined;
136+
const processInstanceV1: ProcessInstance = generateProcessInstance(1);
137+
processInstanceV1.end = undefined;
138138

139139
// Act
140-
const result = mapToProcessInstanceDTO(processIntanceV1);
140+
const result = mapToProcessInstanceDTO(processInstanceV1);
141141

142142
// Assert
143143
expect(result).toBeDefined();
144144
expect(result.id).toBeDefined();
145145
expect(result.start).toBeDefined();
146-
expect(result.start).toEqual(processIntanceV1.start?.toUTCString());
146+
expect(result.start).toEqual(processInstanceV1.start);
147147
expect(result.end).toBeUndefined();
148148
expect(result.duration).toBeUndefined();
149149
expect(result.status).toEqual(
150-
getProcessInstancesDTOFromString(processIntanceV1.state),
150+
getProcessInstancesDTOFromString(processInstanceV1.state),
151151
);
152-
expect(result.description).toEqual(processIntanceV1.description);
152+
expect(result.description).toEqual(processInstanceV1.description);
153153
expect(result.category).toEqual('infrastructure');
154154
expect(result.workflowdata).toEqual(
155155
// @ts-ignore
156-
processIntanceV1?.variables?.workflowdata,
156+
processInstanceV1?.variables?.workflowdata,
157157
);
158158
expect(result.workflow).toEqual(
159-
processIntanceV1.processName ?? processIntanceV1.processId,
159+
processInstanceV1.processName ?? processInstanceV1.processId,
160160
);
161161
});
162162
it('correctly maps ProcessInstanceDTO', () => {
@@ -171,16 +171,16 @@ describe('scenarios to verify mapToProcessInstanceDTO', () => {
171171

172172
// Assert
173173
expect(result.id).toBeDefined();
174-
expect(result.start).toEqual(processIntanceV1.start?.toUTCString());
174+
expect(result.start).toEqual(processIntanceV1.start);
175175
expect(result.end).toBeDefined();
176-
expect(result.end).toEqual(processIntanceV1.end!.toUTCString());
176+
expect(result.end).toEqual(processIntanceV1.end);
177177
expect(result.duration).toEqual(duration);
178178

179179
expect(result).toBeDefined();
180180
expect(result.status).toEqual(
181181
getProcessInstancesDTOFromString(processIntanceV1.state),
182182
);
183-
expect(result.end).toEqual(processIntanceV1.end?.toUTCString());
183+
expect(result.end).toEqual(processIntanceV1.end);
184184
expect(result.duration).toEqual(duration);
185185
expect(result.duration).toEqual('an hour');
186186
expect(result.description).toEqual(processIntanceV1.description);

plugins/orchestrator-backend/src/service/api/mapping/V2Mappings.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,10 @@ export function mapToProcessInstanceDTO(
115115
description: processInstance.description,
116116
id: processInstance.id,
117117
name: processInstance.processName,
118-
// To be fixed https://issues.redhat.com/browse/FLPATH-950
119118
// @ts-ignore
120119
workflowdata: variables?.workflowdata,
121-
start: processInstance.start?.toUTCString(),
122-
end: processInstance.end?.toUTCString(),
120+
start: processInstance.start,
121+
end: processInstance.end,
123122
duration: duration,
124123
status: getProcessInstancesDTOFromString(processInstance.state),
125124
workflow: processInstance.processName ?? processInstance.processId,

plugins/orchestrator-backend/src/service/api/test-utils.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import moment from 'moment';
2+
13
import {
24
ProcessInstance,
35
ProcessInstanceState,
@@ -11,8 +13,8 @@ import {
1113
WorkflowOverviewListResult,
1214
} from '@janus-idp/backstage-plugin-orchestrator-common';
1315

14-
const baseDate = new Date('2023-02-19T11:45:21.123Z');
15-
const HOUR = 60 * 60 * 1000;
16+
const BASE_DATE = '2023-02-19T11:45:21.123Z';
17+
1618
interface WorkflowOverviewParams {
1719
suffix?: string;
1820
workflowId?: string;
@@ -108,8 +110,8 @@ export function generateProcessInstance(id: number): ProcessInstance {
108110
processName: `name${id}`,
109111
processId: `proceesId${id}`,
110112
state: ProcessInstanceState.Active,
111-
start: baseDate,
112-
end: new Date(baseDate.getTime() + 1 * HOUR),
113+
start: BASE_DATE,
114+
end: moment(BASE_DATE).add(1, 'hour').toISOString(),
113115
nodes: [],
114116
endpoint: 'enpoint/foo',
115117
serviceUrl: 'service/bar',

plugins/orchestrator-backend/src/service/api/v2.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ export class V2 {
8383
await this.orchestratorService.fetchInstancesTotalCount();
8484

8585
const result: ProcessInstanceListResultDTO = {
86-
items: instances?.map(def => mapToProcessInstanceDTO(def)),
86+
items: instances?.map(mapToProcessInstanceDTO),
8787
paginationInfo: {
8888
pageSize: pagination.limit,
8989
page: pagination.offset,

plugins/orchestrator-common/src/models.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,10 @@ export interface ProcessInstance {
6767
nodes: NodeInstance[];
6868
milestones?: Milestone[];
6969
variables?: ProcessInstanceVariables | string;
70-
start?: Date;
71-
end?: Date;
70+
/** Format: date-time */
71+
start?: string;
72+
/** Format: date-time */
73+
end?: string;
7274
parentProcessInstance?: ProcessInstance;
7375
childProcessInstances?: ProcessInstance[];
7476
error?: ProcessInstanceError;

plugins/orchestrator/src/__fixtures__/fakeLongProcessInstanceList.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export const generateFakeProcessInstances = (
5050
.workflowId,
5151
state: randomState,
5252
endpoint: 'enpoint/foo',
53-
start: valuesGenerator.getNextDate(),
53+
start: valuesGenerator.getNextDate().toISOString(),
5454
nodes: [],
5555
variables: {},
5656
isOpen: false,

plugins/orchestrator/src/__fixtures__/fakeProcessInstance.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import moment from 'moment';
2+
13
import {
24
ProcessInstance,
35
ProcessInstanceState,
@@ -7,17 +9,14 @@ import {
79
import { fakeWorkflowOverviewList } from './fakeWorkflowOverviewList';
810

911
let id = 10;
10-
const baseDate = new Date('2023-11-16T10:50:34.346Z');
11-
const HOUR = 60 * 60 * 1000;
12-
const DAY = 24 * HOUR;
13-
12+
const baseDate = '2023-11-16T10:50:34.346Z';
1413
export const fakeProcessInstance1: ProcessInstance = {
1514
id: `12f767c1-9002-43af-9515-62a72d0eaf${id++}`,
1615
processName: fakeWorkflowOverviewList[0].name,
1716
processId: fakeWorkflowOverviewList[0].workflowId,
1817
state: ProcessInstanceState.Error,
1918
start: baseDate,
20-
end: new Date(baseDate.getTime() + 13 * HOUR),
19+
end: moment(baseDate).add(13, 'hours').toISOString(),
2120
nodes: [],
2221
endpoint: 'enpoint/foo',
2322
serviceUrl: 'service/bar',
@@ -52,8 +51,8 @@ export const fakeCompletedInstance: ProcessInstance = {
5251
processName: fakeWorkflowOverviewList[1].name,
5352
processId: fakeWorkflowOverviewList[1].workflowId,
5453
state: ProcessInstanceState.Completed,
55-
start: new Date(baseDate.getTime() + HOUR),
56-
end: new Date(baseDate.getTime() + DAY),
54+
start: moment(baseDate).add(1, 'hour').toISOString(),
55+
end: moment(baseDate).add(1, 'day').toISOString(),
5756
nodes: [],
5857
variables: {},
5958
endpoint: 'enpoint/foo',
@@ -68,7 +67,7 @@ export const fakeActiveInstance: ProcessInstance = {
6867
processName: fakeWorkflowOverviewList[2].name,
6968
processId: fakeWorkflowOverviewList[2].workflowId,
7069
state: ProcessInstanceState.Active,
71-
start: new Date(baseDate.getTime() + 2 * HOUR),
70+
start: moment(baseDate).add(2, 'hours').toISOString(),
7271
nodes: [],
7372
variables: {},
7473
endpoint: 'enpoint/foo',

0 commit comments

Comments
 (0)