Skip to content

Commit d9de24e

Browse files
committed
CCM-8962: add submit and submitted pages for letters
1 parent bd1b749 commit d9de24e

File tree

24 files changed

+659
-30
lines changed

24 files changed

+659
-30
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/**
2+
* @jest-environment node
3+
*/
4+
import LetterTemplateSubmittedPage from '@app/letter-template-submitted/[templateId]/page';
5+
import { TemplateSubmitted } from '@molecules/TemplateSubmitted/TemplateSubmitted';
6+
import { LETTER_TEMPLATE } from '@testhelpers';
7+
import { getTemplate } from '@utils/form-actions';
8+
import { redirect } from 'next/navigation';
9+
10+
jest.mock('@molecules/TemplateSubmitted/TemplateSubmitted');
11+
jest.mock('@utils/form-actions');
12+
jest.mock('next/navigation');
13+
14+
const getTemplateMock = jest.mocked(getTemplate);
15+
const redirectMock = jest.mocked(redirect);
16+
17+
describe('LetterTemplateSubmittedPage', () => {
18+
beforeEach(jest.resetAllMocks);
19+
20+
test('should load page', async () => {
21+
getTemplateMock.mockResolvedValueOnce({
22+
...LETTER_TEMPLATE,
23+
templateStatus: 'SUBMITTED',
24+
});
25+
26+
const page = await LetterTemplateSubmittedPage({
27+
params: Promise.resolve({
28+
templateId: 'template-id',
29+
}),
30+
});
31+
32+
expect(getTemplateMock).toHaveBeenCalledWith('template-id');
33+
34+
expect(page).toEqual(
35+
<TemplateSubmitted
36+
templateId={LETTER_TEMPLATE.id}
37+
templateName={LETTER_TEMPLATE.name}
38+
/>
39+
);
40+
});
41+
42+
test('should handle invalid template', async () => {
43+
getTemplateMock.mockResolvedValueOnce(undefined);
44+
45+
await LetterTemplateSubmittedPage({
46+
params: Promise.resolve({
47+
templateId: 'invalid-template',
48+
}),
49+
});
50+
51+
expect(getTemplateMock).toHaveBeenCalledWith('invalid-template');
52+
53+
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
54+
});
55+
});

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
* @jest-environment node
33
*/
44
import SubmitEmailTemplatePage from '@app/submit-email-template/[templateId]/page';
5-
import { SubmitTemplate } from '@forms/SubmitTemplate/SubmitTemplate';
5+
import { SubmitDigitalTemplate } from '@forms/SubmitTemplate/SubmitDigitalTemplate';
66
import { redirect } from 'next/navigation';
77
import { getTemplate } from '@utils/form-actions';
88
import { TemplateDto } from 'nhs-notify-backend-client';
99
import { EMAIL_TEMPLATE, NHS_APP_TEMPLATE, SMS_TEMPLATE } from '../../helpers';
1010

1111
jest.mock('@utils/form-actions');
1212
jest.mock('next/navigation');
13-
jest.mock('@forms/SubmitTemplate/SubmitTemplate');
13+
jest.mock('@forms/SubmitTemplate/SubmitDigitalTemplate');
1414

1515
const getTemplateMock = jest.mocked(getTemplate);
1616
const redirectMock = jest.mocked(redirect);
@@ -41,7 +41,7 @@ describe('SubmitEmailTemplatePage', () => {
4141
});
4242

