Skip to content

Commit 631f6c3

Browse files
committed
Merge branch 'main' of https://github.com/NHSDigital/nhs-notify-web-template-management into feature/CCM-11438-update-markdown-guidance
2 parents 106403c + fcdcc5d commit 631f6c3

File tree

33 files changed

+841
-275
lines changed

33 files changed

+841
-275
lines changed

.eslintrc.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
],
5454
"security/detect-object-injection": "off",
5555
"sonarjs/no-duplicate-string": "off",
56+
"sonarjs/todo-tag": "off",
5657
"no-param-reassign": "off",
5758
"no-useless-constructor": "off",
5859
"sonarjs/no-small-switch": "off",

frontend/src/__tests__/app/request-proof-of-template/page.test.tsx

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ describe('RequestProofPage', () => {
4242
name: 'template-name',
4343
letterType: 'x0',
4444
language: 'en',
45+
proofingEnabled: true,
4546
files: {
4647
pdfTemplate: {
4748
virusScanStatus: 'PASSED',
@@ -123,4 +124,41 @@ describe('RequestProofPage', () => {
123124

124125
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
125126
});
127+
128+
test('should forbid user from requesting a proof when proofingEnabled is false', async () => {
129+
const state = {
130+
id: 'template-id',
131+
templateType: 'LETTER',
132+
templateStatus: 'NOT_YET_SUBMITTED',
133+
name: 'template-name',
134+
letterType: 'x0',
135+
language: 'ar',
136+
proofingEnabled: false,
137+
files: {
138+
pdfTemplate: {
139+
virusScanStatus: 'PASSED',
140+
currentVersion: 'a',
141+
fileName: 'a.pdf',
142+
},
143+
},
144+
} satisfies Partial<TemplateDto>;
145+
146+
getTemplateMock.mockResolvedValue({
147+
...state,
148+
createdAt: 'today',
149+
updatedAt: 'today',
150+
});
151+
152+
await RequestProofPage({
153+
params: Promise.resolve({
154+
templateId: 'template-id',
155+
}),
156+
});
157+
158+
expect(await generateMetadata()).toEqual({
159+
title: pageTitle,
160+
});
161+
162+
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
163+
});
126164
});

frontend/src/__tests__/components/organisms/PreviewLetterTemplate.test.tsx

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
import { PreviewLetterTemplate } from '@organisms/PreviewLetterTemplate/PreviewLetterTemplate';
22
import { render } from '@testing-library/react';
3+
import { isRightToLeft } from 'nhs-notify-web-template-management-utils/enum';
4+
5+
jest.mock('nhs-notify-web-template-management-utils/enum');
6+
7+
const isRightToLeftMock = jest.mocked(isRightToLeft);
38

49
describe('PreviewLetterTemplate component', () => {
10+
beforeEach(() => {
11+
jest.resetAllMocks();
12+
isRightToLeftMock.mockReturnValueOnce(false);
13+
});
14+
515
it('matches snapshot when template status is VIRUS_SCAN_FAILED', () => {
616
const container = render(
717
<PreviewLetterTemplate
@@ -20,6 +30,7 @@ describe('PreviewLetterTemplate component', () => {
2030
},
2131
testDataCsv: undefined,
2232
},
33+
proofingEnabled: true,
2334
createdAt: '2025-04-02T09:33:25.729Z',
2435
updatedAt: '2025-04-02T09:33:25.729Z',
2536
}}
@@ -46,6 +57,7 @@ describe('PreviewLetterTemplate component', () => {
4657
virusScanStatus: 'PASSED',
4758
},
4859
},
60+
proofingEnabled: true,
4961
createdAt: '2025-04-02T09:33:25.729Z',
5062
updatedAt: '2025-04-02T09:33:25.729Z',
5163
}}
@@ -72,6 +84,7 @@ describe('PreviewLetterTemplate component', () => {
7284
virusScanStatus: 'PASSED',
7385
},
7486
},
87+
proofingEnabled: true,
7588
createdAt: '2025-04-02T09:33:25.729Z',
7689
updatedAt: '2025-04-02T09:33:25.729Z',
7790
}}
@@ -106,6 +119,7 @@ describe('PreviewLetterTemplate component', () => {
106119
},
107120
},
108121
},
122+
proofingEnabled: true,
109123
createdAt: '2025-04-02T09:33:25.729Z',
110124
updatedAt: '2025-04-02T09:33:25.729Z',
111125
}}
@@ -140,6 +154,7 @@ describe('PreviewLetterTemplate component', () => {
140154
},
141155
},
142156
},
157+
proofingEnabled: true,
143158
createdAt: '2025-04-02T09:33:25.729Z',
144159
updatedAt: '2025-04-02T09:33:25.729Z',
145160
}}
@@ -171,6 +186,7 @@ describe('PreviewLetterTemplate component', () => {
171186
virusScanStatus: 'PASSED',
172187
},
173188
},
189+
proofingEnabled: true,
174190
createdAt: '2025-04-02T09:33:25.729Z',
175191
updatedAt: '2025-04-02T09:33:25.729Z',
176192
}}
@@ -197,6 +213,7 @@ describe('PreviewLetterTemplate component', () => {
197213
virusScanStatus: 'PENDING',
198214
},
199215
},
216+
proofingEnabled: true,
200217
createdAt: '2025-04-02T09:33:25.729Z',
201218
updatedAt: '2025-04-02T09:33:25.729Z',
202219
}}
@@ -223,6 +240,46 @@ describe('PreviewLetterTemplate component', () => {
223240
virusScanStatus: 'PASSED',
224241
},
225242
},
243+
proofingEnabled: true,
244+
createdAt: '2025-04-02T09:33:25.729Z',
245+
updatedAt: '2025-04-02T09:33:25.729Z',
246+
}}
247+
/>
248+
);
249+
250+
expect(container.asFragment()).toMatchSnapshot();
251+
});
252+
253+
it('matches snapshot when template language is Right to Left', () => {
254+
isRightToLeftMock.mockReset();
255+
256+
isRightToLeftMock.mockReturnValueOnce(true);
257+
258+
const container = render(
259+
<PreviewLetterTemplate
260+
template={{
261+
id: '0A097DCD-35F9-4DAD-A37E-AC358B71B74D',
262+
owner: 'owner',
263+
name: 'letter',
264+
templateType: 'LETTER',
265+
templateStatus: 'NOT_YET_SUBMITTED',
266+
letterType: 'x0',
267+
language: 'ar',
268+
files: {
269+
pdfTemplate: {
270+
fileName: 'file.pdf',
271+
currentVersion: 'b',
272+
virusScanStatus: 'PASSED',
273+
},
274+
proofs: {
275+
'your-proof.pdf': {
276+
fileName: 'your-proof.pdf',
277+
virusScanStatus: 'PASSED',
278+
supplier: 'MBA',
279+
},
280+
},
281+
},
282+
proofingEnabled: false,
226283
createdAt: '2025-04-02T09:33:25.729Z',
227284
updatedAt: '2025-04-02T09:33:25.729Z',
228285
}}

0 commit comments

Comments
 (0)