Skip to content

Commit dd39c9f

Browse files
committed
CCM-10424 Add redirect from create letter and unit tests
1 parent cea0012 commit dd39c9f

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed

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

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,102 @@
22
* @jest-environment node
33
*/
44
import CreateLetterTemplatePage from '@app/create-letter-template/page';
5+
import { getSessionServer } from '@utils/amplify-utils';
6+
import { fetchClient } from '@utils/server-features';
7+
import { redirect, RedirectType } from 'next/navigation';
8+
9+
jest.mock('next/navigation');
10+
jest.mock('@utils/amplify-utils');
11+
jest.mock('@utils/server-features');
12+
13+
const mockGetSessionServer = jest.mocked(getSessionServer);
14+
const mockFetchClient = jest.mocked(fetchClient);
515

616
describe('CreateLetterTemplatePage', () => {
717
beforeEach(() => {
818
jest.resetAllMocks();
919
});
1020

1121
it('should render CreateLetterTemplatePage', async () => {
22+
mockGetSessionServer.mockResolvedValueOnce({
23+
accessToken: 'mocktoken',
24+
clientId: 'client1',
25+
userSub: 'sub',
26+
});
27+
mockFetchClient.mockResolvedValueOnce({
28+
data: {
29+
campaignId: 'campaign2',
30+
features: {},
31+
},
32+
});
33+
1234
const page = await CreateLetterTemplatePage();
1335

1436
expect(page).toMatchSnapshot();
1537
});
38+
39+
it('should check client ID and campaign ID', async () => {
40+
mockGetSessionServer.mockResolvedValueOnce({
41+
accessToken: 'mocktoken',
42+
clientId: 'client1',
43+
userSub: 'sub',
44+
});
45+
mockFetchClient.mockResolvedValueOnce({
46+
data: {
47+
campaignId: 'campaign2',
48+
features: {},
49+
},
50+
});
51+
52+
await CreateLetterTemplatePage();
53+
54+
expect(mockGetSessionServer).toHaveBeenCalled();
55+
expect(mockFetchClient).toHaveBeenCalled();
56+
});
57+
58+
it('should redirect to error page when client ID is not present', async () => {
59+
const mockRedirect = jest.mocked(redirect);
60+
61+
mockGetSessionServer.mockResolvedValueOnce({
62+
accessToken: 'mocktoken',
63+
clientId: undefined,
64+
userSub: 'sub',
65+
});
66+
mockFetchClient.mockResolvedValueOnce({
67+
data: {
68+
campaignId: 'campaign2',
69+
features: {},
70+
},
71+
});
72+
73+
await CreateLetterTemplatePage();
74+
75+
expect(mockRedirect).toHaveBeenCalledWith(
76+
'/create-letter-template/client-id-and-campaign-id-required',
77+
RedirectType.push
78+
);
79+
});
80+
81+
it('should redirect to error page when campaign ID is not present', async () => {
82+
const mockRedirect = jest.mocked(redirect);
83+
84+
mockGetSessionServer.mockResolvedValueOnce({
85+
accessToken: 'mocktoken',
86+
clientId: 'client2',
87+
userSub: 'sub',
88+
});
89+
mockFetchClient.mockResolvedValueOnce({
90+
data: {
91+
campaignId: undefined,
92+
features: {},
93+
},
94+
});
95+
96+
await CreateLetterTemplatePage();
97+
98+
expect(mockRedirect).toHaveBeenCalledWith(
99+
'/create-letter-template/client-id-and-campaign-id-required',
100+
RedirectType.push
101+
);
102+
});
16103
});

frontend/src/app/create-letter-template/page.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { CreateLetterTemplate } from 'nhs-notify-web-template-management-utils';
22
import { LetterTemplateForm } from '@forms/LetterTemplateForm/LetterTemplateForm';
3+
import { getSessionServer } from '@utils/amplify-utils';
4+
import { redirect, RedirectType } from 'next/navigation';
5+
import { fetchClient } from '@utils/server-features';
36

47
const CreateLetterTemplatePage = async () => {
58
const initialState: CreateLetterTemplate = {
@@ -9,6 +12,25 @@ const CreateLetterTemplatePage = async () => {
912
language: 'en',
1013
};
1114

15+
const sessionServer = await getSessionServer();
16+
const { accessToken, clientId } = sessionServer;
17+
18+
if (!accessToken || !clientId)
19+
return redirect(
20+
'/create-letter-template/client-id-and-campaign-id-required',
21+
RedirectType.push
22+
);
23+
24+
const clientConfiguration = await fetchClient(accessToken);
25+
26+
const campaignId = clientConfiguration?.data?.campaignId;
27+
28+
if (!clientConfiguration || clientConfiguration.error || !campaignId)
29+
return redirect(
30+
'/create-letter-template/client-id-and-campaign-id-required',
31+
RedirectType.push
32+
);
33+
1234
return <LetterTemplateForm initialState={initialState} />;
1335
};
1436

0 commit comments

Comments
 (0)