Skip to content

Commit ceabfc9

Browse files
committed
Merge branch 'main' into feature/CCM-8125_review-supported-markdown
2 parents 73a5f8b + 08f29f0 commit ceabfc9

File tree

199 files changed

+3093
-929
lines changed

Some content is hidden

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

199 files changed

+3093
-929
lines changed

frontend/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"jsonwebtoken": "^9.0.2",
1010
"jwt-decode": "^4.0.0",
1111
"markdown-it": "^13.0.2",
12+
"markdown-to-jsx": "^7.7.10",
1213
"next": "^15.2.3",
1314
"next-client-cookies": "^2.0.1",
1415
"nhs-notify-backend-client": "^0.0.1",
@@ -19,7 +20,7 @@
1920
"react": "^19.0.0",
2021
"react-dom": "^19.0.0",
2122
"react-idle-timer": "^5.7.2",
22-
"zod": "^3.24.2"
23+
"zod": "^4.0.5"
2324
},
2425
"devDependencies": {
2526
"@testing-library/jest-dom": "^6.6.3",

frontend/src/__tests__/app/choose-a-template-type/__snapshots__/page.test.tsx.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ exports[`ChooseATemplateTypePage 1`] = `
88
<a
99
class="nhsuk-back-link__link"
1010
data-testid="back-to-templates-link"
11-
href="/templates/message-templates"
11+
href="/message-templates"
1212
>
1313
<svg
1414
aria-hidden="true"
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[`ClientIdAndCampaignIdRequiredPage 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 letter templates 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 client ID and campaign ID
31+
</p>
32+
</div>
33+
<p>
34+
<a
35+
data-testid="back-to-choose-template-type-link"
36+
href="/choose-a-template-type"
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 ClientIdAndCampaignIdRequiredPage from '@app/create-letter-template/client-id-and-campaign-id-required/page';
2+
import { render } from '@testing-library/react';
3+
4+
test('ClientIdAndCampaignIdRequiredPage', async () => {
5+
const container = render(<ClientIdAndCampaignIdRequiredPage />);
6+
7+
expect(container.asFragment()).toMatchSnapshot();
8+
});

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.replace
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.replace
101+
);
102+
});
16103
});

frontend/src/__tests__/app/invalid-template/__snapshots__/page.test.tsx.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ exports[`InvalidTemplatePage 1`] = `
88
role="main"
99
>
1010
<div
11-
class="nhsuk-grid-row"
11+
class="nhsuk-grid-row nhsuk-u-padding-left-3 nhsuk-u-padding-right-3"
1212
data-testid="page-content-wrapper"
1313
>
1414
<h1

frontend/src/__tests__/components/forms/ChooseTemplate/__snapshots__/ChooseTemplate.test.tsx.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ exports[`Choose template page Client-side validation triggers 1`] = `
88
<a
99
class="nhsuk-back-link__link"
1010
data-testid="back-to-templates-link"
11-
href="/templates/message-templates"
11+
href="/message-templates"
1212
>
1313
<svg
1414
aria-hidden="true"
@@ -222,7 +222,7 @@ exports[`Choose template page renders error component 1`] = `
222222
<a
223223
class="nhsuk-back-link__link"
224224
data-testid="back-to-templates-link"
225-
href="/templates/message-templates"
225+
href="/message-templates"
226226
>
227227
<svg
228228
aria-hidden="true"
@@ -425,7 +425,7 @@ exports[`Choose template page selects one radio button at a time 1`] = `
425425
<a
426426
class="nhsuk-back-link__link"
427427
data-testid="back-to-templates-link"
428-
href="/templates/message-templates"
428+
href="/message-templates"
429429
>
430430
<svg
431431
aria-hidden="true"

