Skip to content

Commit e674448

Browse files
committed
CCM-12744: tests
1 parent 42da479 commit e674448

File tree

24 files changed

+359
-123
lines changed

24 files changed

+359
-123
lines changed

frontend/src/__tests__/app/request-proof-of-template/page.test.tsx

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ describe('RequestProofPage', () => {
5050
fileName: 'a.pdf',
5151
},
5252
},
53-
lockNumber: 1,
53+
lockNumber: 0,
5454
} satisfies Partial<TemplateDto>;
5555

5656
getTemplateMock.mockResolvedValue({
@@ -63,6 +63,9 @@ describe('RequestProofPage', () => {
6363
params: Promise.resolve({
6464
templateId: 'template-id',
6565
}),
66+
searchParams: Promise.resolve({
67+
lockNumber: '42',
68+
}),
6669
});
6770

6871
expect(await generateMetadata()).toEqual({
@@ -74,7 +77,7 @@ describe('RequestProofPage', () => {
7477
templateName={state.name}
7578
templateId={state.id}
7679
channel='LETTER'
77-
lockNumber={state.lockNumber}
80+
lockNumber={42}
7881
/>
7982
);
8083
});
@@ -86,6 +89,7 @@ describe('RequestProofPage', () => {
8689
params: Promise.resolve({
8790
templateId: 'template-id',
8891
}),
92+
searchParams: Promise.resolve({ lockNumber: '42' }),
8993
});
9094

9195
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
@@ -108,6 +112,9 @@ describe('RequestProofPage', () => {
108112
params: Promise.resolve({
109113
templateId: 'template-id',
110114
}),
115+
searchParams: Promise.resolve({
116+
lockNumber: '42',
117+
}),
111118
});
112119

113120
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
@@ -122,6 +129,9 @@ describe('RequestProofPage', () => {
122129
params: Promise.resolve({
123130
templateId: 'template-id',
124131
}),
132+
searchParams: Promise.resolve({
133+
lockNumber: '42',
134+
}),
125135
});
126136

127137
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
@@ -156,6 +166,9 @@ describe('RequestProofPage', () => {
156166
params: Promise.resolve({
157167
templateId: 'template-id',
158168
}),
169+
searchParams: Promise.resolve({
170+
lockNumber: '42',
171+
}),
159172
});
160173

161174
expect(await generateMetadata()).toEqual({
@@ -164,4 +177,18 @@ describe('RequestProofPage', () => {
164177

165178
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
166179
});
180+
181+
test('should redirect to template preview page when lockNumber search parameter is missing', async () => {
182+
await RequestProofPage({
183+
params: Promise.resolve({
184+
templateId: 'template-id',
185+
}),
186+
searchParams: Promise.resolve({}),
187+
});
188+
189+
expect(redirectMock).toHaveBeenCalledWith(
190+
'/preview-letter-template/template-id',
191+
'replace'
192+
);
193+
});
167194
});

frontend/src/__tests__/app/submit-email-template/page.test.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ describe('SubmitEmailTemplatePage', () => {
4848
params: Promise.resolve({
4949
templateId: 'template-id',
5050
}),
51+
searchParams: Promise.resolve({ lockNumber: '42' }),
5152
});
5253

5354
expect(await generateMetadata()).toEqual({
@@ -58,7 +59,7 @@ describe('SubmitEmailTemplatePage', () => {
5859
templateName={state.name}
5960
templateId={state.id}
6061
channel='EMAIL'
61-
lockNumber={state.lockNumber}
62+
lockNumber={42}
6263
/>
6364
);
6465
});
@@ -70,6 +71,7 @@ describe('SubmitEmailTemplatePage', () => {
7071
params: Promise.resolve({
7172
templateId: 'template-id',
7273
}),
74+
searchParams: Promise.resolve({ lockNumber: '42' }),
7375
});
7476

7577
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
@@ -103,9 +105,24 @@ describe('SubmitEmailTemplatePage', () => {
103105
params: Promise.resolve({
104106
templateId: 'template-id',
105107
}),
108+
searchParams: Promise.resolve({ lockNumber: '42' }),
106109
});
107110

108111
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
109112
}
110113
);
114+
115+
test('it should redirect to preview page if lockNumber search param is invalid', async () => {
116+
await SubmitEmailTemplatePage({
117+
params: Promise.resolve({
118+
templateId: 'template-id',
119+
}),
120+
searchParams: Promise.resolve({}),
121+
});
122+
123+
expect(redirectMock).toHaveBeenCalledWith(
124+
'/preview-email-template/template-id',
125+
'replace'
126+
);
127+
});
111128
});

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,14 @@ describe('SubmitLetterTemplatePage', () => {
3939
params: Promise.resolve({
4040
templateId: 'template-id',
4141
}),
42+
searchParams: Promise.resolve({ lockNumber: '42' }),
4243
});
4344

