Skip to content

Commit 4bf695e

Browse files
committed
CCM-11026: add version to event files, add jsonschema tests
1 parent 9cc61e7 commit 4bf695e

File tree

33 files changed

+1501
-45
lines changed

33 files changed

+1501
-45
lines changed

lambdas/event-publisher/jest.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const config: Config = {
55
...baseJestConfig,
66
testEnvironment: 'node',
77
moduleNameMapper: {
8-
'@nhsdigital/nhs-notify-event-schemas-template-management':
8+
'@nhsdigital/nhs-notify-event-schemas-template-management$':
99
'<rootDir>/../../packages/event-schemas/src',
1010
},
1111
};
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import {
2-
$TemplateCompletedEvent,
3-
$TemplateDeletedEvent,
4-
$TemplateDraftedEvent,
2+
$TemplateCompletedEventV1,
3+
$TemplateDeletedEventV1,
4+
$TemplateDraftedEventV1,
55
} from '@nhsdigital/nhs-notify-event-schemas-template-management';
66
import { z } from 'zod';
77

88
// the lambda doesn't necessarily have to only publish TemplateSaved events but
99
// that's all it is doing at the moment
1010
export const $Event = z.discriminatedUnion('type', [
11-
$TemplateCompletedEvent,
12-
$TemplateDraftedEvent,
13-
$TemplateDeletedEvent,
11+
$TemplateCompletedEventV1,
12+
$TemplateDraftedEventV1,
13+
$TemplateDeletedEventV1,
1414
]);
1515
export type Event = z.infer<typeof $Event>;

