Skip to content

Commit 9fe2b31

Browse files
CCM-8692: submit letter (#370)
Co-authored-by: ClareJonesBJSS <[email protected]>
1 parent f309183 commit 9fe2b31

File tree

97 files changed

+1774
-404
lines changed

Some content is hidden

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

97 files changed

+1774
-404
lines changed

frontend/src/__tests__/app/create-and-submit-templates/__snapshots__/page.test.tsx.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ exports[`matches the snapshot 1`] = `
4949
Before you start
5050
</h2>
5151
<p>
52-
Only use this tool if your message content has been signed off by the relevant stakeholders in your team.
52+
Only use this tool if your message content has been approved by the relevant stakeholders in your team.
5353
</p>
5454
<p>
5555
You can save a template as a draft and edit it later.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/**
2+
* @jest-environment node
3+
*/
4+
import LetterTemplateSubmittedPage, {
5+
generateMetadata,
6+
} from '@app/letter-template-submitted/[templateId]/page';
7+
import content from '@content/content';
8+
import { TemplateSubmitted } from '@molecules/TemplateSubmitted/TemplateSubmitted';
9+
import { LETTER_TEMPLATE } from '@testhelpers';
10+
import { getTemplate } from '@utils/form-actions';
11+
import { redirect } from 'next/navigation';
12+
13+
const { pageTitle } = content.components.templateSubmitted;
14+
15+
jest.mock('@molecules/TemplateSubmitted/TemplateSubmitted');
16+
jest.mock('@utils/form-actions');
17+
jest.mock('next/navigation');
18+
19+
const getTemplateMock = jest.mocked(getTemplate);
20+
const redirectMock = jest.mocked(redirect);
21+
22+
describe('LetterTemplateSubmittedPage', () => {
23+
beforeEach(jest.resetAllMocks);
24+
25+
test('should load page', async () => {
26+
getTemplateMock.mockResolvedValueOnce({
27+
...LETTER_TEMPLATE,
28+
templateStatus: 'SUBMITTED',
29+
});
30+
31+
const page = await LetterTemplateSubmittedPage({
32+
params: Promise.resolve({
33+
templateId: 'template-id',
34+
}),
35+
});
36+
37+
expect(await generateMetadata()).toEqual({
38+
title: pageTitle.LETTER,
39+
});
40+
expect(getTemplateMock).toHaveBeenCalledWith('template-id');
41+
42+
expect(page).toEqual(
43+
<TemplateSubmitted
44+
templateId={LETTER_TEMPLATE.id}
45+
templateName={LETTER_TEMPLATE.name}
46+
/>
47+
);
48+
});
49+
50+
test('should handle invalid template', async () => {
51+
getTemplateMock.mockResolvedValueOnce(undefined);
52+
53+
await LetterTemplateSubmittedPage({
54+
params: Promise.resolve({
55+
templateId: 'invalid-template',
56+
}),
57+
});
58+
59+
expect(getTemplateMock).toHaveBeenCalledWith('invalid-template');
60+
61+
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
62+
});
63+
});

frontend/src/__tests__/app/preview-letter-template/page.test.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
/**
22
* @jest-environment node
33
*/
4-
import PreviewLetterTemplatePage from '@app/preview-letter-template/[templateId]/page';
4+
import PreviewLetterTemplatePage, {
5+
generateMetadata,
6+
} from '@app/preview-letter-template/[templateId]/page';
7+
import { PreviewLetterTemplate } from '@organisms/PreviewLetterTemplate/PreviewLetterTemplate';
58
import { type LetterTemplate } from 'nhs-notify-web-template-management-utils';
69
import { redirect } from 'next/navigation';
710
import { getTemplate } from '@utils/form-actions';
811
import { Language, LetterType, TemplateDto } from 'nhs-notify-backend-client';
912
import { EMAIL_TEMPLATE, NHS_APP_TEMPLATE, SMS_TEMPLATE } from '../../helpers';
10-
import { PreviewLetterTemplate } from '@organisms/PreviewLetterTemplate/PreviewLetterTemplate';
13+
import content from '@content/content';
14+
15+
const { pageTitle } = content.components.previewLetterTemplate;
1116

1217
jest.mock('@utils/form-actions');
1318
jest.mock('next/navigation');
@@ -58,6 +63,10 @@ describe('PreviewLetterTemplatePage', () => {
5863
}),
5964
});
6065

66+
expect(await generateMetadata()).toEqual({
67+
title: pageTitle,
68+
});
69+
6170
expect(page).toEqual(<PreviewLetterTemplate template={letterTemplate} />);
6271
});
6372

frontend/src/__tests__/app/preview-submitted-email-template/page.test.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* @jest-environment node
33
*/
4-
import ViewSubmittedEmailTemplatePage, {
4+
import PreviewSubmittedEmailTemplatePage, {
55
generateMetadata,
66
} from '@app/preview-submitted-email-template/[templateId]/page';
77
import { ViewEmailTemplate } from '@molecules/ViewEmailTemplate/ViewEmailTemplate';
@@ -44,7 +44,7 @@ describe('ViewSubmittedEmailTemplatePage', () => {
4444

4545
getTemplateMock.mockResolvedValueOnce(templateDTO);
4646

47-
const page = await ViewSubmittedEmailTemplatePage({
47+
const page = await PreviewSubmittedEmailTemplatePage({
4848
params: Promise.resolve({
4949
templateId: 'template-id',
5050
}),
@@ -59,7 +59,7 @@ describe('ViewSubmittedEmailTemplatePage', () => {
5959
});
6060

6161
it('should redirect to invalid-template when no templateId is found', async () => {
62-
await ViewSubmittedEmailTemplatePage({
62+
await PreviewSubmittedEmailTemplatePage({
6363
params: Promise.resolve({
6464
templateId: 'template-id',
6565
}),
@@ -106,7 +106,7 @@ describe('ViewSubmittedEmailTemplatePage', () => {
106106
async (value) => {
107107
getTemplateMock.mockResolvedValueOnce(value);
108108

109-
await ViewSubmittedEmailTemplatePage({
109+
await PreviewSubmittedEmailTemplatePage({
110110
params: Promise.resolve({
111111
templateId: 'template-id',
112112
}),
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
/**
2+
* @jest-environment node
3+
*/
4+
import PreviewSubmittedLetterTemplatePage, {
5+
generateMetadata,
6+
} from '@app/preview-submitted-letter-template/[templateId]/page';
7+
import { ViewLetterTemplate } from '@molecules/ViewLetterTemplate/ViewLetterTemplate';
8+
import { LetterTemplate } from 'nhs-notify-web-template-management-utils';
9+
import { getTemplate } from '@utils/form-actions';
10+
import { redirect } from 'next/navigation';
11+
import { TemplateDto } from 'nhs-notify-backend-client';
12+
import {
13+
EMAIL_TEMPLATE,
14+
NHS_APP_TEMPLATE,
15+
SMS_TEMPLATE,
16+
LETTER_TEMPLATE,
17+
} from '../../helpers';
18+
import content from '@content/content';
19+
20+
const { pageTitle } = content.components.previewLetterTemplate;
21+
22+
jest.mock('@utils/form-actions');
23+
jest.mock('next/navigation');
24+
25+
const redirectMock = jest.mocked(redirect);
26+
const getTemplateMock = jest.mocked(getTemplate);
27+
28+
describe('PreviewSubmittedLetterTemplatePage', () => {
29+
beforeEach(jest.resetAllMocks);
30+
31+
it('should load page', async () => {
32+
const templateDTO = {
33+
templateType: 'LETTER',
34+
id: 'template-id',
35+
templateStatus: 'SUBMITTED',
36+
name: 'template-name',
37+
files: {
38+
pdfTemplate: {
39+
fileName: 'file.pdf',
40+
currentVersion: 'b',
41+
virusScanStatus: 'PASSED',
42+
},
43+
},
44+
createdAt: '2025-01-13T10:19:25.579Z',
45+
updatedAt: '2025-01-13T10:19:25.579Z',
46+
letterType: 'x0',
47+
language: 'en',
48+
} satisfies TemplateDto;
49+
50+
const submittedLetterTemplate: LetterTemplate = {
51+
...templateDTO,
52+
templateStatus: 'SUBMITTED',
53+
};
54+
55+
getTemplateMock.mockResolvedValueOnce(templateDTO);
56+
57+
const page = await PreviewSubmittedLetterTemplatePage({
58+
params: Promise.resolve({
59+
templateId: 'template-id',
60+
}),
61+
});
62+
63+
expect(await generateMetadata()).toEqual({
64+
title: pageTitle,
65+
});
66+
expect(page).toEqual(
67+
<ViewLetterTemplate initialState={submittedLetterTemplate} />
68+
);
69+
});
70+
71+
it('should redirect to invalid-template when no template is found', async () => {
72+
await PreviewSubmittedLetterTemplatePage({
73+
params: Promise.resolve({
74+
templateId: 'template-id',
75+
}),
76+
});
77+
78+
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
79+
});
80+
81+
test.each([
82+
{
83+
...EMAIL_TEMPLATE,
84+
templateStatus: 'SUBMITTED' as const,
85+
},
86+
{
87+
...SMS_TEMPLATE,
88+
templateStatus: 'SUBMITTED' as const,
89+
},
90+
{
91+
...NHS_APP_TEMPLATE,
92+
templateStatus: 'SUBMITTED' as const,
93+
},
94+
{
95+
...LETTER_TEMPLATE,
96+
name: undefined as unknown as string,
97+
templateStatus: 'SUBMITTED' as const,
98+
},
99+
{
100+
...LETTER_TEMPLATE,
101+
templateStatus: 'NOT_YET_SUBMITTED' as const,
102+
},
103+
])(
104+
'should redirect to invalid-template when template is $templateType, name is $name, and status is $templateStatus',
105+
async (value) => {
106+
getTemplateMock.mockResolvedValueOnce(value);
107+
108+
await PreviewSubmittedLetterTemplatePage({
109+
params: Promise.resolve({
110+
templateId: 'template-id',
111+
}),
112+
});
113+
114+
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
115+
}
116+
);
117+
});

frontend/src/__tests__/app/preview-submitted-nhs-app-template/page.test.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* @jest-environment node
33
*/
4-
import ViewSubmittedNHSAppTemplatePage, {
4+
import PreviewSubmittedNHSAppTemplatePage, {
55
generateMetadata,
66
} from '@app/preview-submitted-nhs-app-template/[templateId]/page';
77
import { ViewNHSAppTemplate } from '@molecules/ViewNHSAppTemplate/ViewNHSAppTemplate';
@@ -20,7 +20,7 @@ jest.mock('next/navigation');
2020
const redirectMock = jest.mocked(redirect);
2121
const getTemplateMock = jest.mocked(getTemplate);
2222

23-
describe('ViewSubmittedNHSAppTemplatePage', () => {
23+
describe('PreviewSubmittedNHSAppTemplatePage', () => {
2424
beforeEach(jest.resetAllMocks);
2525

2626
it('should load page', async () => {
@@ -42,7 +42,7 @@ describe('ViewSubmittedNHSAppTemplatePage', () => {
4242

4343
getTemplateMock.mockResolvedValueOnce(templateDTO);
4444

45-
const page = await ViewSubmittedNHSAppTemplatePage({
45+
const page = await PreviewSubmittedNHSAppTemplatePage({
4646
params: Promise.resolve({
4747
templateId: 'template-id',
4848
}),
@@ -57,7 +57,7 @@ describe('ViewSubmittedNHSAppTemplatePage', () => {
5757
});
5858

5959
it('should redirect to invalid-template when no template is found', async () => {
60-
await ViewSubmittedNHSAppTemplatePage({
60+
await PreviewSubmittedNHSAppTemplatePage({
6161
params: Promise.resolve({
6262
templateId: 'template-id',
6363
}),
@@ -108,7 +108,7 @@ describe('ViewSubmittedNHSAppTemplatePage', () => {
108108
async (value) => {
109109
getTemplateMock.mockResolvedValueOnce(value);
110110

111-
await ViewSubmittedNHSAppTemplatePage({
111+
await PreviewSubmittedNHSAppTemplatePage({
112112
params: Promise.resolve({
113113
templateId: 'template-id',
114114
}),

frontend/src/__tests__/app/preview-submitted-text-message-template/page.test.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* @jest-environment node
33
*/
4-
import ViewSubmittedSMSTemplatePage, {
4+
import PreviewSubmittedSMSTemplatePage, {
55
generateMetadata,
66
} from '@app/preview-submitted-text-message-template/[templateId]/page';
77
import { ViewSMSTemplate } from '@molecules/ViewSMSTemplate/ViewSMSTemplate';
@@ -20,7 +20,7 @@ jest.mock('next/navigation');
2020
const redirectMock = jest.mocked(redirect);
2121
const getTemplateMock = jest.mocked(getTemplate);
2222

23-
describe('ViewSubmittedSMSTemplatePage', () => {
23+
describe('PreviewSubmittedSMSTemplatePage', () => {
2424
beforeEach(jest.resetAllMocks);
2525

2626
it('should load page', async () => {
@@ -42,7 +42,7 @@ describe('ViewSubmittedSMSTemplatePage', () => {
4242

4343
getTemplateMock.mockResolvedValueOnce(templateDTO);
4444

45-
const page = await ViewSubmittedSMSTemplatePage({
45+
const page = await PreviewSubmittedSMSTemplatePage({
4646
params: Promise.resolve({
4747
templateId: 'template-id',
4848
}),
@@ -57,7 +57,7 @@ describe('ViewSubmittedSMSTemplatePage', () => {
5757
});
5858

5959
it('should redirect to invalid-template when no template is found', async () => {
60-
await ViewSubmittedSMSTemplatePage({
60+
await PreviewSubmittedSMSTemplatePage({
6161
params: Promise.resolve({
6262
templateId: 'template-id',
6363
}),
@@ -100,7 +100,7 @@ describe('ViewSubmittedSMSTemplatePage', () => {
100100
async (value) => {
101101
getTemplateMock.mockResolvedValueOnce(value);
102102

103-
await ViewSubmittedSMSTemplatePage({
103+
await PreviewSubmittedSMSTemplatePage({
104104
params: Promise.resolve({
105105
templateId: 'template-id',
106106
}),

frontend/src/__tests__/app/submit-email-template/page.test.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import SubmitEmailTemplatePage, {
55
generateMetadata,
66
} from '@app/submit-email-template/[templateId]/page';
7-
import { SubmitTemplate } from '@forms/SubmitTemplate/SubmitTemplate';
7+
import { SubmitDigitalTemplate } from '@forms/SubmitTemplate/SubmitDigitalTemplate';
88
import { redirect } from 'next/navigation';
99
import { getTemplate } from '@utils/form-actions';
1010
import { TemplateDto } from 'nhs-notify-backend-client';
@@ -15,7 +15,7 @@ const { pageTitle } = content.components.submitTemplate;
1515

1616
jest.mock('@utils/form-actions');
1717
jest.mock('next/navigation');
18-
jest.mock('@forms/SubmitTemplate/SubmitTemplate');
18+
jest.mock('@forms/SubmitTemplate/SubmitDigitalTemplate');
1919

2020
const getTemplateMock = jest.mocked(getTemplate);
2121
const redirectMock = jest.mocked(redirect);
@@ -49,7 +49,7 @@ describe('SubmitEmailTemplatePage', () => {
4949
title: pageTitle.EMAIL,
5050
});
5151
expect(page).toEqual(
52-
<SubmitTemplate
52+
<SubmitDigitalTemplate
5353
templateName={state.name}
5454
templateId={state.id}
5555
goBackPath='preview-email-template'

0 commit comments

Comments
 (0)