Skip to content

Commit 38f60a6

Browse files
CCM-13415: Validate unsupported personalisation in digital templates (#776)
Co-authored-by: Alex Nuttall <[email protected]>
1 parent 7351b82 commit 38f60a6

File tree

28 files changed

+754
-169
lines changed

28 files changed

+754
-169
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
EmailTemplate,
66
} from 'nhs-notify-web-template-management-utils';
77
import { EmailTemplateForm } from '@forms/EmailTemplateForm/EmailTemplateForm';
8+
import { ErrorCodes } from '@utils/error-codes';
89

910
jest.mock('@utils/amplify-utils');
1011

@@ -91,7 +92,10 @@ test('renders page with multiple errors', () => {
9192
fieldErrors: {
9293
emailTemplateName: ['Template name error'],
9394
emailTemplateSubjectLine: ['Template subject line error'],
94-
emailTemplateMessage: ['Template message error'],
95+
emailTemplateMessage: [
96+
'Template message error',
97+
ErrorCodes.MESSAGE_CONTAINS_INVALID_PERSONALISATION_FIELD_NAME,
98+
],
9599
},
96100
},
97101
name: '',

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

Lines changed: 104 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ exports[`Client-side validation triggers 1`] = `
167167
<textarea
168168
autocomplete="off"
169169
class="nhsuk-textarea"
170-
data-testid="emailTemplateMessage-input"
171170
id="emailTemplateMessage"
172171
name="emailTemplateMessage"
173172
rows="12"
@@ -254,9 +253,6 @@ exports[`Client-side validation triggers 1`] = `
254253
<li>
255254
((nhsNumber))
256255
</li>
257-
<li>
258-
((date))
259-
</li>
260256
</ul>
261257
<p>
262258
Make sure your personalisation fields exactly match the PDS personalisation fields. This includes using the correct order of upper and lower case letters.
@@ -753,16 +749,6 @@ exports[`renders page one error 1`] = `
753749
Template name error
754750
</a>
755751
</li>
756-
<li>
757-
<a
758-
href="#emailTemplateSubjectLine"
759-
/>
760-
</li>
761-
<li>
762-
<a
763-
href="#emailTemplateMessage"
764-
/>
765-
</li>
766752
</ul>
767753
</div>
768754
<h1
@@ -917,7 +903,6 @@ exports[`renders page one error 1`] = `
917903
<textarea
918904
autocomplete="off"
919905
class="nhsuk-textarea"
920-
data-testid="emailTemplateMessage-input"
921906
id="emailTemplateMessage"
922907
name="emailTemplateMessage"
923908
rows="12"
@@ -1002,9 +987,6 @@ exports[`renders page one error 1`] = `
1002987
<li>
1003988
((nhsNumber))
1004989
</li>
1005-
<li>
1006-
((date))
1007-
</li>
1008990
</ul>
1009991
<p>
1010992
Make sure your personalisation fields exactly match the PDS personalisation fields. This includes using the correct order of upper and lower case letters.
@@ -1515,6 +1497,61 @@ exports[`renders page with multiple errors 1`] = `
15151497
Template message error
15161498
</a>
15171499
</li>
1500+
<li>
1501+
<a
1502+
href="#emailTemplateMessage"
1503+
>
1504+
<div
1505+
class="nhsuk-u-margin-top-1 nhsuk-u-margin-bottom-4"
1506+
>
1507+
You cannot use the following custom personalisation fields in your message:
1508+
</div>
1509+
<ul
1510+
class="nhsuk-list nhsuk-list--bullet"
1511+
>
1512+
<li
1513+
class="nhsuk-u-margin-bottom-0"
1514+
>
1515+
date
1516+
</li>
1517+
<li
1518+
class="nhsuk-u-margin-bottom-0"
1519+
>
1520+
address_line_1
1521+
</li>
1522+
<li
1523+
class="nhsuk-u-margin-bottom-0"
1524+
>
1525+
address_line_2
1526+
</li>
1527+
<li
1528+
class="nhsuk-u-margin-bottom-0"
1529+
>
1530+
address_line_3
1531+
</li>
1532+
<li
1533+
class="nhsuk-u-margin-bottom-0"
1534+
>
1535+
address_line_4
1536+
</li>
1537+
<li
1538+
class="nhsuk-u-margin-bottom-0"
1539+
>
1540+
address_line_5
1541+
</li>
1542+
<li
1543+
class="nhsuk-u-margin-bottom-0"
1544+
>
1545+
address_line_6
1546+
</li>
1547+
<li
1548+
class="nhsuk-u-margin-bottom-0"
1549+
>
1550+
address_line_7
1551+
</li>
1552+
</ul>
1553+
</a>
1554+
</li>
15181555
</ul>
15191556
</div>
15201557
<h1
@@ -1688,12 +1725,60 @@ exports[`renders page with multiple errors 1`] = `
16881725
Error:
16891726
</span>
16901727
Template message error
1728+
<div
1729+
class="nhsuk-u-margin-top-1 nhsuk-u-margin-bottom-4"
1730+
>
1731+
You cannot use the following custom personalisation fields in your message:
1732+
</div>
1733+
<ul
1734+
class="nhsuk-list nhsuk-list--bullet"
1735+
>
1736+
<li
1737+
class="nhsuk-u-margin-bottom-0"
1738+
>
1739+
date
1740+
</li>
1741+
<li
1742+
class="nhsuk-u-margin-bottom-0"
1743+
>
1744+
address_line_1
1745+
</li>
1746+
<li
1747+
class="nhsuk-u-margin-bottom-0"
1748+
>
1749+
address_line_2
1750+
</li>
1751+
<li
1752+
class="nhsuk-u-margin-bottom-0"
1753+
>
1754+
address_line_3
1755+
</li>
1756+
<li
1757+
class="nhsuk-u-margin-bottom-0"
1758+
>
1759+
address_line_4
1760+
</li>
1761+
<li
1762+
class="nhsuk-u-margin-bottom-0"
1763+
>
1764+
address_line_5
1765+
</li>
1766+
<li
1767+
class="nhsuk-u-margin-bottom-0"
1768+
>
1769+
address_line_6
1770+
</li>
1771+
<li
1772+
class="nhsuk-u-margin-bottom-0"
1773+
>
1774+
address_line_7
1775+
</li>
1776+
</ul>
16911777
</span>
16921778
<textarea
16931779
aria-describedby="emailTemplateMessage--error-message"
16941780
autocomplete="off"
16951781
class="nhsuk-textarea nhsuk-textarea--error"
1696-
data-testid="emailTemplateMessage-input"
16971782
id="emailTemplateMessage"
16981783
name="emailTemplateMessage"
16991784
rows="12"
@@ -1778,9 +1863,6 @@ exports[`renders page with multiple errors 1`] = `
17781863
<li>
17791864
((nhsNumber))
17801865
</li>
1781-
<li>
1782-
((date))
1783-
</li>
17841866
</ul>
17851867
<p>
17861868
Make sure your personalisation fields exactly match the PDS personalisation fields. This includes using the correct order of upper and lower case letters.
@@ -2394,7 +2476,6 @@ exports[`renders page with preloaded field values 1`] = `
23942476
<textarea
23952477
autocomplete="off"
23962478
class="nhsuk-textarea"
2397-
data-testid="emailTemplateMessage-input"
23982479
id="emailTemplateMessage"
23992480
name="emailTemplateMessage"
24002481
rows="12"
@@ -2481,9 +2562,6 @@ exports[`renders page with preloaded field values 1`] = `
24812562
<li>
24822563
((nhsNumber))
24832564
</li>
2484-
<li>
2485-
((date))
2486-
</li>
24872565
</ul>
24882566
<p>
24892567
Make sure your personalisation fields exactly match the PDS personalisation fields. This includes using the correct order of upper and lower case letters.
@@ -3090,7 +3168,6 @@ exports[`renders page without back link for initial state with id - edit mode 1`
30903168
<textarea
30913169
autocomplete="off"
30923170
class="nhsuk-textarea"
3093-
data-testid="emailTemplateMessage-input"
30943171
id="emailTemplateMessage"
30953172
name="emailTemplateMessage"
30963173
rows="12"
@@ -3177,9 +3254,6 @@ exports[`renders page without back link for initial state with id - edit mode 1`
31773254
<li>
31783255
((nhsNumber))
31793256
</li>
3180-
<li>
3181-
((date))
3182-
</li>
31833257
</ul>
31843258
<p>
31853259
Make sure your personalisation fields exactly match the PDS personalisation fields. This includes using the correct order of upper and lower case letters.

frontend/src/__tests__/components/forms/EmailTemplateForm/server-action.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { EmailTemplate } from 'nhs-notify-web-template-management-utils';
44
import { redirect } from 'next/navigation';
55
import { processFormActions } from '@forms/EmailTemplateForm/server-action';
66
import { MAX_EMAIL_CHARACTER_LENGTH } from '@utils/constants';
7+
import { ErrorCodes } from '@utils/error-codes';
78

89
jest.mock('@utils/amplify-utils');
910
jest.mock('@utils/form-actions');
@@ -91,6 +92,30 @@ describe('CreateEmailTemplate server actions', () => {
9192
});
9293
});
9394

95+
it('create-email-template - should return response when when template message contains unsupported personalisation', async () => {
96+
const response = await processFormActions(
97+
initialState,
98+
getMockFormData({
99+
'form-id': 'create-email-template',
100+
emailTemplateName: 'template-name',
101+
emailTemplateSubjectLine: 'template-subject-line',
102+
emailTemplateMessage: 'a template message containing ((date))',
103+
})
104+
);
105+
106+
expect(response).toEqual({
107+
...initialState,
108+
errorState: {
109+
formErrors: [],
110+
fieldErrors: {
111+
emailTemplateMessage: [
112+
ErrorCodes.MESSAGE_CONTAINS_INVALID_PERSONALISATION_FIELD_NAME,
113+
],
114+
},
115+
},
116+
});
117+
});
118+
94119
test('should save the template and redirect', async () => {
95120
saveTemplateMock.mockResolvedValue({
96121
...initialState,

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

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -960,31 +960,6 @@ exports[`renders page one error 1`] = `
960960
Template name error
961961
</a>
962962
</li>
963-
<li>
964-
<a
965-
href="#letterTemplateCampaignId"
966-
/>
967-
</li>
968-
<li>
969-
<a
970-
href="#letterTemplateLetterType"
971-
/>
972-
</li>
973-
<li>
974-
<a
975-
href="#letterTemplateLanguage"
976-
/>
977-
</li>
978-
<li>
979-
<a
980-
href="#letterTemplatePdf"
981-
/>
982-
</li>
983-
<li>
984-
<a
985-
href="#letterTemplateCsv"
986-
/>
987-
</li>
988963
</ul>
989964
</div>
990965
<form
@@ -1958,21 +1933,6 @@ exports[`renders page with multiple errors 1`] = `
19581933
CSV error
19591934
</a>
19601935
</li>
1961-
<li>
1962-
<a
1963-
href="#letterTemplateCampaignId"
1964-
/>
1965-
</li>
1966-
<li>
1967-
<a
1968-
href="#letterTemplateLetterType"
1969-
/>
1970-
</li>
1971-
<li>
1972-
<a
1973-
href="#letterTemplateLanguage"
1974-
/>
1975-
</li>
19761936
</ul>
19771937
</div>
19781938
<form

frontend/src/__tests__/components/forms/NhsAppTemplateForm/NhsAppTemplateForm.test.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
TemplateFormState,
77
} from 'nhs-notify-web-template-management-utils';
88
import { NhsAppTemplateForm } from '@forms/NhsAppTemplateForm/NhsAppTemplateForm';
9+
import { ErrorCodes } from '@utils/error-codes';
910

1011
jest.mock('@utils/amplify-utils');
1112

@@ -115,7 +116,10 @@ test('renders page with multiple errors', () => {
115116
formErrors: [],
116117
fieldErrors: {
117118
nhsAppTemplateName: ['Template name error'],
118-
nhsAppTemplateMessage: ['Template message error'],
119+
nhsAppTemplateMessage: [
120+
'Template message error',
121+
ErrorCodes.MESSAGE_CONTAINS_INVALID_PERSONALISATION_FIELD_NAME,
122+
],
119123
},
120124
},
121125
name: '',

0 commit comments

Comments
 (0)