Skip to content

Commit f3d5d3b

Browse files
CCM-11537: Add separate preview pages
1 parent 1f6694d commit f3d5d3b

File tree

49 files changed

+1124
-131
lines changed

Some content is hidden

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

49 files changed

+1124
-131
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,7 @@ lambdas/backend-api/src/email/email-template.json
9393
# vscode
9494
.vscode/settings.local.json
9595

96+
# github
97+
.github/copilot-instructions.md
98+
9699
test-runs

frontend/src/__tests__/app/message-plans/choose-email-template/__snapshots__/page.test.tsx.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ exports[`ChooseEmailTemplate page renders Email template selection 1`] = `
212212
<a
213213
aria-label="Preview"
214214
data-testid="preview-link"
215-
href="/preview-submitted-email-template/email-template-id?sourcePage=message-plans%2Fchoose-email-template%2Ftestid"
215+
href="/message-plans/choose-email-template/fbb81055-79b9-4759-ac07-d191ae57be34/preview-template/email-template-id"
216216
id="preview-template-link-0"
217217
>
218218
Preview

frontend/src/__tests__/app/message-plans/choose-email-template/page.test.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { EMAIL_TEMPLATE, ROUTING_CONFIG } from '@testhelpers/helpers';
55
import { render } from '@testing-library/react';
66
import { getTemplates } from '@utils/form-actions';
77
import { getRoutingConfig } from '@utils/message-plans';
8-
import { redirect, usePathname } from 'next/navigation';
8+
import { redirect } from 'next/navigation';
99

1010
jest.mock('@utils/message-plans');
1111
jest.mock('@utils/form-actions');
@@ -14,9 +14,6 @@ jest.mock('next/navigation');
1414
const getRoutingConfigMock = jest.mocked(getRoutingConfig);
1515
const getTemplatesMock = jest.mocked(getTemplates);
1616
const redirectMock = jest.mocked(redirect);
17-
jest
18-
.mocked(usePathname)
19-
.mockReturnValue('message-plans/choose-email-template/testid');
2017

2118
describe('ChooseEmailTemplate page', () => {
2219
it('should redirect to invalid page with invalid routing config id', async () => {
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`PreviewEmailTemplateFromMessagePlan page renders Email template preview 1`] = `
4+
<DocumentFragment>
5+
<a
6+
class="nhsuk-back-link"
7+
href="/message-plans/choose-email-template/fbb81055-79b9-4759-ac07-d191ae57be34"
8+
>
9+
Go back
10+
</a>
11+
<main
12+
class="nhsuk-main-wrapper"
13+
id="maincontent"
14+
role="main"
15+
>
16+
<div
17+
class="nhsuk-grid-row"
18+
>
19+
<div
20+
class="nhsuk-grid-column-full"
21+
>
22+
<div
23+
class="nhsuk-u-reading-width"
24+
>
25+
<span
26+
class="nhsuk-caption-l"
27+
>
28+
Template
29+
</span>
30+
<h1
31+
class="preview__heading"
32+
data-testid="preview-message__heading"
33+
>
34+
email template name
35+
</h1>
36+
</div>
37+
<div
38+
class="nhsuk-width-container nhsuk-u-margin-bottom-6 nhsuk-body-m"
39+
>
40+
<dl
41+
class="nhsuk-summary-list nhsuk-u-margin-bottom-4 preview"
42+
>
43+
<div
44+
class="nhsuk-summary-list__row"
45+
>
46+
<dt
47+
class="nhsuk-summary-list__key"
48+
>
49+
Template ID
50+
</dt>
51+
<dd
52+
class="nhsuk-summary-list__value"
53+
>
54+
email-template-id
55+
</dd>
56+
</div>
57+
<div
58+
class="nhsuk-summary-list__row"
59+
>
60+
<dt
61+
class="nhsuk-summary-list__key"
62+
>
63+
Type
64+
</dt>
65+
<dd
66+
class="nhsuk-summary-list__value"
67+
>
68+
Email
69+
</dd>
70+
</div>
71+
</dl>
72+
<dl
73+
class="nhsuk-summary-list nhsuk-u-margin-bottom-4 preview"
74+
>
75+
<div
76+
class="nhsuk-summary-list__row"
77+
>
78+
<dt
79+
class="nhsuk-summary-list__key"
80+
>
81+
<div
82+
data-testid="preview__heading-0"
83+
id="preview-heading-subject"
84+
>
85+
Subject
86+
</div>
87+
</dt>
88+
<dd
89+
class="nhsuk-summary-list__value"
90+
>
91+
<div
92+
class="preview__content"
93+
data-testid="preview__content-0"
94+
id="preview-content-subject"
95+
>
96+
subject
97+
</div>
98+
</dd>
99+
</div>
100+
<div
101+
class="nhsuk-summary-list__row"
102+
>
103+
<dt
104+
class="nhsuk-summary-list__key"
105+
>
106+
<div
107+
data-testid="preview__heading-1"
108+
id="preview-heading-message"
109+
>
110+
Message
111+
</div>
112+
</dt>
113+
<dd
114+
class="nhsuk-summary-list__value"
115+
>
116+
<div
117+
class="preview__content"
118+
data-testid="preview__content-1"
119+
id="preview-content-message"
120+
>
121+
<p>
122+
message
123+
</p>
124+
125+
126+
</div>
127+
</dd>
128+
</div>
129+
</dl>
130+
</div>
131+
<p>
132+
<a
133+
href="/message-plans/choose-email-template/fbb81055-79b9-4759-ac07-d191ae57be34"
134+
>
135+
Go back
136+
</a>
137+
</p>
138+
</div>
139+
</div>
140+
</main>
141+
</DocumentFragment>
142+
`;
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import PreviewEmailTemplateFromMessagePlan, {
2+
generateMetadata,
3+
} from '@app/message-plans/choose-email-template/[routingConfigId]/preview-template/[templateId]/page';
4+
import { EMAIL_TEMPLATE, ROUTING_CONFIG } from '@testhelpers/helpers';
5+
import { render } from '@testing-library/react';
6+
import { getTemplate } from '@utils/form-actions';
7+
import { redirect } from 'next/navigation';
8+
9+
jest.mock('@utils/form-actions');
10+
jest.mock('next/navigation');
11+
12+
const getTemplateMock = jest.mocked(getTemplate);
13+
const redirectMock = jest.mocked(redirect);
14+
15+
describe('PreviewEmailTemplateFromMessagePlan page', () => {
16+
it('should redirect to invalid page with invalid template id', async () => {
17+
getTemplateMock.mockResolvedValueOnce(undefined);
18+
19+
await PreviewEmailTemplateFromMessagePlan({
20+
params: Promise.resolve({
21+
routingConfigId: 'routing-config-id',
22+
templateId: 'invalid-template-id',
23+
}),
24+
});
25+
26+
expect(getTemplateMock).toHaveBeenCalledWith('invalid-template-id');
27+
28+
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
29+
});
30+
31+
it('renders Email template preview', async () => {
32+
getTemplateMock.mockResolvedValueOnce({
33+
...EMAIL_TEMPLATE,
34+
templateStatus: 'SUBMITTED',
35+
});
36+
37+
const page = await PreviewEmailTemplateFromMessagePlan({
38+
params: Promise.resolve({
39+
routingConfigId: ROUTING_CONFIG.id,
40+
templateId: EMAIL_TEMPLATE.id,
41+
}),
42+
});
43+
44+
const container = render(page);
45+
46+
expect(getTemplateMock).toHaveBeenCalledWith(EMAIL_TEMPLATE.id);
47+
48+
expect(await generateMetadata()).toEqual({
49+
title: 'Preview email template - NHS Notify',
50+
});
51+
expect(container.asFragment()).toMatchSnapshot();
52+
});
53+
});

frontend/src/__tests__/app/message-plans/choose-nhs-app-template/__snapshots__/page.test.tsx.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ exports[`ChooseNHSAppTemplate page renders NHS App template selection 1`] = `
212212
<a
213213
aria-label="Preview"
214214
data-testid="preview-link"
215-
href="/preview-submitted-nhs-app-template/app-template-id?sourcePage=message-plans%2Fchoose-nhs-app-template%2Ftestid"
215+
href="/message-plans/choose-nhs-app-template/fbb81055-79b9-4759-ac07-d191ae57be34/preview-template/app-template-id"
216216
id="preview-template-link-0"
217217
>
218218
Preview
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`PreviewNhsAppTemplateFromMessagePlan page renders NHS App template preview 1`] = `
4+
<DocumentFragment>
5+
<a
6+
class="nhsuk-back-link"
7+
href="/message-plans/choose-nhs-app-template/fbb81055-79b9-4759-ac07-d191ae57be34"
8+
>
9+
Go back
10+
</a>
11+
<main
12+
class="nhsuk-main-wrapper"
13+
id="maincontent"
14+
role="main"
15+
>
16+
<div
17+
class="nhsuk-grid-row"
18+
>
19+
<div
20+
class="nhsuk-grid-column-full"
21+
>
22+
<div
23+
class="nhsuk-u-reading-width"
24+
>
25+
<span
26+
class="nhsuk-caption-l"
27+
>
28+
Template
29+
</span>
30+
<h1
31+
class="preview__heading"
32+
data-testid="preview-message__heading"
33+
>
34+
app template name
35+
</h1>
36+
</div>
37+
<div
38+
class="nhsuk-width-container nhsuk-u-margin-bottom-6 nhsuk-body-m"
39+
>
40+
<dl
41+
class="nhsuk-summary-list nhsuk-u-margin-bottom-4 preview"
42+
>
43+
<div
44+
class="nhsuk-summary-list__row"
45+
>
46+
<dt
47+
class="nhsuk-summary-list__key"
48+
>
49+
Template ID
50+
</dt>
51+
<dd
52+
class="nhsuk-summary-list__value"
53+
>
54+
app-template-id
55+
</dd>
56+
</div>
57+
<div
58+
class="nhsuk-summary-list__row"
59+
>
60+
<dt
61+
class="nhsuk-summary-list__key"
62+
>
63+
Type
64+
</dt>
65+
<dd
66+
class="nhsuk-summary-list__value"
67+
>
68+
NHS App message
69+
</dd>
70+
</div>
71+
</dl>
72+
<dl
73+
class="nhsuk-summary-list nhsuk-u-margin-bottom-4 preview"
74+
>
75+
<div
76+
class="nhsuk-summary-list__row"
77+
>
78+
<dt
79+
class="nhsuk-summary-list__key"
80+
>
81+
<div
82+
data-testid="preview__heading-0"
83+
id="preview-heading-message"
84+
>
85+
Message
86+
</div>
87+
</dt>
88+
<dd
89+
class="nhsuk-summary-list__value"
90+
>
91+
<div
92+
class="preview__content"
93+
data-testid="preview__content-0"
94+
id="preview-content-message"
95+
>
96+
<p>
97+
message
98+
</p>
99+
100+
101+
</div>
102+
</dd>
103+
</div>
104+
</dl>
105+
</div>
106+
<p>
107+
<a
108+
href="/message-plans/choose-nhs-app-template/fbb81055-79b9-4759-ac07-d191ae57be34"
109+
>
110+
Go back
111+
</a>
112+
</p>
113+
</div>
114+
</div>
115+
</main>
116+
</DocumentFragment>
117+
`;

0 commit comments

Comments
 (0)