generated from NHSDigital/nhs-notify-repository-template
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpage.test.tsx
More file actions
81 lines (68 loc) · 2.46 KB
/
page.test.tsx
File metadata and controls
81 lines (68 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import { render } from '@testing-library/react';
import { redirect, RedirectType } from 'next/navigation';
import { MESSAGE_ORDER_OPTIONS_LIST } from 'nhs-notify-web-template-management-utils';
import CreateMessagePlanPage from '@app/message-plans/create-message-plan/page';
import { MessagePlanForm } from '@forms/MessagePlan/MessagePlan';
import { fetchClient } from '@utils/server-features';
import { NextRedirectError } from '@testhelpers/next-redirect';
jest.mock('next/navigation');
jest.mock('@forms/MessagePlan/MessagePlan');
jest.mock('@utils/server-features');
beforeEach(() => {
jest.resetAllMocks();
jest.mocked(redirect).mockImplementation((url, type) => {
throw new NextRedirectError(url, type);
});
jest
.mocked(MessagePlanForm)
.mockImplementation(() => <div data-testid='mocked-message-plan-form' />);
jest
.mocked(fetchClient)
.mockResolvedValue({ campaignIds: ['campaign-1'], features: {} });
});
describe('CreateMessagePlanPage', () => {
test('redirects when there are no campaignIds', async () => {
jest.mocked(fetchClient).mockResolvedValueOnce({ features: {} });
await expect(
CreateMessagePlanPage({ searchParams: Promise.resolve({}) })
).rejects.toMatchObject({
message: 'NEXT_REDIRECT',
url: '/message-plans/campaign-id-required',
type: RedirectType.replace,
});
});
test('redirects when searchParams are missing', async () => {
await expect(
CreateMessagePlanPage({ searchParams: Promise.resolve({}) })
).rejects.toMatchObject({
message: 'NEXT_REDIRECT',
url: '/message-plans/choose-message-order',
type: RedirectType.replace,
});
});
test('redirects when messageOrder is invalid', async () => {
await expect(
CreateMessagePlanPage({
searchParams: Promise.resolve({ messageOrder: 'invalid' }),
})
).rejects.toMatchObject({
message: 'NEXT_REDIRECT',
url: '/message-plans/choose-message-order',
type: RedirectType.replace,
});
});
test.each(MESSAGE_ORDER_OPTIONS_LIST)(
'renders the page when messageOrder is "%s"',
async (messageOrder) => {
const ui = await CreateMessagePlanPage({
searchParams: Promise.resolve({ messageOrder }),
});
const container = render(ui);
expect(container.asFragment()).toMatchSnapshot();
expect(jest.mocked(MessagePlanForm).mock.calls[0][0]).toEqual({
messageOrder,
campaignIds: ['campaign-1'],
});
}
);
});