frontend/src/__tests__/components/forms/CopyTemplate/__snapshots__/CopyTemplate.test.tsx.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ exports[`Choose template page Client-side validation triggers 1`] = `
88
<a
99
class="nhsuk-back-link__link"
1010
data-testid="back-to-templates-link"
11-
href="/templates/message-templates"
11+
href="/message-templates"
1212
id="back-link"
1313
>
1414
<svg
@@ -204,7 +204,7 @@ exports[`Choose template page renders error component 1`] = `
204204
<a
205205
class="nhsuk-back-link__link"
206206
data-testid="back-to-templates-link"
207-
href="/templates/message-templates"
207+
href="/message-templates"
208208
id="back-link"
209209
>
210210
<svg
@@ -389,7 +389,7 @@ exports[`Choose template page selects one radio button at a time 1`] = `
389389
<a
390390
class="nhsuk-back-link__link"
391391
data-testid="back-to-templates-link"
392-
href="/templates/message-templates"
392+
href="/message-templates"
393393
id="back-link"
394394
>
395395
<svg

frontend/src/__tests__/components/forms/EmailTemplateForm/__snapshots__/EmailTemplateForm.test.tsx.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ exports[`renders page one error 1`] = `
631631
<a
632632
class="nhsuk-back-link__link"
633633
data-testid="back-to-templates-link"
634-
href="/templates/choose-a-template-type"
634+
href="/choose-a-template-type"
635635
>
636636
<svg
637637
aria-hidden="true"
@@ -1324,7 +1324,7 @@ exports[`renders page with multiple errors 1`] = `
13241324
<a
13251325
class="nhsuk-back-link__link"
13261326
data-testid="back-to-templates-link"
1327-
href="/templates/choose-a-template-type"
1327+
href="/choose-a-template-type"
13281328
>
13291329
<svg
13301330
aria-hidden="true"
@@ -2047,7 +2047,7 @@ exports[`renders page with preloaded field values 1`] = `
20472047
<a
20482048
class="nhsuk-back-link__link"
20492049
data-testid="back-to-templates-link"
2050-
href="/templates/choose-a-template-type"
2050+
href="/choose-a-template-type"
20512051
>
20522052
<svg
20532053
aria-hidden="true"

frontend/src/__tests__/components/forms/LetterTemplateForm.test.tsx/__snapshots__/LetterTemplateForm.test.tsx.snap

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ exports[`Client-side validation triggers 1`] = `
88
<a
99
class="nhsuk-back-link__link"
1010
data-testid="back-to-templates-link"
11-
href="/templates/choose-a-template-type"
11+
href="/choose-a-template-type"
1212
>
1313
<svg
1414
aria-hidden="true"
@@ -486,7 +486,7 @@ exports[`hides right-to-left language warning when language changes 1`] = `
486486
<a
487487
class="nhsuk-back-link__link"
488488
data-testid="back-to-templates-link"
489-
href="/templates/choose-a-template-type"
489+
href="/choose-a-template-type"
490490
>
491491
<svg
492492
aria-hidden="true"
@@ -913,7 +913,7 @@ exports[`renders page one error 1`] = `
913913
<a
914914
class="nhsuk-back-link__link"
915915
data-testid="back-to-templates-link"
916-
href="/templates/choose-a-template-type"
916+
href="/choose-a-template-type"
917917
>
918918
<svg
919919
aria-hidden="true"
@@ -1397,7 +1397,7 @@ exports[`renders page with multiple errors 1`] = `
13971397
<a
13981398
class="nhsuk-back-link__link"
13991399
data-testid="back-to-templates-link"
1400-
href="/templates/choose-a-template-type"
1400+
href="/choose-a-template-type"
14011401
>
14021402
<svg
14031403
aria-hidden="true"
@@ -1917,7 +1917,7 @@ exports[`renders page with preloaded field values 1`] = `
19171917
<a
19181918
class="nhsuk-back-link__link"
19191919
data-testid="back-to-templates-link"
1920-
href="/templates/choose-a-template-type"
1920+
href="/choose-a-template-type"
19211921
>
19221922
<svg
19231923
aria-hidden="true"
@@ -2370,7 +2370,7 @@ exports[`shows right-to-left language warning when language changes 1`] = `
23702370
<a
23712371
class="nhsuk-back-link__link"
23722372
data-testid="back-to-templates-link"
2373-
href="/templates/choose-a-template-type"
2373+
href="/choose-a-template-type"
23742374
>
23752375
<svg
23762376
aria-hidden="true"

0 commit comments

Comments
 (0)