Skip to content

Commit ef81a71

Browse files
CCM-8579: Create/update letter template page
1 parent e1ded2a commit ef81a71

File tree

21 files changed

+2830
-46
lines changed

21 files changed

+2830
-46
lines changed

frontend/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020
"dependencies": {
2121
"@aws-amplify/adapter-nextjs": "^1.4.3",
2222
"@aws-amplify/ui-react": "^6.9.1",
23-
"clsx": "^2.1.1",
2423
"aws-amplify": "^6.12.3",
24+
"classnames": "^2.5.1",
25+
"clsx": "^2.1.1",
2526
"date-fns": "^4.1.0",
2627
"jsonwebtoken": "^9.0.2",
2728
"jwt-decode": "^4.0.0",
Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

33
exports[`CreateLetterTemplatePage should render CreateLetterTemplatePage 1`] = `
4-
<NHSNotifyMain>
5-
<h1
6-
className="nhsuk-heading-xl"
7-
data-testid="page-heading"
8-
>
9-
Create letter template
10-
</h1>
11-
<p
12-
id="placeholder"
13-
>
14-
🚧 Placeholder 🚧
15-
</p>
16-
</NHSNotifyMain>
4+
<LetterTemplateForm
5+
initialState={
6+
{
7+
"language": "en",
8+
"letterType": "x0",
9+
"name": "",
10+
"templateType": "LETTER",
11+
}
12+
}
13+
/>
1714
`;
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import { render } from '@testing-library/react';
2+
import { mockDeep } from 'jest-mock-extended';
3+
import {
4+
TemplateFormState,
5+
LetterTemplate,
6+
} from 'nhs-notify-web-template-management-utils';
7+
import { LetterTemplateForm } from '@forms/LetterTemplateForm/LetterTemplateForm';
8+
9+
jest.mock('@utils/amplify-utils');
10+
11+
jest.mock('react', () => {
12+
const originalModule = jest.requireActual('react');
13+
14+
return {
15+
...originalModule,
16+
useActionState: (
17+
_: (
18+
formState: TemplateFormState,
19+
formData: FormData
20+
) => Promise<TemplateFormState>,
21+
initialState: TemplateFormState
22+
) => [initialState, '/action'],
23+
};
24+
});
25+
26+
test('renders page with preloaded field values', () => {
27+
const container = render(
28+
<LetterTemplateForm
29+
initialState={mockDeep<TemplateFormState<LetterTemplate>>({
30+
validationError: undefined,
31+
name: 'template-name',
32+
letterType: 'q1',
33+
language: 'ar',
34+
})}
35+
/>
36+
);
37+
expect(container.asFragment()).toMatchSnapshot();
38+
});
39+
40+
test('renders page without back link for initial state with id - edit mode', () => {
41+
const container = render(
42+
<LetterTemplateForm
43+
initialState={mockDeep<TemplateFormState<LetterTemplate>>({
44+
validationError: undefined,
45+
name: 'template-name',
46+
letterType: 'q1',
47+
language: 'ar',
48+
})}
49+
/>
50+
);
51+
expect(container.asFragment()).toMatchSnapshot();
52+
});
53+
54+
test('renders page one error', () => {
55+
const container = render(
56+
<LetterTemplateForm
57+
initialState={mockDeep<TemplateFormState<LetterTemplate>>({
58+
validationError: {
59+
formErrors: [],
60+
fieldErrors: {
61+
letterTemplateName: ['Template name error'],
62+
},
63+
},
64+
name: '',
65+
letterType: 'x0',
66+
language: 'en',
67+
})}
68+
/>
69+
);
70+
expect(container.asFragment()).toMatchSnapshot();
71+
});
72+
73+
test('renders page with multiple errors', () => {
74+
const container = render(
75+
<LetterTemplateForm
76+
initialState={mockDeep<TemplateFormState<LetterTemplate>>({
77+
validationError: {
78+
formErrors: [],
79+
fieldErrors: {
80+
letterTemplateName: ['Template name error'],
81+
letterType: ['Template letter type error'],
82+
letterLanguage: ['Template language error'],
83+
letterTemplatePdf: ['PDF error'],
84+
letterTemplateCsv: ['CSV error'],
85+
},
86+
},
87+
name: '',
88+
letterType: undefined,
89+
language: undefined,
90+
})}
91+
/>
92+
);
93+
expect(container.asFragment()).toMatchSnapshot();
94+
});

0 commit comments

Comments
 (0)