Skip to content

Commit 8a436b6

Browse files
committed
Merge branch 'main' of https://github.com/NHSDigital/nhs-notify-web-template-management into feature/CCM-10893-header-with-account-info
2 parents 8989b35 + 8ccc668 commit 8a436b6

File tree

139 files changed

+7824
-4408
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

139 files changed

+7824
-4408
lines changed

.eslintrc.json

Lines changed: 3 additions & 1 deletion
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",
@@ -73,7 +74,8 @@
7374
}
7475
],
7576
"no-empty-function": "off",
76-
"unicorn/prefer-module": "off"
77+
"unicorn/prefer-module": "off",
78+
"sonarjs/todo-tag": "off"
7779
},
7880
"overrides": [
7981
{

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__/app/create-letter-template/__snapshots__/page.test.tsx.snap renamed to frontend/src/__tests__/app/upload-letter-template/__snapshots__/page.test.tsx.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3-
exports[`CreateLetterTemplatePage should render CreateLetterTemplatePage 1`] = `
3+
exports[`UploadLetterTemplatePage should render UploadLetterTemplatePage 1`] = `
44
<LetterTemplateForm
55
initialState={
66
{

frontend/src/__tests__/app/create-letter-template/client-id-and-campaign-id-required/__snapshots__/page.test.tsx.snap renamed to frontend/src/__tests__/app/upload-letter-template/client-id-and-campaign-id-required/__snapshots__/page.test.tsx.snap

File renamed without changes.

frontend/src/__tests__/app/create-letter-template/client-id-and-campaign-id-required/page.test.tsx renamed to frontend/src/__tests__/app/upload-letter-template/client-id-and-campaign-id-required/page.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import ClientIdAndCampaignIdRequiredPage from '@app/create-letter-template/client-id-and-campaign-id-required/page';
1+
import ClientIdAndCampaignIdRequiredPage from '@app/upload-letter-template/client-id-and-campaign-id-required/page';
22
import { render } from '@testing-library/react';
33

44
test('ClientIdAndCampaignIdRequiredPage', async () => {

frontend/src/__tests__/app/create-letter-template/page.test.tsx renamed to frontend/src/__tests__/app/upload-letter-template/page.test.tsx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,29 @@
11
/**
22
* @jest-environment node
33
*/
4-
import CreateLetterTemplatePage from '@app/create-letter-template/page';
4+
import UploadLetterTemplatePage, {
5+
generateMetadata,
6+
} from '@app/upload-letter-template/page';
7+
import content from '@content/content';
58
import { getSessionServer } from '@utils/amplify-utils';
69
import { fetchClient } from '@utils/server-features';
710
import { redirect, RedirectType } from 'next/navigation';
811

12+
const { pageTitle } = content.components.templateFormLetter;
13+
914
jest.mock('next/navigation');
1015
jest.mock('@utils/amplify-utils');
1116
jest.mock('@utils/server-features');
1217

1318
const mockGetSessionServer = jest.mocked(getSessionServer);
1419
const mockFetchClient = jest.mocked(fetchClient);
1520

16-
describe('CreateLetterTemplatePage', () => {
21+
describe('UploadLetterTemplatePage', () => {
1722
beforeEach(() => {
1823
jest.resetAllMocks();
1924
});
2025

21-
it('should render CreateLetterTemplatePage', async () => {
26+
it('should render UploadLetterTemplatePage', async () => {
2227
mockGetSessionServer.mockResolvedValueOnce({
2328
accessToken: 'mocktoken',
2429
clientId: 'client1',
@@ -30,8 +35,9 @@ describe('CreateLetterTemplatePage', () => {
3035
},
3136
});
3237

33-
const page = await CreateLetterTemplatePage();
38+
const page = await UploadLetterTemplatePage();
3439

40+
expect(await generateMetadata()).toEqual({ title: pageTitle });
3541
expect(page).toMatchSnapshot();
3642
});
3743

@@ -47,7 +53,7 @@ describe('CreateLetterTemplatePage', () => {
4753
},
4854
});
4955

50-
await CreateLetterTemplatePage();
56+
await UploadLetterTemplatePage();
5157

5258
expect(mockGetSessionServer).toHaveBeenCalled();
5359
expect(mockFetchClient).toHaveBeenCalled();
@@ -67,10 +73,10 @@ describe('CreateLetterTemplatePage', () => {
6773
},
6874
});
6975

70-
await CreateLetterTemplatePage();
76+
await UploadLetterTemplatePage();
7177

7278
expect(mockRedirect).toHaveBeenCalledWith(
73-
'/create-letter-template/client-id-and-campaign-id-required',
79+
'/upload-letter-template/client-id-and-campaign-id-required',
7480
RedirectType.replace
7581
);
7682
});
@@ -89,10 +95,10 @@ describe('CreateLetterTemplatePage', () => {
8995
},
9096
});
9197

92-
await CreateLetterTemplatePage();
98+
await UploadLetterTemplatePage();
9399

94100
expect(mockRedirect).toHaveBeenCalledWith(
95-
'/create-letter-template/client-id-and-campaign-id-required',
101+
'/upload-letter-template/client-id-and-campaign-id-required',
96102
RedirectType.replace
97103
);
98104
});

frontend/src/__tests__/components/atoms/__snapshots__/CodeExample.test.tsx.snap

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@ exports[`CodeExample component renders component correctly 1`] = `
88
>
99
This is an example of markdown:
1010
</span>
11-
<code
12-
aria-describedby="test-id"
11+
<pre
12+
class="nhsuk-code-block"
1313
>
14-
# A test example
15-
</code>
14+
<code
15+
aria-describedby="test-id"
16+
>
17+
# A test example
18+
</code>
19+
</pre>
1620
</DocumentFragment>
1721
`;
1822

@@ -24,11 +28,15 @@ exports[`CodeExample component renders component correctly when optional class i
2428
>
2529
This is an example of markdown:
2630
</span>
27-
<code
28-
aria-describedby="test-id"
29-
class="test-class"
31+
<pre
32+
class="nhsuk-code-block"
3033
>
31-
# A test example
32-
</code>
34+
<code
35+
aria-describedby="test-id"
36+
class="test-class"
37+
>
38+
# A test example
39+
</code>
40+
</pre>
3341
</DocumentFragment>
3442
`;

frontend/src/__tests__/components/forms/ChooseTemplate/server-action.test.ts

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,23 @@ test('submit form - validation error', async () => {
2525
});
2626
});
2727

28-
test('submit form - no validation error', async () => {
29-
const mockRedirect = jest.mocked(redirect);
28+
test.each([
29+
['NHS_APP', '/create-nhs-app-template'],
30+
['SMS', '/create-text-message-template'],
31+
['EMAIL', '/create-email-template'],
32+
['LETTER', '/upload-letter-template'],
33+
])(
34+
'submit form - $templateType redirects to $url',
35+
async (templateType, url) => {
36+
const mockRedirect = jest.mocked(redirect);
3037

31-
await chooseTemplateAction(
32-
{},
33-
getMockFormData({
34-
templateType: 'NHS_APP',
35-
})
36-
);
38+
await chooseTemplateAction(
39+
{},
40+
getMockFormData({
41+
templateType,
42+
})
43+
);
3744

38-
expect(mockRedirect).toHaveBeenCalledWith(
39-
'/create-nhs-app-template',
40-
RedirectType.push
41-
);
42-
});
45+
expect(mockRedirect).toHaveBeenCalledWith(url, RedirectType.push);
46+
}
47+
);

0 commit comments

Comments
 (0)