Skip to content

Commit 588bf5a

Browse files
committed
status event source from TF envar
1 parent 37ce482 commit 588bf5a

File tree

6 files changed

+24
-16
lines changed

6 files changed

+24
-16
lines changed

infrastructure/terraform/components/api/module_lambda_letter_updates_transformer.tf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ module "letter_updates_transformer" {
3636
log_subscription_role_arn = local.acct.log_subscription_role_arn
3737

3838
lambda_env_vars = merge(local.common_lambda_env_vars, {
39-
EVENTPUB_SNS_TOPIC_ARN = "${module.eventpub.sns_topic.arn}"
39+
EVENTPUB_SNS_TOPIC_ARN = "${module.eventpub.sns_topic.arn}",
40+
EVENT_SOURCE = "/data-plane/supplier-api/${var.group}/${var.environment}/letters"
4041
})
4142
}
4243

lambdas/letter-updates-transformer/src/__tests__/letter-updates-transformer.test.ts

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import {
88
} from "aws-lambda";
99
import { mockDeep } from "jest-mock-extended";
1010
import { LetterBase } from "@internal/datastore";
11-
import createHandler from "../letter-updates-transformer";
1211
import { Deps } from "../deps";
1312
import { EnvVars } from "../env";
14-
import mapLetterToCloudEvent from "../mappers/letter-mapper";
1513
import { LetterStatus } from "../../../api-handler/src/contracts/letters";
1614
import { LetterForEventPub } from "../types";
15+
import mapLetterToCloudEvent from "../mappers/letter-mapper";
16+
import createHandler from "../letter-updates-transformer";
1717

1818
// Make crypto return consistent values, since we"re calling it in both prod and test code and comparing the values
1919
const realCrypto = jest.requireActual("crypto");
@@ -26,15 +26,19 @@ jest.mock("crypto", () => ({
2626
randomBytes: (size: number) => randomBytes[String(size)],
2727
}));
2828

