Skip to content

Commit fb590b2

Browse files
committed
Add more examples for different statuses
1 parent a76a2c9 commit fb590b2

File tree

8 files changed

+168
-29
lines changed

8 files changed

+168
-29
lines changed

internal/events/schemas/examples/letter.DISPATCHED.json renamed to internal/events/schemas/examples/letter.ACCEPTED.json

File renamed without changes.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"data": {
3+
"domainId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
4+
"groupId": "client_template",
5+
"origin": {
6+
"domain": "letter-rendering",
7+
"event": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
8+
"subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5"
9+
},
10+
"reasonCode": "RNIB",
11+
"reasonText": "RNIB",
12+
"specificationId": "1y3q9v1zzzz",
13+
"status": "FORWARDED"
14+
},
15+
"datacontenttype": "application/json",
16+
"dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.FORWARDED.1.0.0.schema.json",
17+
"dataschemaversion": "1.0.0",
18+
"id": "23f1f09c-a555-4d9b-8405-0b33490bc920",
19+
"recordedtime": "2025-08-28T08:45:00.000Z",
20+
"severitynumber": 2,
21+
"severitytext": "INFO",
22+
"source": "/data-plane/supplier-api/prod/update-status",
23+
"specversion": "1.0",
24+
"subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479",
25+
"time": "2025-08-28T08:45:00.000Z",
26+
"traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01",
27+
"type": "uk.nhs.notify.supplier-api.letter.FORWARDED.v1"
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"data": {
3+
"domainId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
4+
"groupId": "client_template",
5+
"origin": {
6+
"domain": "letter-rendering",
7+
"event": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
8+
"subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5"
9+
},
10+
"reasonCode": "R07",
11+
"reasonText": "No such address",
12+
"specificationId": "1y3q9v1zzzz",
13+
"status": "RETURNED"
14+
},
15+
"datacontenttype": "application/json",
16+
"dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.RETURNED.1.0.0.schema.json",
17+
"dataschemaversion": "1.0.0",
18+
"id": "23f1f09c-a555-4d9b-8405-0b33490bc920",
19+
"recordedtime": "2025-08-28T08:45:00.000Z",
20+
"severitynumber": 2,
21+
"severitytext": "INFO",
22+
"source": "/data-plane/supplier-api/prod/update-status",
23+
"specversion": "1.0",
24+
"subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479",
25+
"time": "2025-08-28T08:45:00.000Z",
26+
"traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01",
27+
"type": "uk.nhs.notify.supplier-api.letter.RETURNED.v1"
28+
}

internal/events/schemas/supplier-api.yaml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ components:
4848
contentType: application/json
4949
payload:
5050
$ref: './events/letter.ACCEPTED.schema.json'
51+
examples:
52+
- payload:
53+
$ref: './examples/letter.ACCEPTED.json'
5154

5255
letter-cancelled:
5356
name: letter-cancelled
@@ -81,9 +84,6 @@ components:
8184
contentType: application/json
8285
payload:
8386
$ref: './events/letter.DISPATCHED.schema.json'
84-
examples:
85-
- payload:
86-
$ref: './examples/letter.DISPATCHED.json'
8787

8888
letter-enclosed:
8989
name: letter-enclosed
@@ -117,6 +117,9 @@ components:
117117
contentType: application/json
118118
payload:
119119
$ref: './events/letter.FORWARDED.schema.json'
120+
examples:
121+
- payload:
122+
$ref: './examples/letter.FORWARDED.json'
120123

121124
letter-pending:
122125
name: letter-pending
@@ -161,6 +164,9 @@ components:
161164
contentType: application/json
162165
payload:
163166
$ref: './events/letter.RETURNED.schema.json'
167+
examples:
168+
- payload:
169+
$ref: './examples/letter.RETURNED.json'
164170

165171
letter-any:
166172
name: letter-any

internal/events/src/events/__tests__/letter-status-change-events.test.ts

Lines changed: 47 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import fs from "node:fs";
22
import path from "node:path";
3-
import { letterEventMap } from "../letter-events";
3+
import {letterEventMap} from "../letter-events";
4+
import {LetterStatus} from "../../domain/letter";
45