4445
expect(page).toEqual(
4546
<SubmitLetterTemplate
4647
templateName={LETTER_TEMPLATE.name}
4748
templateId={LETTER_TEMPLATE.id}
48-
lockNumber={LETTER_TEMPLATE.lockNumber}
49+
lockNumber={42}
4950
/>
5051
);
5152
});
@@ -57,6 +58,7 @@ describe('SubmitLetterTemplatePage', () => {
5758
params: Promise.resolve({
5859
templateId: 'invalid-template',
5960
}),
61+
searchParams: Promise.resolve({ lockNumber: '42' }),
6062
});
6163

6264
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
@@ -89,12 +91,27 @@ describe('SubmitLetterTemplatePage', () => {
8991
params: Promise.resolve({
9092
templateId: 'template-id',
9193
}),
94+
searchParams: Promise.resolve({ lockNumber: '42' }),
9295
});
9396

9497
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
9598
}
9699
);
97100

101+
test('should redirect to template preview when lock number search parameter is invalid', async () => {
102+
await SubmitLetterTemplatePage({
103+
params: Promise.resolve({
104+
templateId: 'template-id',
105+
}),
106+
searchParams: Promise.resolve({}),
107+
});
108+
109+
expect(redirectMock).toHaveBeenCalledWith(
110+
'/preview-letter-template/template-id',
111+
'replace'
112+
);
113+
});
114+
98115
test('should generate metadata', async () => {
99116
const metadata = await generateMetadata();
100117

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

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ describe('SubmitNhsAppTemplatePage', () => {
4848
params: Promise.resolve({
4949
templateId: 'template-id',
5050
}),
51+
searchParams: Promise.resolve({
52+
lockNumber: '42',
53+
}),
5154
});
5255

5356
expect(await generateMetadata()).toEqual({
@@ -58,7 +61,7 @@ describe('SubmitNhsAppTemplatePage', () => {
5861
templateName={state.name}
5962
templateId={state.id}
6063
channel='NHS_APP'
61-
lockNumber={state.lockNumber}
64+
lockNumber={42}
6265
/>
6366
);
6467
});
@@ -70,6 +73,9 @@ describe('SubmitNhsAppTemplatePage', () => {
7073
params: Promise.resolve({
7174
templateId: 'template-id',
7275
}),
76+
searchParams: Promise.resolve({
77+
lockNumber: '42',
78+
}),
7379
});
7480

7581
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
@@ -101,9 +107,26 @@ describe('SubmitNhsAppTemplatePage', () => {
101107
params: Promise.resolve({
102108
templateId: 'template-id',
103109
}),
110+
searchParams: Promise.resolve({
111+
lockNumber: '42',
112+
}),
104113
});
105114

106115
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
107116
}
108117
);
118+
119+
test('it should redirect to preview page if lockNumber search param is invalid', async () => {
120+
await SubmitNhsAppTemplatePage({
121+
params: Promise.resolve({
122+
templateId: 'template-id',
123+
}),
124+
searchParams: Promise.resolve({}),
125+
});
126+
127+
expect(redirectMock).toHaveBeenCalledWith(
128+
'/preview-nhs-app-template/template-id',
129+
'replace'
130+
);
131+
});
109132
});

frontend/src/__tests__/app/submit-text-message-template/page.test.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ describe('SubmitSmsTemplatePage', () => {
4848
params: Promise.resolve({
4949
templateId: 'template-id',
5050
}),
51+
searchParams: Promise.resolve({ lockNumber: '42' }),
5152
});
5253

