Skip to content

Commit d03575d

Browse files
CCM-12858: WIP fixes
1 parent 829cc29 commit d03575d

File tree

3 files changed

+28
-42
lines changed

3 files changed

+28
-42
lines changed

lambdas/core-notifier-lambda/src/__tests__/app/parse-sqs-message.test.ts

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,6 @@ import { parseSqsRecord } from 'app/parse-sqs-message';
55
import { InvalidPdmResourceAvailableEvent } from 'domain/invalid-pdm-resource-available-event';
66
import { validPdmEvent } from '__tests__/constants';
77

8-
// Import the mocked validator after the mock setup
9-
import { messagePDMResourceAvailableValidator } from 'digital-letters-events/PDMResourceAvailable.js';
10-
11-
jest.mock('digital-letters-events/PDMResourceAvailable.js', () => ({
12-
messagePDMResourceAvailableValidator: jest.fn(),
13-
}));
14-
158
const mockLogger = mock<Logger>();
169

1710
describe('parseSqsRecord', () => {
@@ -43,56 +36,43 @@ describe('parseSqsRecord', () => {
4336
describe('when SQS record contains a valid PDMResourceAvailable event', () => {
4437
it('parses and returns the PDMResourceAvailable event', () => {
4538
const sqsRecord = createSqsRecord(validPdmEvent);
46-
(messagePDMResourceAvailableValidator as jest.Mock).mockReturnValueOnce(
47-
true,
48-
);
4939

5040
const result = parseSqsRecord(sqsRecord, mockLogger);
5141

5242
expect(result).toEqual(validPdmEvent);
5343
expect(mockLogger.info).toHaveBeenCalledWith('Parsing SQS Record', {
5444
messageId,
45+
body: sqsRecord.body,
5546
});
5647
expect(mockLogger.info).toHaveBeenCalledWith(
5748
'Parsed valid PDMResourceAvailable Event',
5849
{
5950
messageId,
51+
messageReference: validPdmEvent.data.messageReference,
52+
senderId: validPdmEvent.data.senderId,
53+
resourceId: validPdmEvent.data.resourceId,
6054
},
6155
);
62-
expect(messagePDMResourceAvailableValidator).toHaveBeenCalledWith(
63-
validPdmEvent,
64-
);
6556
});
6657
});
6758

6859
describe('when SQS record contains an invalid PDMResourceAvailable event', () => {
6960
it('logs error and throws InvalidPdmResourceAvailableEvent', () => {
7061
const invalidEvent = { ...validPdmEvent, data: {} };
7162
const sqsRecord = createSqsRecord(invalidEvent);
72-
const validationErrors = [
73-
{
74-
instancePath: '/data',
75-
schemaPath: '#/properties/data/required',
76-
keyword: 'required',
77-
params: { missingProperty: 'senderId' },
78-
message: "must have required property 'senderId'",
79-
},
80-
];
81-
(messagePDMResourceAvailableValidator as jest.Mock).mockReturnValueOnce(
82-
false,
83-
);
84-
messagePDMResourceAvailableValidator.errors = validationErrors;
8563

8664
expect(() => parseSqsRecord(sqsRecord, mockLogger)).toThrow(
8765
InvalidPdmResourceAvailableEvent,
8866
);
8967

90-
expect(mockLogger.error).toHaveBeenCalledWith({
91-
err: validationErrors,
92-
description:
93-
'The SQS message does not contain a valid PDMResourceAvailable event',
94-
messageId,
95-
});
68+
expect(mockLogger.error).toHaveBeenCalledWith(
69+
expect.objectContaining({
70+
description:
71+
'The SQS message does not contain a valid PDMResourceAvailable event',
72+
messageId,
73+
err: expect.any(Array),
74+
}),
75+
);
9676
});
9777
});
9878

@@ -118,6 +98,7 @@ describe('parseSqsRecord', () => {
11898
expect(() => parseSqsRecord(sqsRecord, mockLogger)).toThrow(SyntaxError);
11999
expect(mockLogger.info).toHaveBeenCalledWith('Parsing SQS Record', {
120100
messageId,
101+
body: sqsRecord.body,
121102
});
122103
});
123104
});

lambdas/core-notifier-lambda/src/__tests__/constants.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,19 +60,20 @@ export const mockResponse: SingleMessageResponse = {
6060

6161
export const validPdmEvent: PDMResourceAvailable = {
6262
id: 'event-id-123',
63-
source: 'urn:nhs:names:services:notify:pdm',
63+
source:
64+
'/nhs/england/notify/development/dev-12345/data-plane/digitalletters/pdm',
6465
specversion: '1.0',
6566
type: 'uk.nhs.notify.digital.letters.pdm.resource.available.v1',
6667
time: '2025-12-15T10:00:00Z',
6768
datacontenttype: 'application/json',
6869
subject: 'message-subject-123',
69-
traceparent: '00-trace-parent',
70+
traceparent: '00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01',
7071
recordedtime: '2025-12-15T10:00:00Z',
7172
severitynumber: 2,
7273
data: {
7374
senderId: 'sender-123',
7475
messageReference: 'msg-ref-123',
75-
resourceId: 'ResourceId-123',
76+
resourceId: 'f5524783-e5d7-473e-b2a0-29582ff231da',
7677
nhsNumber: '9991234566',
7778
odsCode: 'A12345',
7879
},

lambdas/core-notifier-lambda/src/app/parse-sqs-message.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,24 @@ import { SQSRecord } from 'aws-lambda';
22
import { Logger } from 'utils';
33
import { PDMResourceAvailable } from 'digital-letters-events';
44
import { InvalidPdmResourceAvailableEvent } from 'domain/invalid-pdm-resource-available-event';
5-
import { messagePDMResourceAvailableValidator } from 'digital-letters-events/PDMResourceAvailable.js';
6-
7-
const eventValidator = messagePDMResourceAvailableValidator as (
8-
d: unknown,
9-
) => d is PDMResourceAvailable;
5+
import messagePDMResourceAvailableValidator from 'digital-letters-events/PDMResourceAvailable.js';
106

117
export const parseSqsRecord = (
128
sqsRecord: SQSRecord,
139
logger: Logger,
1410
): PDMResourceAvailable => {
1511
logger.info('Parsing SQS Record', {
1612
messageId: sqsRecord.messageId,
13+
body: sqsRecord.body,
1714
});
15+
1816
const sqsEventBody = JSON.parse(sqsRecord.body);
1917
const sqsEventDetail = sqsEventBody.detail;
20-
const isEventValid = eventValidator(sqsEventDetail);
21-
if (!isEventValid) {
18+
logger.info('Parsed SQS Event Detail', {
19+
detail: sqsEventDetail,
20+
});
21+
22+
if (!messagePDMResourceAvailableValidator(sqsEventDetail)) {
2223
logger.error({
2324
err: messagePDMResourceAvailableValidator.errors,
2425
description:
@@ -30,6 +31,9 @@ export const parseSqsRecord = (
3031

3132
logger.info('Parsed valid PDMResourceAvailable Event', {
3233
messageId: sqsRecord.messageId,
34+
messageReference: sqsEventDetail.data.messageReference,
35+
senderId: sqsEventDetail.data.senderId,
36+
resourceId: sqsEventDetail.data.resourceId,
3337
});
3438

3539
return sqsEventDetail;

0 commit comments

Comments
 (0)