56
function readJson(filename: string): unknown {
67
const filePath = path.resolve(__dirname, "./testData/", filename);
@@ -9,35 +10,55 @@ function readJson(filename: string): unknown {
910
}
1011

1112
describe("LetterStatus event validations", () => {
12-
it("should validate a LetterStatus.ACCEPTED event with all required fields", () => {
13-
const json = readJson("letter.ACCEPTED-valid.json");
1413

15-
const event = letterEventMap['letter.ACCEPTED'].parse(json);
14+
it.each(["ACCEPTED", "FORWARDED", "RETURNED"])("should parse %s letter statuses successfully", (status) => {
15+
const json = readJson(`letter.${status}.json`);
1616

17+
const event = letterEventMap[`letter.${status}`].parse(json);
1718
expect(event).toBeDefined();
18-
expect(event).toEqual(
19-
expect.objectContaining({
20-
type: "uk.nhs.notify.supplier-api.letter.ACCEPTED.v1",
21-
specversion: "1.0",
22-
source: "/data-plane/supplier-api/prod/update-status",
23-
id: "23f1f09c-a555-4d9b-8405-0b33490bc920",
24-
time: "2025-08-28T08:45:00.000Z",
25-
datacontenttype: "application/json",
26-
dataschema: "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.ACCEPTED.1.0.0.schema.json",
27-
dataschemaversion: "1.0.0",
28-
subject: "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479",
29-
data: expect.objectContaining({
30-
origin: expect.objectContaining({
31-
subject: "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5",
32-
event: "f47ac10b-58cc-4372-a567-0e02b2c3d479"
33-
}),
34-
domainId: "f47ac10b-58cc-4372-a567-0e02b2c3d479",
35-
specificationId: "1y3q9v1zzzz",
36-
groupId: "client_template",
37-
status: "ACCEPTED"
38-
})
19+
expect(event).toEqual(expect.objectContaining({
20+
type: `uk.nhs.notify.supplier-api.letter.${status}.v1`,
21+
specversion: "1.0",
22+
source: "/data-plane/supplier-api/prod/update-status",
23+
id: "23f1f09c-a555-4d9b-8405-0b33490bc920",
24+
time: "2025-08-28T08:45:00.000Z",
25+
datacontenttype: "application/json",
26+
dataschema: `https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.${status}.1.0.0.schema.json`,
27+
dataschemaversion: "1.0.0",
28+
subject: "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479",
29+
data: expect.objectContaining({
30+
origin: expect.objectContaining({
31+
subject: "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5",
32+
event: "f47ac10b-58cc-4372-a567-0e02b2c3d479"
33+
}),
34+
domainId: "f47ac10b-58cc-4372-a567-0e02b2c3d479",
35+
specificationId: "1y3q9v1zzzz",
36+
groupId: "client_template",
37+
status
3938
})
40-
);
39+
}))
40+
});
41+
42+
it("should parse reason code and text correctly for returned mail", () => {
43+
const json = readJson("letter.RETURNED.json");
44+
45+
const event = letterEventMap["letter.RETURNED"].parse(json);
46+
expect(event).toBeDefined();
47+
expect(event.data).toEqual(expect.objectContaining({
48+
reasonCode: "R07",
49+
reasonText: "No such address"
50+
}))
51+
});
52+
53+
it("should parse reason code and text correctly for forwarded mail", () => {
54+
const json = readJson("letter.FORWARDED.json");
55+
56+
const event = letterEventMap["letter.FORWARDED"].parse(json);
57+
expect(event).toBeDefined();
58+
expect(event.data).toEqual(expect.objectContaining({
59+
reasonCode: "RNIB",
60+
reasonText: "RNIB"
61+
}))
4162
});
4263

4364
it("should throw error for letter.ACCEPTED event with missing sourceSubject", () => {

internal/events/src/events/__tests__/testData/letter.ACCEPTED-valid.json renamed to internal/events/src/events/__tests__/testData/letter.ACCEPTED.json

File renamed without changes.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"data": {
3+
"domainId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
4+
"groupId": "client_template",
5+
"origin": {
6+
"domain": "letter-rendering",
7+
"event": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
8+
"subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5"
9+
},
10+
"reasonCode": "RNIB",
11+
"reasonText": "RNIB",
12+
"specificationId": "1y3q9v1zzzz",
13+
"status": "FORWARDED"
14+
},
15+
"datacontenttype": "application/json",
16+
"dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.FORWARDED.1.0.0.schema.json",
17+
"dataschemaversion": "1.0.0",
18+
"id": "23f1f09c-a555-4d9b-8405-0b33490bc920",
19+
"recordedtime": "2025-08-28T08:45:00.000Z",
20+
"severitynumber": 2,
21+
"severitytext": "INFO",
22+
"source": "/data-plane/supplier-api/prod/update-status",
23+
"specversion": "1.0",
24+
"subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479",
25+
"time": "2025-08-28T08:45:00.000Z",
26+
"traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01",
27+
"type": "uk.nhs.notify.supplier-api.letter.FORWARDED.v1"
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"data": {
3+
"domainId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
4+
"groupId": "client_template",
5+
"origin": {
6+
"domain": "letter-rendering",
7+
"event": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
8+
"subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5"
9+
},
10+
"reasonCode": "R07",
11+
"reasonText": "No such address",
12+
"specificationId": "1y3q9v1zzzz",
13+
"status": "RETURNED"
14+
},
15+
"datacontenttype": "application/json",
16+
"dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.RETURNED.1.0.0.schema.json",
17+
"dataschemaversion": "1.0.0",
18+
"id": "23f1f09c-a555-4d9b-8405-0b33490bc920",
19+
"recordedtime": "2025-08-28T08:45:00.000Z",
20+
"severitynumber": 2,
21+
"severitytext": "INFO",
22+
"source": "/data-plane/supplier-api/prod/update-status",
23+
"specversion": "1.0",
24+
"subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479",
25+
"time": "2025-08-28T08:45:00.000Z",
26+
"traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01",
27+
"type": "uk.nhs.notify.supplier-api.letter.RETURNED.v1"
28+
}

0 commit comments

Comments
 (0)