29-
describe("letter-updates-transformer Lambda", () => {
30-
const mockedDeps: jest.Mocked<Deps> = {
29+
const eventSource = "/data-plane/supplier-api/supplier-api-dev/main/letters";
30+
31+
const mockedDeps: jest.Mocked<Deps> = {
3132
snsClient: { send: jest.fn() } as unknown as SNSClient,
3233
logger: { info: jest.fn(), error: jest.fn() } as unknown as pino.Logger,
3334
env: {
3435
EVENTPUB_SNS_TOPIC_ARN: "arn:aws:sns:region:account:topic",
36+
EVENT_SOURCE: eventSource,
3537
} as unknown as EnvVars,
3638
} as Deps;
3739

40+
describe("letter-updates-transformer Lambda", () => {
41+
3842
beforeEach(() => {
3943
jest.useFakeTimers();
4044
});
@@ -50,7 +54,7 @@ describe("letter-updates-transformer Lambda", () => {
5054
const newLetter = generateLetter("PRINTED");
5155
const expectedEntries = [
5256
expect.objectContaining({
53-
Message: JSON.stringify(mapLetterToCloudEvent(newLetter)),
57+
Message: JSON.stringify(mapLetterToCloudEvent(newLetter, eventSource)),
5458
}),
5559
];
5660

@@ -76,7 +80,7 @@ describe("letter-updates-transformer Lambda", () => {
7680
newLetter.reasonCode = "R1";
7781
const expectedEntries = [
7882
expect.objectContaining({
79-
Message: JSON.stringify(mapLetterToCloudEvent(newLetter)),
83+
Message: JSON.stringify(mapLetterToCloudEvent(newLetter, eventSource)),
8084
}),
8185
];
8286

@@ -103,7 +107,7 @@ describe("letter-updates-transformer Lambda", () => {
103107
newLetter.reasonCode = "R2";
104108
const expectedEntries = [
105109
expect.objectContaining({
106-
Message: JSON.stringify(mapLetterToCloudEvent(newLetter)),
110+
Message: JSON.stringify(mapLetterToCloudEvent(newLetter, eventSource)),
107111
}),
108112
];
109113

@@ -168,7 +172,7 @@ describe("letter-updates-transformer Lambda", () => {
168172
const newLetters = generateLetters(10, "PRINTED");
169173
const expectedEntries = newLetters.map((letter) =>
170174
expect.objectContaining({
171-
Message: JSON.stringify(mapLetterToCloudEvent(letter)),
175+
Message: JSON.stringify(mapLetterToCloudEvent(letter, eventSource)),
172176
}),
173177
);
174178

@@ -197,19 +201,19 @@ describe("letter-updates-transformer Lambda", () => {
197201
newLetters.slice(0, 10).map((letter, index) =>
198202
expect.objectContaining({
199203
Id: expect.stringMatching(new RegExp(`-${index}$`)),
200-
Message: JSON.stringify(mapLetterToCloudEvent(letter)),
204+
Message: JSON.stringify(mapLetterToCloudEvent(letter, eventSource)),
201205
}),
202206
),
203207
newLetters.slice(10, 20).map((letter, index) =>
204208
expect.objectContaining({
205209
Id: expect.stringMatching(new RegExp(`-${index}$`)),
206-
Message: JSON.stringify(mapLetterToCloudEvent(letter)),
210+
Message: JSON.stringify(mapLetterToCloudEvent(letter, eventSource)),
207211
}),
208212
),
209213
newLetters.slice(20).map((letter, index) =>
210214
expect.objectContaining({
211215
Id: expect.stringMatching(new RegExp(`-${index}$`)),
212-
Message: JSON.stringify(mapLetterToCloudEvent(letter)),
216+
Message: JSON.stringify(mapLetterToCloudEvent(letter, eventSource)),
213217
}),
214218
),
215219
];

lambdas/letter-updates-transformer/src/env.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { z } from "zod";
22

33
const EnvVarsSchema = z.object({
44
EVENTPUB_SNS_TOPIC_ARN: z.string(),
5+
EVENT_SOURCE: z.string(),
56
});
67

78
export type EnvVars = z.infer<typeof EnvVarsSchema>;

lambdas/letter-updates-transformer/src/letter-updates-transformer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export default function createHandler(deps: Deps): Handler<KinesisStreamEvent> {
3030
isChanged(record, "status") || isChanged(record, "reasonCode"),
3131
)
3232
.map((element) => extractNewLetter(element))
33-
.map((element) => mapLetterToCloudEvent(element));
33+
.map((element) => mapLetterToCloudEvent(element, deps.env.EVENT_SOURCE));
3434

3535
for (const batch of generateBatches(cloudEvents)) {
3636
deps.logger.info({

lambdas/letter-updates-transformer/src/mappers/__tests__/letter-mapper.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ describe("letter-mapper", () => {
1414
reasonText: "Reason text",
1515
updatedAt: "2025-11-24T15:55:18.000Z",
1616
} as Letter;
17-
const event = mapLetterToCloudEvent(letter);
17+
const source = "/data-plane/supplier-api/supplier-api-dev/main/letters"
18+
const event = mapLetterToCloudEvent(letter, source);
1819

1920
// Check it conforms to the letter event schema - parse will throw an error if not
2021
$LetterEvent.parse(event);
@@ -41,5 +42,6 @@ describe("letter-mapper", () => {
4142
event: event.id,
4243
},
4344
});
45+
expect(event.source).toBe(source);
4446
});
4547
});

lambdas/letter-updates-transformer/src/mappers/letter-mapper.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { LetterForEventPub } from "../types";
55

66
export default function mapLetterToCloudEvent(
77
letter: LetterForEventPub,
8+
eventSource: string
89
): LetterEvent {
910
const eventId = randomUUID();
1011
const dataschemaversion = eventSchemaPackage.version;
@@ -15,9 +16,8 @@ export default function mapLetterToCloudEvent(
1516
plane: "data",
1617
dataschema: `https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.${letter.status}.${dataschemaversion}.schema.json`,
1718
dataschemaversion,
18-
source: "/data-plane/supplier-api/letters",
19+
source: eventSource,
1920
subject: `letter-origin/supplier-api/letter/${letter.id}`,
20-
2121
data: {
2222
domainId: letter.id as LetterEvent["data"]["domainId"],
2323
status: letter.status,

0 commit comments

Comments
 (0)