4343
expect(page).toEqual(
44-
<SubmitTemplate
44+
<SubmitDigitalTemplate
4545
templateName={state.name}
4646
templateId={state.id}
4747
goBackPath='preview-email-template'
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/**
2+
* @jest-environment node
3+
*/
4+
import SubmitLetterTemplatePage, {
5+
generateMetaData,
6+
} from '@app/submit-letter-template/[templateId]/page';
7+
import { SubmitLetterTemplate } from '@forms/SubmitTemplate/SubmitLetterTemplate';
8+
import { redirect } from 'next/navigation';
9+
import { getTemplate } from '@utils/form-actions';
10+
import { TemplateDto } from 'nhs-notify-backend-client';
11+
import {
12+
EMAIL_TEMPLATE,
13+
LETTER_TEMPLATE,
14+
NHS_APP_TEMPLATE,
15+
SMS_TEMPLATE,
16+
} from '../../helpers';
17+
import { LetterTemplate } from 'nhs-notify-web-template-management-utils';
18+
19+
jest.mock('@utils/form-actions');
20+
jest.mock('next/navigation');
21+
jest.mock('@forms/SubmitTemplate/SubmitLetterTemplate');
22+
23+
const getTemplateMock = jest.mocked(getTemplate);
24+
const redirectMock = jest.mocked(redirect);
25+
26+
describe('SubmitLetterTemplatePage', () => {
27+
beforeEach(jest.resetAllMocks);
28+
29+
test('should load page', async () => {
30+
getTemplateMock.mockResolvedValue({
31+
...LETTER_TEMPLATE,
32+
createdAt: 'today',
33+
updatedAt: 'today',
34+
});
35+
36+
const page = await SubmitLetterTemplatePage({
37+
params: Promise.resolve({
38+
templateId: 'template-id',
39+
}),
40+
});
41+
42+
expect(page).toEqual(
43+
<SubmitLetterTemplate
44+
templateName={LETTER_TEMPLATE.name}
45+
templateId={LETTER_TEMPLATE.id}
46+
goBackPath='preview-letter-template'
47+
submitPath='letter-template-submitted'
48+
/>
49+
);
50+
});
51+
52+
test('should handle invalid template', async () => {
53+
getTemplateMock.mockResolvedValue(undefined);
54+
55+
await SubmitLetterTemplatePage({
56+
params: Promise.resolve({
57+
templateId: 'invalid-template',
58+
}),
59+
});
60+
61+
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
62+
});
63+
64+
test.each([
65+
EMAIL_TEMPLATE,
66+
NHS_APP_TEMPLATE,
67+
SMS_TEMPLATE,
68+
{
69+
...LETTER_TEMPLATE,
70+
files: undefined as unknown as LetterTemplate['files'],
71+
} as TemplateDto,
72+
{
73+
...LETTER_TEMPLATE,
74+
files: {
75+
pdfTemplate: {
76+
fileName: 'template.pdf',
77+
currentVersion: undefined as unknown as string,
78+
virusScanStatus: 'PASSED',
79+
},
80+
},
81+
} as TemplateDto,
82+
])(
83+
'should redirect to invalid-template when template is $templateType and LETTER required fields are missing',
84+
async (value) => {
85+
getTemplateMock.mockResolvedValueOnce(value);
86+
87+
await SubmitLetterTemplatePage({
88+
params: Promise.resolve({
89+
templateId: 'template-id',
90+
}),
91+
});
92+
93+
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
94+
}
95+
);
96+
97+
test('should generate metadata', async () => {
98+
const metadata = await generateMetaData();
99+
100+
expect(metadata).toEqual({
101+
title: 'Submit letter template',
102+
});
103+
});
104+
});

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* @jest-environment node
33
*/
44
import SubmitNhsAppTemplatePage from '@app/submit-nhs-app-template/[templateId]/page';
5-
import { SubmitTemplate } from '@forms/SubmitTemplate/SubmitTemplate';
5+
import { SubmitDigitalTemplate } from '@forms/SubmitTemplate/SubmitDigitalTemplate';
66
import { redirect } from 'next/navigation';
77
import { getTemplate } from '@utils/form-actions';
88
import { TemplateDto } from 'nhs-notify-backend-client';
@@ -15,7 +15,7 @@ import {
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);
@@ -44,7 +44,7 @@ describe('SubmitNhsAppTemplatePage', () => {
4444
}),
4545
});
4646
expect(page).toEqual(
47-
<SubmitTemplate
47+
<SubmitDigitalTemplate
4848
templateName={state.name}
4949
templateId={state.id}
5050
goBackPath='preview-nhs-app-template'

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* @jest-environment node
33
*/
44
import SubmitSmsTemplatePage from '@app/submit-text-message-template/[templateId]/page';
5-
import { SubmitTemplate } from '@forms/SubmitTemplate/SubmitTemplate';
5+
import { SubmitDigitalTemplate } from '@forms/SubmitTemplate/SubmitDigitalTemplate';
66
import { redirect } from 'next/navigation';
77
import { getTemplate } from '@utils/form-actions';
88
import { TemplateDto } from 'nhs-notify-backend-client';
@@ -15,7 +15,7 @@ import {
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);
@@ -45,7 +45,7 @@ describe('SubmitSmsTemplatePage', () => {
4545
});
4646

4747
expect(page).toEqual(
48-
<SubmitTemplate
48+
<SubmitDigitalTemplate
4949
templateName={state.name}
5050
templateId={state.id}
5151
goBackPath='preview-text-message-template'
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { SubmitDigitalTemplate } from '@forms/SubmitTemplate/SubmitDigitalTemplate';
2+
import { render } from '@testing-library/react';
3+
4+
jest.mock('@utils/amplify-utils');
5+
6+
jest.mock('react', () => {
7+
const originalModule = jest.requireActual('react');
8+
9+
return {
10+
...originalModule,
11+
useActionState: jest.fn((action, initialState) => {
12+
return [initialState, action];
13+
}),
14+
};
15+
});
16+
17+
jest.mock('@forms/SubmitTemplate/server-action', () => ({
18+
submitTemplate: '/action',
19+
}));
20+
21+
describe('SubmitDigitalTemplate component', () => {
22+
it('should render', () => {
23+
const container = render(
24+
<SubmitDigitalTemplate
25+
templateId='template-id'
26+
templateName='template-name'
27+
goBackPath='example'
28+
submitPath='example-submit'
29+
/>
30+
);
31+
32+
expect(container.asFragment()).toMatchSnapshot();
33+
});
34+
});

frontend/src/__tests__/components/forms/SubmitTemplate/SubmitTemplate.test.tsx renamed to frontend/src/__tests__/components/forms/SubmitTemplate/SubmitLetterTemplate.test.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SubmitTemplate } from '@forms/SubmitTemplate/SubmitTemplate';
1+
import { SubmitLetterTemplate } from '@forms/SubmitTemplate/SubmitLetterTemplate';
22
import { render } from '@testing-library/react';
33

44
jest.mock('@utils/amplify-utils');
@@ -18,10 +18,10 @@ jest.mock('@forms/SubmitTemplate/server-action', () => ({
1818
submitTemplate: '/action',
1919
}));
2020

21-
describe('SubmitTemplate component', () => {
21+
describe('SubmitLetterTemplate component', () => {
2222
it('should render', () => {
2323
const container = render(
24-
<SubmitTemplate
24+
<SubmitLetterTemplate
2525
templateId='template-id'
2626
templateName='template-name'
2727
goBackPath='example'

frontend/src/__tests__/components/forms/SubmitTemplate/__snapshots__/SubmitTemplate.test.tsx.snap renamed to frontend/src/__tests__/components/forms/SubmitTemplate/__snapshots__/SubmitDigitalTemplate.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[`SubmitTemplate component should render 1`] = `
3+
exports[`SubmitDigitalTemplate component should render 1`] = `
44
<DocumentFragment>
55
<main
66
class="nhsuk-main-wrapper"

0 commit comments

Comments
 (0)