Skip to content

Commit 843d24b

Browse files
CCM-11537: Frontend
1 parent f86a1e8 commit 843d24b

File tree

65 files changed

+7303
-1052
lines changed

Some content is hidden

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

65 files changed

+7303
-1052
lines changed

frontend/src/__tests__/app/choose-templates/__snapshots__/page.test.tsx.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ exports[`ChooseTemplatesPage renders correctly for a message plan with multiple
102102
class="nhsuk-u-margin-bottom-2"
103103
data-testid="template-name-NHSAPP"
104104
>
105-
name
105+
app template name
106106
</p>
107107
<ul
108108
class="channel-template-actions"
@@ -275,7 +275,7 @@ exports[`ChooseTemplatesPage renders correctly for a message plan with multiple
275275
class="nhsuk-u-margin-bottom-2"
276276
data-testid="template-name-SMS"
277277
>
278-
name
278+
sms template name
279279
</p>
280280
<ul
281281
class="channel-template-actions"
@@ -586,7 +586,7 @@ exports[`ChooseTemplatesPage renders correctly for a message plan with multiple
586586
class="nhsuk-u-margin-bottom-2"
587587
data-testid="template-name-LETTER"
588588
>
589-
name
589+
letter template name
590590
</p>
591591
<ul
592592
class="channel-template-actions"
Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`ChooseEmailTemplate page renders Email template selection 1`] = `
4+
<DocumentFragment>
5+
<main
6+
class="nhsuk-main-wrapper"
7+
id="maincontent"
8+
role="main"
9+
>
10+
<div
11+
class="nhsuk-grid-row"
12+
>
13+
<div
14+
class="nhsuk-grid-column-full"
15+
>
16+
<span
17+
class="nhsuk-caption-l"
18+
>
19+
Autumn Campaign Plan
20+
</span>
21+
<h1
22+
class="nhsuk-heading-l"
23+
>
24+
Choose an email template
25+
</h1>
26+
<form
27+
action="javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')"
28+
>
29+
<input
30+
name="form-id"
31+
readonly=""
32+
type="hidden"
33+
value="choose-channel-template"
34+
/>
35+
<input
36+
name="csrf_token"
37+
readonly=""
38+
type="hidden"
39+
value="no_token"
40+
/>
41+
<dl
42+
class="nhsuk-summary-list"
43+
>
44+
<div
45+
class="nhsuk-summary-list__row"
46+
>
47+
<dt
48+
class="nhsuk-summary-list__key"
49+
>
50+
Previously selected template
51+
</dt>
52+
<dd
53+
class="nhsuk-summary-list__value"
54+
>
55+
email template name
56+
</dd>
57+
</div>
58+
</dl>
59+
<div
60+
class="nhsuk-grid-row"
61+
>
62+
<div
63+
class="nhsuk-grid-column-full"
64+
>
65+
<div
66+
class="nhsuk-hint"
67+
>
68+
Choose one option
69+
</div>
70+
<div
71+
class="nhsuk-form-group"
72+
>
73+
<div
74+
class="nhsuk-radios"
75+
id="channelTemplate"
76+
>
77+
<table
78+
class="nhsuk-table-responsive"
79+
data-testid="channel-templates-table"
80+
id="channel-templates-table"
81+
>
82+
<thead
83+
class="nhsuk-table__head"
84+
role="rowgroup"
85+
>
86+
<tr
87+
class="nhsuk-table__row"
88+
>
89+
<th
90+
class="nhsuk-table__header"
91+
data-testid="channel-templates-table-header-template-select"
92+
scope="col"
93+
>
94+
Select
95+
</th>
96+
<th
97+
class="nhsuk-table__header"
98+
data-testid="channel-templates-table-header-template-name"
99+
scope="col"
100+
>
101+
Name
102+
</th>
103+
<th
104+
class="nhsuk-table__header"
105+
data-testid="channel-templates-table-header-template-type"
106+
scope="col"
107+
>
108+
Type
109+
</th>
110+
<th
111+
class="nhsuk-table__header"
112+
data-testid="channel-templates-table-header-template-last-edited"
113+
scope="col"
114+
>
115+
Last edited
116+
</th>
117+
<th
118+
class="nhsuk-table__header"
119+
data-testid="channel-templates-table-header-template-action"
120+
scope="col"
121+
/>
122+
</tr>
123+
</thead>
124+
<tbody
125+
class="nhsuk-table__body"
126+
>
127+
<tr
128+
class="nhsuk-table__row"
129+
>
130+
<td
131+
class="nhsuk-table__cell"
132+
role="cell"
133+
>
134+
<span
135+
aria-hidden="true"
136+
class="nhsuk-table-responsive__heading"
137+
>
138+
Select
139+
</span>
140+
<div
141+
class="nhsuk-radios__item"
142+
>
143+
<input
144+
checked=""
145+
class="nhsuk-radios__input"
146+
data-testid="email-template-id-radio"
147+
id="channelTemplate-email-template-id"
148+
name="channelTemplate"
149+
type="radio"
150+
value="email-template-id"
151+
/>
152+
<label
153+
class="nhsuk-label nhsuk-radios__label"
154+
for="channelTemplate-email-template-id"
155+
id="channelTemplate-email-template-id--label"
156+
>
157+
158+
</label>
159+
</div>
160+
</td>
161+
<td
162+
class="nhsuk-table__cell"
163+
role="cell"
164+
>
165+
<span
166+
aria-hidden="true"
167+
class="nhsuk-table-responsive__heading"
168+
>
169+
Name
170+
</span>
171+
email template name
172+
</td>
173+
<td
174+
class="nhsuk-table__cell"
175+
role="cell"
176+
>
177+
<span
178+
aria-hidden="true"
179+
class="nhsuk-table-responsive__heading"
180+
>
181+
Type
182+
</span>
183+
Email
184+
</td>
185+
<td
186+
class="nhsuk-table__cell"
187+
role="cell"
188+
>
189+
<span
190+
aria-hidden="true"
191+
class="nhsuk-table-responsive__heading"
192+
>
193+
Last edited
194+
</span>
195+
13th Jan 2025
196+
<br />
197+
10:19
198+
</td>
199+
<td
200+
class="nhsuk-table__cell"
201+
role="cell"
202+
>
203+
<span
204+
aria-hidden="true"
205+
class="nhsuk-table-responsive__heading"
206+
>
207+
208+
</span>
209+
<div
210+
class="actionLinksWrapper"
211+
>
212+
<a
213+
aria-label="Preview"
214+
data-testid="preview-link"
215+
href="/preview-submitted-email-template/email-template-id?sourcePage=message-plans%2Fchoose-email-template%2Ftestid"
216+
id="preview-template-link-0"
217+
>
218+
Preview
219+
</a>
220+
</div>
221+
</td>
222+
</tr>
223+
</tbody>
224+
</table>
225+
</div>
226+
</div>
227+
</div>
228+
</div>
229+
<div
230+
class="nhsuk-form-group"
231+
data-testid="channel-template-actions"
232+
>
233+
<button
234+
aria-disabled="false"
235+
class="nhsuk-button"
236+
data-testid="submit-button"
237+
id="channel-template-submit-button"
238+
type="submit"
239+
>
240+
Save and continue
241+
</button>
242+
<a
243+
class="nhsuk-u-font-size-19 inline-block nhsuk-u-margin-left-3 nhsuk-u-padding-top-3"
244+
href="/message-plans/choose-templates/fbb81055-79b9-4759-ac07-d191ae57be34"
245+
>
246+
Go back
247+
</a>
248+
</div>
249+
</form>
250+
</div>
251+
</div>
252+
</main>
253+
</DocumentFragment>
254+
`;
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import ChooseEmailTemplate, {
2+
generateMetadata,
3+
} from '@app/message-plans/choose-email-template/[routingConfigId]/page';
4+
import { EMAIL_TEMPLATE, ROUTING_CONFIG } from '@testhelpers/helpers';
5+
import { render } from '@testing-library/react';
6+
import { getTemplates } from '@utils/form-actions';
7+
import { getRoutingConfig } from '@utils/message-plans';
8+
import { redirect, usePathname } from 'next/navigation';
9+
10+
jest.mock('@utils/message-plans');
11+
jest.mock('@utils/form-actions');
12+
jest.mock('next/navigation');
13+
14+
const getRoutingConfigMock = jest.mocked(getRoutingConfig);
15+
const getTemplatesMock = jest.mocked(getTemplates);
16+
const redirectMock = jest.mocked(redirect);
17+
jest
18+
.mocked(usePathname)
19+
.mockReturnValue('message-plans/choose-email-template/testid');
20+
21+
describe('ChooseEmailTemplate page', () => {
22+
it('should redirect to invalid page with invalid routing config id', async () => {
23+
getRoutingConfigMock.mockResolvedValueOnce(undefined);
24+
25+
await ChooseEmailTemplate({
26+
params: Promise.resolve({
27+
routingConfigId: 'invalid-id',
28+
}),
29+
});
30+
31+
expect(getRoutingConfigMock).toHaveBeenCalledWith('invalid-id');
32+
33+
expect(redirectMock).toHaveBeenCalledWith(
34+
'/message-plans/invalid',
35+
'replace'
36+
);
37+
});
38+
39+
it('should redirect to invalid if plan has no email cascade entry', async () => {
40+
getRoutingConfigMock.mockResolvedValueOnce({
41+
...ROUTING_CONFIG,
42+
cascade: ROUTING_CONFIG.cascade.filter(
43+
(item) => item.channel !== 'EMAIL'
44+
),
45+
});
46+
47+
await ChooseEmailTemplate({
48+
params: Promise.resolve({
49+
routingConfigId: ROUTING_CONFIG.id,
50+
}),
51+
});
52+
53+
expect(getRoutingConfigMock).toHaveBeenCalledWith(ROUTING_CONFIG.id);
54+
55+
expect(redirectMock).toHaveBeenCalledWith(
56+
'/message-plans/invalid',
57+
'replace'
58+
);
59+
});
60+
61+
it('renders Email template selection', async () => {
62+
getRoutingConfigMock.mockResolvedValueOnce(ROUTING_CONFIG);
63+
getTemplatesMock.mockResolvedValueOnce([EMAIL_TEMPLATE]);
64+
65+
const page = await ChooseEmailTemplate({
66+
params: Promise.resolve({
67+
routingConfigId: ROUTING_CONFIG.id,
68+
}),
69+
});
70+
71+
const container = render(page);
72+
73+
expect(getRoutingConfigMock).toHaveBeenCalledWith(ROUTING_CONFIG.id);
74+
expect(getTemplatesMock).toHaveBeenCalledWith({
75+
templateType: 'EMAIL',
76+
templateStatus: 'SUBMITTED',
77+
});
78+
79+
expect(await generateMetadata()).toEqual({
80+
title: 'Choose an email template - NHS Notify',
81+
});
82+
expect(container.asFragment()).toMatchSnapshot();
83+
});
84+
});

0 commit comments

Comments
 (0)