Skip to content

Commit 37a0591

Browse files
authored
Merge pull request #501 from bcgov/bugfix/get-peach-summary
fix: align peach summary request payload structure
2 parents 3191b1b + 8407597 commit 37a0591

7 files changed

Lines changed: 69 additions & 53 deletions

File tree

app/src/controllers/peach.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,11 @@ export const findPriorityPermitTracking = (
6767
* @param req Express Request object
6868
* @param res Express Response object
6969
*/
70-
export const getPeachSummaryController = async (req: Request<never, never, PermitTracking[], never>, res: Response) => {
71-
const permitTracking = findPriorityPermitTracking(req.body);
70+
export const getPeachSummaryController = async (
71+
req: Request<never, never, { permitTrackings: PermitTracking[] }, never>,
72+
res: Response
73+
) => {
74+
const permitTracking = findPriorityPermitTracking(req.body.permitTrackings);
7275

7376
if (!permitTracking?.trackingId || !permitTracking?.sourceSystemKind?.sourceSystem) {
7477
throw new Problem(422, { detail: 'No PEACH-integrated tracking ID and/or system were found in the request body.' });

app/src/routes/v1/peach.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ router.use(requireSomeGroup);
1717
router.post(
1818
'/record',
1919
hasAuthorization(Resource.PEACH, Action.READ),
20-
peachValidator.permitTrackings,
20+
peachValidator.getPeachSummary,
2121
getPeachSummaryController
2222
);
2323

app/src/validators/peach.ts

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,33 @@ import { validate } from '../middleware/validation.ts';
44
import { createStamps } from './stamps.ts';
55

66
const schema = {
7-
permitTrackings: {
8-
body: Joi.array().items(
9-
Joi.object({
10-
trackingId: Joi.string().allow(null),
11-
permitTrackingId: Joi.number().allow(null),
12-
permitId: Joi.string().allow(null),
13-
shownToProponent: Joi.boolean().allow(null),
14-
sourceSystemKindId: Joi.number().allow(null),
15-
sourceSystemKind: Joi.object({
16-
sourceSystemKindId: Joi.number().required(),
17-
description: Joi.string().required(),
18-
integrated: Joi.boolean(),
19-
kind: Joi.string().allow(null),
20-
sourceSystem: Joi.string().required(),
21-
...createStamps
22-
}).required(),
23-
...createStamps
24-
})
25-
)
7+
getPeachSummary: {
8+
body: Joi.object({
9+
permitTrackings: Joi.array()
10+
.min(1)
11+
.required()
12+
.items(
13+
Joi.object({
14+
trackingId: Joi.string().allow(null),
15+
permitTrackingId: Joi.number().allow(null),
16+
permitId: Joi.string().allow(null),
17+
shownToProponent: Joi.boolean().allow(null),
18+
sourceSystemKindId: Joi.number().allow(null),
19+
sourceSystemKind: Joi.object({
20+
sourceSystemKindId: Joi.number().required(),
21+
description: Joi.string().required(),
22+
integrated: Joi.boolean(),
23+
kind: Joi.string().allow(null),
24+
sourceSystem: Joi.string().required(),
25+
...createStamps
26+
}).required(),
27+
...createStamps
28+
})
29+
)
30+
})
2631
}
2732
};
2833

2934
export default {
30-
permitTrackings: validate(schema.permitTrackings)
35+
getPeachSummary: validate(schema.getPeachSummary)
3136
};

app/tests/unit/controllers/peach.test.ts

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,16 @@ describe('getPeachSummaryController', () => {
5757

5858
it('should call service, summarize, and respond with 200 and summary', async () => {
5959
const req = {
60-
body: TEST_PERMIT_1.permitTracking
60+
body: {
61+
permitTrackings: TEST_PERMIT_1.permitTracking
62+
}
6163
};
6264

6365
getPeachRecordSpy.mockResolvedValue(TEST_PEACH_RECORD_1);
6466
summarizeSpy.mockReturnValue(TEST_PEACH_SUMMARY);
6567

6668
await getPeachSummaryController(
67-
req as unknown as Request<never, never, PermitTracking[], never>,
69+
req as unknown as Request<never, never, { permitTrackings: PermitTracking[] }, never>,
6870
res as unknown as Response
6971
);
7072

@@ -88,30 +90,32 @@ describe('getPeachSummaryController', () => {
8890

8991
await expect(
9092
getPeachSummaryController(
91-
req as unknown as Request<never, never, PermitTracking[], never>,
93+
req as unknown as Request<never, never, { permitTrackings: PermitTracking[] }, never>,
9294
res as unknown as Response
9395
)
9496
).rejects.toBeInstanceOf(Problem);
9597
});
9698

9799
it('throws Problem(422) when summarizePeachRecord returns null-ish', async () => {
98100
const req = {
99-
body: [
100-
{
101-
trackingId: TEST_PEACH_RECORD_1.record_id,
102-
sourceSystemKind: {
103-
sourceSystem: TEST_PEACH_RECORD_1.system_id,
104-
integrated: true
101+
body: {
102+
permitTrackings: [
103+
{
104+
trackingId: TEST_PEACH_RECORD_1.record_id,
105+
sourceSystemKind: {
106+
sourceSystem: TEST_PEACH_RECORD_1.system_id,
107+
integrated: true
108+
}
105109
}
106-
}
107-
]
110+
]
111+
}
108112
};
109113

110114
getPeachRecordSpy.mockResolvedValue(TEST_PEACH_RECORD_1);
111115
summarizeSpy.mockReturnValue(null);
112116

113117
const error = await getPeachSummaryController(
114-
req as unknown as Request<never, never, PermitTracking[], never>,
118+
req as unknown as Request<never, never, { permitTrackings: PermitTracking[] }, never>,
115119
res as unknown as Response
116120
).catch((e) => e);
117121

@@ -122,20 +126,22 @@ describe('getPeachSummaryController', () => {
122126

123127
it('throws Problem(422) when permitTracking exists but trackingId is missing', async () => {
124128
const req = {
125-
body: [
126-
{
127-
sourceSystemKind: {
128-
sourceSystem: TEST_PEACH_RECORD_1.system_id
129+
body: {
130+
permitTrackings: [
131+
{
132+
sourceSystemKind: {
133+
sourceSystem: TEST_PEACH_RECORD_1.system_id
134+
}
129135
}
130-
}
131-
]
136+
]
137+
}
132138
};
133139

134140
getPeachRecordSpy.mockResolvedValue(TEST_PEACH_RECORD_1);
135141
summarizeSpy.mockReturnValue(TEST_PEACH_SUMMARY);
136142

137143
const error = await getPeachSummaryController(
138-
req as unknown as Request<never, never, PermitTracking[], never>,
144+
req as unknown as Request<never, never, { permitTrackings: PermitTracking[] }, never>,
139145
res as unknown as Response
140146
).catch((e) => e);
141147

@@ -151,18 +157,20 @@ describe('getPeachSummaryController', () => {
151157

152158
it('throws Problem(422) when permitTracking exists but sourceSystemKind.sourceSystem is missing', async () => {
153159
const req = {
154-
body: [
155-
{
156-
trackingId: TEST_PEACH_RECORD_1.record_id
157-
}
158-
]
160+
body: {
161+
permitTrackings: [
162+
{
163+
trackingId: TEST_PEACH_RECORD_1.record_id
164+
}
165+
]
166+
}
159167
};
160168

161169
getPeachRecordSpy.mockResolvedValue(TEST_PEACH_RECORD_1);
162170
summarizeSpy.mockReturnValue(TEST_PEACH_SUMMARY);
163171

164172
const error = await getPeachSummaryController(
165-
req as unknown as Request<never, never, PermitTracking[], never>,
173+
req as unknown as Request<never, never, { permitTrackings: PermitTracking[] }, never>,
166174
res as unknown as Response
167175
).catch((e) => e);
168176

frontend/src/components/authorization/AuthorizationForm.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ async function getPeachSummary(permitTrackings: PermitTracking[]) {
179179
sourceSystemKind: omit(found, ['permitTypeIds']) as SourceSystemKind
180180
};
181181
});
182-
const peachSummary = await peachService.getPeachSummary({ data });
182+
const peachSummary = await peachService.getPeachSummary({ permitTrackings: data });
183183
return peachSummary;
184184
} catch (e) {
185185
if (isAxiosError(e)) {

frontend/src/types/api/requests.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ export interface ListPermissionsRequest {
431431
}
432432

433433
export interface GetPeachSummaryRequest {
434-
data: PermitTracking[];
434+
permitTrackings: PermitTracking[];
435435
}
436436

437437
export interface GetPidsRequest {

frontend/tests/unit/service/peachService.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ describe('peach service', () => {
2121
describe('getPeachSummary', () => {
2222
it('returns a peach summary', async () => {
2323
const request: GetPeachSummaryRequest = {
24-
data: [
24+
permitTrackings: [
2525
{
2626
permitTrackingId: 'tracking-1' as never,
2727
permitId: 'permit-1' as never,
@@ -55,7 +55,7 @@ describe('peach service', () => {
5555

5656
it('returns an empty summary when no permit tracking records are provided', async () => {
5757
const request: GetPeachSummaryRequest = {
58-
data: []
58+
permitTrackings: []
5959
};
6060

6161
const response = {
@@ -76,7 +76,7 @@ describe('peach service', () => {
7676

7777
it('propagates errors', async () => {
7878
const request: GetPeachSummaryRequest = {
79-
data: [
79+
permitTrackings: [
8080
{
8181
shownToProponent: true,
8282
trackingId: 'TRACK-001'

0 commit comments

Comments
 (0)