Skip to content

Commit 2efa742

Browse files
committed
Merge branch 'feature/CCM-11474_message-plan-name-screen' of https://github.com/NHSDigital/nhs-notify-web-template-management into feature/CCM-11492-create-edit-message-plans
2 parents bf6171d + 48d22e9 commit 2efa742

File tree

128 files changed

+3582
-1785
lines changed

Some content is hidden

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

128 files changed

+3582
-1785
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ import EditNhsAppTemplatePage, {
99
generateMetadata,
1010
} from '@app/edit-nhs-app-template/[templateId]/page';
1111
import { TemplateDto } from 'nhs-notify-backend-client';
12-
import { EMAIL_TEMPLATE, LETTER_TEMPLATE, SMS_TEMPLATE } from '../../helpers';
12+
import {
13+
EMAIL_TEMPLATE,
14+
LETTER_TEMPLATE,
15+
SMS_TEMPLATE,
16+
} from '@testhelpers/helpers';
1317
import content from '@content/content';
1418

1519
const { editPageTitle } = content.components.templateFormNhsApp;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import LetterTemplateSubmittedPage, {
66
} from '@app/letter-template-submitted/[templateId]/page';
77
import content from '@content/content';
88
import { TemplateSubmitted } from '@molecules/TemplateSubmitted/TemplateSubmitted';
9-
import { LETTER_TEMPLATE } from '@testhelpers';
9+
import { LETTER_TEMPLATE } from '@testhelpers/helpers';
1010
import { getTemplate } from '@utils/form-actions';
1111
import { redirect } from 'next/navigation';
1212

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`matches snapshot 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+
data-testid="page-content-wrapper"
13+
>
14+
<div
15+
class="nhsuk-grid-column-two-thirds"
16+
>
17+
<h1
18+
class="nhsuk-heading-xl"
19+
data-testid="page-heading"
20+
>
21+
You cannot create message plans yet
22+
</h1>
23+
<p>
24+
To get access, contact your onboarding manager and give them this error message:
25+
</p>
26+
<div
27+
class="nhsuk-inset-text"
28+
>
29+
<p>
30+
Account needs a campaign ID
31+
</p>
32+
</div>
33+
<p>
34+
<a
35+
data-testid="back-link"
36+
href="/message-plans"
37+
>
38+
Go back
39+
</a>
40+
</p>
41+
</div>
42+
</div>
43+
</main>
44+
</DocumentFragment>
45+
`;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { render } from '@testing-library/react';
2+
import MessagePlanCampaignIdRequiredPage from '@app/message-plans/campaign-id-required/page';
3+
4+
test('matches snapshot', () => {
5+
const container = render(MessagePlanCampaignIdRequiredPage());
6+
7+
expect(container.asFragment()).toMatchSnapshot();
8+
});
Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`CreateMessagePlanPage renders the page when messageOrder is "LETTER" 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-two-thirds"
15+
>
16+
<h1
17+
class="nhsuk-heading-xl"
18+
>
19+
Create a message plan
20+
</h1>
21+
<div
22+
data-testid="mocked-message-plan-form"
23+
/>
24+
</div>
25+
</div>
26+
</main>
27+
</DocumentFragment>
28+
`;
29+
30+
exports[`CreateMessagePlanPage renders the page when messageOrder is "NHSAPP" 1`] = `
31+
<DocumentFragment>
32+
<main
33+
class="nhsuk-main-wrapper"
34+
id="maincontent"
35+
role="main"
36+
>
37+
<div
38+
class="nhsuk-grid-row"
39+
>
40+
<div
41+
class="nhsuk-grid-column-two-thirds"
42+
>
43+
<h1
44+
class="nhsuk-heading-xl"
45+
>
46+
Create a message plan
47+
</h1>
48+
<div
49+
data-testid="mocked-message-plan-form"
50+
/>
51+
</div>
52+
</div>
53+
</main>
54+
</DocumentFragment>
55+
`;
56+
57+
exports[`CreateMessagePlanPage renders the page when messageOrder is "NHSAPP,EMAIL" 1`] = `
58+
<DocumentFragment>
59+
<main
60+
class="nhsuk-main-wrapper"
61+
id="maincontent"
62+
role="main"
63+
>
64+
<div
65+
class="nhsuk-grid-row"
66+
>
67+
<div
68+
class="nhsuk-grid-column-two-thirds"
69+
>
70+
<h1
71+
class="nhsuk-heading-xl"
72+
>
73+
Create a message plan
74+
</h1>
75+
<div
76+
data-testid="mocked-message-plan-form"
77+
/>
78+
</div>
79+
</div>
80+
</main>
81+
</DocumentFragment>
82+
`;
83+
84+
exports[`CreateMessagePlanPage renders the page when messageOrder is "NHSAPP,EMAIL,SMS" 1`] = `
85+
<DocumentFragment>
86+
<main
87+
class="nhsuk-main-wrapper"
88+
id="maincontent"
89+
role="main"
90+
>
91+
<div
92+
class="nhsuk-grid-row"
93+
>
94+
<div
95+
class="nhsuk-grid-column-two-thirds"
96+
>
97+
<h1
98+
class="nhsuk-heading-xl"
99+
>
100+
Create a message plan
101+
</h1>
102+
<div
103+
data-testid="mocked-message-plan-form"
104+
/>
105+
</div>
106+
</div>
107+
</main>
108+
</DocumentFragment>
109+
`;
110+
111+
exports[`CreateMessagePlanPage renders the page when messageOrder is "NHSAPP,EMAIL,SMS,LETTER" 1`] = `
112+
<DocumentFragment>
113+
<main
114+
class="nhsuk-main-wrapper"
115+
id="maincontent"
116+
role="main"
117+
>
118+
<div
119+
class="nhsuk-grid-row"
120+
>
121+
<div
122+
class="nhsuk-grid-column-two-thirds"
123+
>
124+
<h1
125+
class="nhsuk-heading-xl"
126+
>
127+
Create a message plan
128+
</h1>
129+
<div
130+
data-testid="mocked-message-plan-form"
131+
/>
132+
</div>
133+
</div>
134+
</main>
135+
</DocumentFragment>
136+
`;
137+
138+
exports[`CreateMessagePlanPage renders the page when messageOrder is "NHSAPP,SMS" 1`] = `
139+
<DocumentFragment>
140+
<main
141+
class="nhsuk-main-wrapper"
142+
id="maincontent"
143+
role="main"
144+
>
145+
<div
146+
class="nhsuk-grid-row"
147+
>
148+
<div
149+
class="nhsuk-grid-column-two-thirds"
150+
>
151+
<h1
152+
class="nhsuk-heading-xl"
153+
>
154+
Create a message plan
155+
</h1>
156+
<div
157+
data-testid="mocked-message-plan-form"
158+
/>
159+
</div>
160+
</div>
161+
</main>
162+
</DocumentFragment>
163+
`;
164+
165+
exports[`CreateMessagePlanPage renders the page when messageOrder is "NHSAPP,SMS,EMAIL" 1`] = `
166+
<DocumentFragment>
167+
<main
168+
class="nhsuk-main-wrapper"
169+
id="maincontent"
170+
role="main"
171+
>
172+
<div
173+
class="nhsuk-grid-row"
174+
>
175+
<div
176+
class="nhsuk-grid-column-two-thirds"
177+
>
178+
<h1
179+
class="nhsuk-heading-xl"
180+
>
181+
Create a message plan
182+
</h1>
183+
<div
184+
data-testid="mocked-message-plan-form"
185+
/>
186+
</div>
187+
</div>
188+
</main>
189+
</DocumentFragment>
190+
`;
191+
192+
exports[`CreateMessagePlanPage renders the page when messageOrder is "NHSAPP,SMS,LETTER" 1`] = `
193+
<DocumentFragment>
194+
<main
195+
class="nhsuk-main-wrapper"
196+
id="maincontent"
197+
role="main"
198+
>
199+
<div
200+
class="nhsuk-grid-row"
201+
>
202+
<div
203+
class="nhsuk-grid-column-two-thirds"
204+
>
205+
<h1
206+
class="nhsuk-heading-xl"
207+
>
208+
Create a message plan
209+
</h1>
210+
<div
211+
data-testid="mocked-message-plan-form"
212+
/>
213+
</div>
214+
</div>
215+
</main>
216+
</DocumentFragment>
217+
`;
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { render } from '@testing-library/react';
2+
import { redirect, RedirectType } from 'next/navigation';
3+
import { MESSAGE_ORDER_OPTIONS_LIST } from 'nhs-notify-web-template-management-utils';
4+
import CreateMessagePlanPage from '@app/message-plans/create-message-plan/page';
5+
import { MessagePlanForm } from '@forms/MessagePlan/MessagePlan';
6+
import { fetchClient } from '@utils/server-features';
7+
import { NextRedirectError } from '@testhelpers/next-redirect';
8+
9+
jest.mock('next/navigation');
10+
jest.mock('@forms/MessagePlan/MessagePlan');
11+
jest.mock('@utils/server-features');
12+
13+
beforeEach(() => {
14+
jest.resetAllMocks();
15+
16+
jest.mocked(redirect).mockImplementation((url, type) => {
17+
throw new NextRedirectError(url, type);
18+
});
19+
20+
jest
21+
.mocked(MessagePlanForm)
22+
.mockImplementation(() => <div data-testid='mocked-message-plan-form' />);
23+
24+
jest
25+
.mocked(fetchClient)
26+
.mockResolvedValue({ campaignIds: ['campaign-1'], features: {} });
27+
});
28+
29+
describe('CreateMessagePlanPage', () => {
30+
test('redirects when there are no campaignIds', async () => {
31+
jest.mocked(fetchClient).mockResolvedValueOnce({ features: {} });
32+
33+
await expect(
34+
CreateMessagePlanPage({ searchParams: Promise.resolve({}) })
35+
).rejects.toMatchObject({
36+
message: 'NEXT_REDIRECT',
37+
url: '/message-plans/campaign-id-required',
38+
type: RedirectType.replace,
39+
});
40+
});
41+
42+
test('redirects when searchParams are missing', async () => {
43+
await expect(
44+
CreateMessagePlanPage({ searchParams: Promise.resolve({}) })
45+
).rejects.toMatchObject({
46+
message: 'NEXT_REDIRECT',
47+
url: '/message-plans/choose-message-order',
48+
type: RedirectType.replace,
49+
});
50+
});
51+
52+
test('redirects when messageOrder is invalid', async () => {
53+
await expect(
54+
CreateMessagePlanPage({
55+
searchParams: Promise.resolve({ messageOrder: 'invalid' }),
56+
})
57+
).rejects.toMatchObject({
58+
message: 'NEXT_REDIRECT',
59+
url: '/message-plans/choose-message-order',
60+
type: RedirectType.replace,
61+
});
62+
});
63+
64+
test.each(MESSAGE_ORDER_OPTIONS_LIST)(
65+
'renders the page when messageOrder is "%s"',
66+
async (messageOrder) => {
67+
const ui = await CreateMessagePlanPage({
68+
searchParams: Promise.resolve({ messageOrder }),
69+
});
70+
71+
const container = render(ui);
72+
73+
expect(container.asFragment()).toMatchSnapshot();
74+
75+
expect(jest.mocked(MessagePlanForm).mock.calls[0][0]).toEqual({
76+
messageOrder,
77+
campaignIds: ['campaign-1'],
78+
});
79+
}
80+
);
81+
});

0 commit comments

Comments
 (0)