lambdas/event-publisher/tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"compilerOptions": {
33
"baseUrl": ".",
44
"paths": {
5-
"@nhsdigital/nhs-notify-event-schemas-template-management": [
5+
"@nhsdigital/nhs-notify-event-schemas-template-management$": [
66
"../../packages/event-schemas/src"
77
]
88
},

package-lock.json

Lines changed: 95 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/event-schemas/.gitignore

Lines changed: 0 additions & 1 deletion
This file was deleted.

packages/event-schemas/README.md

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,63 @@
1-
# Template Management Schemas
1+
# Template Management Event Schemas
2+
3+
Zod validators, TypeScript type definitions, JSON Schemas and Sample Events for events emitted by Template Management service
4+
5+
## Installation
6+
7+
To install this package from GitHub package registry, you will need to configure an `.npmrc` file with the following:
8+
9+
```txt
10+
//npm.pkg.github.com/:_authToken=<GITHUB_TOKEN>
11+
@nhsdigital:registry=https://npm.pkg.github.com
12+
```
13+
14+
where `GITHUB_TOKEN` is a classic PAT with the `packages:read` scope.
15+
16+
Then run `npm install @nhsdigital/nhs-notify-event-schemas-template-management`
17+
18+
## Events
19+
20+
- `TemplateCompleted`
21+
- `TemplateDeleted`
22+
- `TemplateDrafted`
23+
24+
## Usage
25+
26+
### Zod Validators
27+
28+
Zod validators for each event type are exported along with an accompanying type definition:
29+
30+
```ts
31+
import {
32+
$TemplateCompletedEvent,
33+
$TemplateDeletedEvent,
34+
$TemplateDraftedEvent,
35+
type TemplateCompletedEvent,
36+
type TemplateDeletedEvent,
37+
type TemplateDraftedEvent,
38+
} from '@nhsdigital/nhs-notify-event-schemas-template-management';
39+
40+
$TemplateCompletedEvent.parse(event);
41+
$TemplateDeletedEvent.parse(event);
42+
$TemplateDraftedEvent.parse(event);
43+
```
44+
45+
### JSON Schemas
46+
47+
JSON Schema files for each event type are included in the package. These are generated from the Zod schemas and can be imported as follows:
48+
49+
```ts
50+
import TemplateCompletedEventV1Schema from '@nhsdigital/nhs-notify-event-schemas-template-management/schemas/TemplateCompleted/v1.json';
51+
import TemplateDeletedEventV1Schema from '@nhsdigital/nhs-notify-event-schemas-template-management/schemas/TemplateDeleted/v1.json';
52+
import TemplateDraftedEventV1Schema from '@nhsdigital/nhs-notify-event-schemas-template-management/schemas/TemplateDrafted/v1.json';
53+
```
54+
55+
### Sample Events
56+
57+
A number of sample event files are also included for each event type. These can be imported as follows:
58+
59+
```ts
60+
import EmailTemplateCompletedEvent from '@nhsdigital/nhs-notify-event-schemas-template-management/examples/TemplateCompleted/v1/email.json';
61+
import SmsTemplateDeletedEventV1Schema from '@nhsdigital/nhs-notify-event-schemas-template-management/examples/TemplateDeleted/v1/sms.json';
62+
import NhsAppTemplateDraftedEventV1Schema from '@nhsdigital/nhs-notify-event-schemas-template-management/examples/TemplateDrafted/v1/nhsapp.json';
63+
```

packages/event-schemas/__tests__/events/template-completed.test.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,22 @@
22

33
import fs from 'node:fs';
44
import path from 'node:path';
5-
import { $TemplateCompletedEvent } from '../../src/events/template-completed';
5+
import { $TemplateCompletedEventV1 } from '../../src/events/template-completed';
66

7-
const examplesDir = path.resolve(__dirname, '../../examples/TemplateCompleted');
7+
const examplesDir = path.resolve(
8+
__dirname,
9+
'../../examples/TemplateCompleted/v1'
10+
);
811

9-
describe('TemplateCompletedEvent schema', () => {
12+
describe('TemplateCompletedEventV1 Zod schema', () => {
1013
it.each(fs.readdirSync(examplesDir))(
1114
'parses sample event %s without errors',
1215
(filename) => {
1316
const event = JSON.parse(
1417
fs.readFileSync(path.join(examplesDir, filename), 'utf8')
1518
);
1619

17-
const result = $TemplateCompletedEvent.safeParse(event);
20+
const result = $TemplateCompletedEventV1.safeParse(event);
1821

1922
if (!result.success) {
2023
console.log(result.error);

packages/event-schemas/__tests__/events/template-deleted.test.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,22 @@
22

33
import fs from 'node:fs';
44
import path from 'node:path';
5-
import { $TemplateDeletedEvent } from '../../src/events/template-deleted';
5+
import { $TemplateDeletedEventV1 } from '../../src/events/template-deleted';
66

7-
const examplesDir = path.resolve(__dirname, '../../examples/TemplateDeleted');
7+
const examplesDir = path.resolve(
8+
__dirname,
9+
'../../examples/TemplateDeleted/v1'
10+
);
811

9-
describe('TemplateCompletedEvent schema', () => {
12+
describe('TemplateCompletedEventV1 Zod schema', () => {
1013
it.each(fs.readdirSync(examplesDir))(
1114
'parses sample event %s without errors',
1215
(filename) => {
1316
const event = JSON.parse(
1417
fs.readFileSync(path.join(examplesDir, filename), 'utf8')
1518
);
1619

17-
const result = $TemplateDeletedEvent.safeParse(event);
20+
const result = $TemplateDeletedEventV1.safeParse(event);
1821

1922
if (!result.success) {
2023
console.log(result.error);

packages/event-schemas/__tests__/events/template-drafted.test.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,22 @@
22

33
import fs from 'node:fs';
44
import path from 'node:path';
5-
import { $TemplateDraftedEvent } from '../../src/events/template-drafted';
5+
import { $TemplateDraftedEventV1 } from '../../src/events/template-drafted';
66

7-
const examplesDir = path.resolve(__dirname, '../../examples/TemplateDrafted');
7+
const examplesDir = path.resolve(
8+
__dirname,
9+
'../../examples/TemplateDrafted/v1'
10+
);
811

9-
describe('TemplateDraftedEvent schema', () => {
12+
describe('TemplateDraftedEventV1 Zod schema', () => {
1013
it.each(fs.readdirSync(examplesDir))(
1114
'parses sample event %s without errors',
1215
(filename) => {
1316
const event = JSON.parse(
1417
fs.readFileSync(path.join(examplesDir, filename), 'utf8')
1518
);
1619

17-
const result = $TemplateDraftedEvent.safeParse(event);
20+
const result = $TemplateDraftedEventV1.safeParse(event);
1821

1922
if (!result.success) {
2023
console.log(result.error);
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/* eslint-disable security/detect-non-literal-fs-filename */
2+
3+
import fs from 'node:fs';
4+
import path from 'node:path';
5+
import { Ajv2020 } from 'ajv/dist/2020';
6+
import addFormats from 'ajv-formats';
7+
8+
import TemplateCompletedEventV1Schema from '../../schemas/TemplateCompleted/v1.json';
9+
10+
const examplesDir = path.resolve(
11+
__dirname,
12+
'../../examples/TemplateCompleted/v1'
13+
);
14+
15+
describe('TemplateCompletedEventV1 JSON schema', () => {
16+
it.each(fs.readdirSync(examplesDir))(
17+
'parses sample event %s without errors',
18+
(filename) => {
19+
const event = JSON.parse(
20+
fs.readFileSync(path.join(examplesDir, filename), 'utf8')
21+
);
22+
23+
const ajv = new Ajv2020();
24+
addFormats(ajv);
25+
const validate = ajv.compile(TemplateCompletedEventV1Schema);
26+
27+
const valid = validate(event);
28+
29+
if (!valid) {
30+
console.log(validate.errors);
31+
}
32+
33+
expect(valid).toBe(true);
34+
}
35+
);
36+
});

0 commit comments

Comments
 (0)