5354
expect(await generateMetadata()).toEqual({
@@ -58,7 +59,7 @@ describe('SubmitSmsTemplatePage', () => {
5859
templateName={state.name}
5960
templateId={state.id}
6061
channel='SMS'
61-
lockNumber={state.lockNumber}
62+
lockNumber={42}
6263
/>
6364
);
6465
});
@@ -70,6 +71,7 @@ describe('SubmitSmsTemplatePage', () => {
7071
params: Promise.resolve({
7172
templateId: 'invalid-template',
7273
}),
74+
searchParams: Promise.resolve({ lockNumber: '42' }),
7375
});
7476

7577
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
@@ -101,9 +103,24 @@ describe('SubmitSmsTemplatePage', () => {
101103
params: Promise.resolve({
102104
templateId: 'template-id',
103105
}),
106+
searchParams: Promise.resolve({ lockNumber: '42' }),
104107
});
105108

106109
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
107110
}
108111
);
112+
113+
test('it should redirect to preview page if lockNumber search param is invalid', async () => {
114+
await SubmitSmsTemplatePage({
115+
params: Promise.resolve({
116+
templateId: 'template-id',
117+
}),
118+
searchParams: Promise.resolve({}),
119+
});
120+
121+
expect(redirectMock).toHaveBeenCalledWith(
122+
'/preview-text-message-template/template-id',
123+
'replace'
124+
);
125+
});
109126
});

frontend/src/__tests__/utils/message-plans.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ describe('Message plans actions', () => {
419419
);
420420
expect(response).toBeUndefined();
421421
expect(loggerMock.error).toHaveBeenCalledWith(
422-
'Failed to get routing configuration',
422+
'Failed to update routing configuration',
423423
expect.objectContaining({
424424
errorMeta: expect.objectContaining({ code: 400 }),
425425
})

frontend/src/app/message-plans/choose-templates/[routingConfigId]/actions.test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ describe('removeTemplateFromMessagePlan', () => {
5555
const formData = new FormData();
5656
formData.set('routingConfigId', routingConfigId);
5757
formData.set('channel', 'EMAIL');
58+
formData.set('lockNumber', '42');
5859

5960
await removeTemplateFromMessagePlan(formData);
6061

@@ -73,7 +74,8 @@ describe('removeTemplateFromMessagePlan', () => {
7374
defaultTemplateId: 'template-2',
7475
}),
7576
],
76-
})
77+
}),
78+
42
7779
);
7880
});
7981

@@ -84,6 +86,7 @@ describe('removeTemplateFromMessagePlan', () => {
8486
const formData = new FormData();
8587
formData.set('routingConfigId', routingConfigId);
8688
formData.set('channel', 'EMAIL');
89+
formData.set('lockNumber', '42');
8790

8891
await removeTemplateFromMessagePlan(formData);
8992

@@ -98,6 +101,7 @@ describe('removeTemplateFromMessagePlan', () => {
98101
const formData = new FormData();
99102
formData.set('routingConfigId', routingConfigId);
100103
formData.set('channel', 'EMAIL');
104+
formData.set('lockNumber', '42');
101105

102106
await expect(removeTemplateFromMessagePlan(formData)).rejects.toThrow(
103107
/not found/
@@ -116,6 +120,7 @@ describe('removeTemplateFromMessagePlan', () => {
116120
const formData = new FormData();
117121
formData.set('routingConfigId', 'invalid-id');
118122
formData.set('channel', 'test');
123+
formData.set('lockNumber', '42');
119124

120125
await expect(removeTemplateFromMessagePlan(formData)).rejects.toThrow(
121126
/Invalid form data/

frontend/src/app/submit-email-template/[templateId]/page.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import { Metadata } from 'next';
44
import { redirect, RedirectType } from 'next/navigation';
5+
import { $LockNumber } from 'nhs-notify-backend-client';
56
import { SubmitDigitalTemplate } from '@forms/SubmitTemplate/SubmitDigitalTemplate';
67
import {
78
TemplatePageProps,
@@ -21,6 +22,17 @@ export async function generateMetadata(): Promise<Metadata> {
2122
const SubmitEmailTemplatePage = async (props: TemplatePageProps) => {
2223
const { templateId } = await props.params;
2324

25+
const searchParams = await props.searchParams;
26+
27+
const lockNumberResult = $LockNumber.safeParse(searchParams.lockNumber);
28+
29+
if (!lockNumberResult.success) {
30+
return redirect(
31+
`/preview-email-template/${templateId}`,
32+
RedirectType.replace
33+
);
34+
}
35+
2436
const template = await getTemplate(templateId);
2537

2638
const validatedTemplate = validateEmailTemplate(template);
@@ -33,7 +45,7 @@ const SubmitEmailTemplatePage = async (props: TemplatePageProps) => {
3345
<SubmitDigitalTemplate
3446
templateName={validatedTemplate.name}
3547
templateId={validatedTemplate.id}
36-
lockNumber={validatedTemplate.lockNumber}
48+
lockNumber={lockNumberResult.data}
3749
channel='EMAIL'
3850
/>
3951
);

0 commit comments

Comments
 (0)