Skip to content

Commit 6776599

Browse files
committed
CCM-11544 More lock number fixes
1 parent 46f9560 commit 6776599

14 files changed

+156
-51
lines changed

frontend/src/components/forms/ChooseLanguageLetterTemplates/ChooseLanguageLetterTemplates.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,11 @@ export function ChooseLanguageLetterTemplates(
6060
state.selectedTemplateIds ??
6161
selectedLanguageTemplateIds.map((item) => item.templateId);
6262

63-
const errorMessage = (errorState || state.errorState)?.fieldErrors?.[
64-
'language-templates'
65-
]?.[0];
63+
const activeErrorState = errorState?.fieldErrors
64+
? errorState
65+
: state.errorState;
66+
const errorMessage =
67+
activeErrorState?.fieldErrors?.['language-templates']?.[0];
6668
const isDuplicateError = errorMessage === content.error.duplicate.linkText;
6769

6870
const errorHintText = isDuplicateError
@@ -73,7 +75,7 @@ export function ChooseLanguageLetterTemplates(
7375
<NHSNotifyMain>
7476
<NhsNotifyErrorSummary
7577
hint={errorHintText}
76-
errorState={errorState || state.errorState}
78+
errorState={activeErrorState}
7779
/>
7880
<div className='nhsuk-grid-row'>
7981
<div className='nhsuk-grid-column-full'>
@@ -130,7 +132,7 @@ export function ChooseLanguageLetterTemplates(
130132
<LanguageLetterTemplates
131133
routingConfigId={messagePlan.id}
132134
templateList={templateList}
133-
errorState={errorState || state.errorState || null}
135+
errorState={activeErrorState || null}
134136
selectedTemplates={initialSelectedTemplates}
135137
lockNumber={lockNumber}
136138
/>

tests/test-team/template-mgmt-routing-component-tests/choose-templates.routing-component.spec.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -518,8 +518,10 @@ test.describe('Routing - Choose Templates page', () => {
518518

519519
await largePrintItem.clickChooseTemplateLink();
520520

521-
await page.waitForURL(
522-
`/templates/message-plans/choose-large-print-letter-template/${routingConfigIds.valid}?lockNumber=${messagePlans.valid.lockNumber}`
521+
await page.waitForURL((url) =>
522+
url.href.includes(
523+
`/templates/message-plans/choose-large-print-letter-template/${routingConfigIds.valid}?lockNumber=`
524+
)
523525
);
524526
});
525527

tests/test-team/template-mgmt-routing-component-tests/email/choose-email-template.routing-component.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ test.describe('Routing - Choose email template page', () => {
167167
await expect(previewLink).toHaveText('Preview');
168168
await expect(previewLink).toHaveAttribute(
169169
'href',
170-
`/templates/message-plans/choose-email-template/${plan.id}/preview-template/${template.id}`
170+
`/templates/message-plans/choose-email-template/${plan.id}/preview-template/${template.id}?lockNumber=${plan.lockNumber}`
171171
);
172172
}
173173

tests/test-team/template-mgmt-routing-component-tests/email/preview-email-template.routing-component.spec.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ test.describe('Routing - Preview email template page', () => {
7272
const props = {
7373
page: new RoutingPreviewEmailTemplatePage(page)
7474
.setPathParam('messagePlanId', messagePlans.EMAIL_ROUTING_CONFIG.id)
75-
.setPathParam('templateId', templates.EMAIL.id),
75+
.setPathParam('templateId', templates.EMAIL.id)
76+
.setSearchParam('lockNumber', '0'),
7677
baseURL,
7778
expectedUrl: `templates/message-plans/choose-email-template/${messagePlans.EMAIL_ROUTING_CONFIG.id}`,
7879
};
@@ -87,7 +88,8 @@ test.describe('Routing - Preview email template page', () => {
8788
test('loads the email template', async ({ page, baseURL }) => {
8889
const previewEmailTemplatePage = new RoutingPreviewEmailTemplatePage(page)
8990
.setPathParam('messagePlanId', messagePlans.EMAIL_ROUTING_CONFIG.id)
90-
.setPathParam('templateId', templates.EMAIL.id);
91+
.setPathParam('templateId', templates.EMAIL.id)
92+
.setSearchParam('lockNumber', '0');
9193

9294
await previewEmailTemplatePage.loadPage();
9395

@@ -114,7 +116,8 @@ test.describe('Routing - Preview email template page', () => {
114116
test('when template cannot be found', async ({ page, baseURL }) => {
115117
const previewEmailTemplatePage = new RoutingPreviewEmailTemplatePage(page)
116118
.setPathParam('messagePlanId', messagePlans.EMAIL_ROUTING_CONFIG.id)
117-
.setPathParam('templateId', notFoundTemplateId);
119+
.setPathParam('templateId', notFoundTemplateId)
120+
.setSearchParam('lockNumber', '0');
118121

119122
await previewEmailTemplatePage.loadPage();
120123

@@ -124,7 +127,8 @@ test.describe('Routing - Preview email template page', () => {
124127
test('when template ID is invalid', async ({ page, baseURL }) => {
125128
const previewEmailTemplatePage = new RoutingPreviewEmailTemplatePage(page)
126129
.setPathParam('messagePlanId', messagePlans.EMAIL_ROUTING_CONFIG.id)
127-
.setPathParam('templateId', invalidTemplateId);
130+
.setPathParam('templateId', invalidTemplateId)
131+
.setSearchParam('lockNumber', '0');
128132

129133
await previewEmailTemplatePage.loadPage();
130134

@@ -134,7 +138,8 @@ test.describe('Routing - Preview email template page', () => {
134138
test('when template is not email', async ({ page, baseURL }) => {
135139
const previewEmailTemplatePage = new RoutingPreviewEmailTemplatePage(page)
136140
.setPathParam('messagePlanId', messagePlans.EMAIL_ROUTING_CONFIG.id)
137-
.setPathParam('templateId', templates.APP.id);
141+
.setPathParam('templateId', templates.APP.id)
142+
.setSearchParam('lockNumber', '0');
138143

139144
await previewEmailTemplatePage.loadPage();
140145

tests/test-team/template-mgmt-routing-component-tests/letter/choose-large-print-letter-template.routing-component.spec.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ test.describe('Routing - Choose large print letter template page', () => {
214214
await expect(previewLink).toBeVisible();
215215
await expect(previewLink).toHaveAttribute(
216216
'href',
217-
`/templates/message-plans/choose-large-print-letter-template/${routingConfigs.valid.id}/preview-template/${template.id}`
217+
`/templates/message-plans/choose-large-print-letter-template/${routingConfigs.valid.id}/preview-template/${template.id}?lockNumber=${routingConfigs.valid.lockNumber}`
218218
);
219219
}
220220

@@ -271,8 +271,10 @@ test.describe('Routing - Choose large print letter template page', () => {
271271

272272
await chooseLargePrintLetterTemplatePage.saveAndContinueButton.click();
273273

274-
await expect(page).toHaveURL(
275-
`${baseURL}/templates/message-plans/choose-large-print-letter-template/${routingConfigs.valid.id}?lockNumber=${routingConfigs.valid.lockNumber}`
274+
await page.waitForURL((url) =>
275+
url.href.includes(
276+
`/templates/message-plans/choose-large-print-letter-template/${routingConfigs.valid.id}?lockNumber=`
277+
)
276278
);
277279

278280
await expect(chooseLargePrintLetterTemplatePage.errorSummary).toBeVisible();

tests/test-team/template-mgmt-routing-component-tests/letter/choose-other-language-letter-template.routing-component.spec.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ test.describe('Routing - Choose other language letter templates page', () => {
287287
await expect(previewLink).toBeVisible();
288288
await expect(previewLink).toHaveAttribute(
289289
'href',
290-
`/templates/message-plans/choose-other-language-letter-template/${routingConfigs.valid.id}/preview-template/${template.id}`
290+
`/templates/message-plans/choose-other-language-letter-template/${routingConfigs.valid.id}/preview-template/${template.id}?lockNumber=${routingConfigs.valid.lockNumber}`
291291
);
292292
}
293293

@@ -531,8 +531,10 @@ test.describe('Routing - Choose other language letter templates page', () => {
531531

532532
await chooseOtherLanguageLetterTemplatePage.saveAndContinueButton.click();
533533

534-
await expect(page).toHaveURL(
535-
`${baseURL}/templates/message-plans/choose-other-language-letter-template/${routingConfigs.valid.id}?lockNumber=${routingConfigs.valid.lockNumber}`
534+
await page.waitForURL((url) =>
535+
url.href.includes(
536+
`/templates/message-plans/choose-other-language-letter-template/${routingConfigs.valid.id}?lockNumber=`
537+
)
536538
);
537539

538540
await expect(
@@ -562,8 +564,10 @@ test.describe('Routing - Choose other language letter templates page', () => {
562564

563565
await chooseOtherLanguageLetterTemplatePage.saveAndContinueButton.click();
564566

565-
await expect(page).toHaveURL(
566-
`${baseURL}/templates/message-plans/choose-other-language-letter-template/${routingConfigs.valid.id}?lockNumber=${routingConfigs.valid.lockNumber}`
567+
await page.waitForURL((url) =>
568+
url.href.includes(
569+
`/templates/message-plans/choose-other-language-letter-template/${routingConfigs.valid.id}?lockNumber=`
570+
)
567571
);
568572

569573
await expect(
@@ -589,10 +593,15 @@ test.describe('Routing - Choose other language letter templates page', () => {
589593
.getCheckbox(templates.ANOTHER_FRENCH_LETTER.id)
590594
.uncheck();
591595

596+
// eslint-disable-next-line playwright/no-wait-for-timeout
597+
await page.waitForTimeout(5000); // Wait for debounce
598+
592599
await chooseOtherLanguageLetterTemplatePage.saveAndContinueButton.click();
593600

594-
await expect(page).toHaveURL(
595-
`${baseURL}/templates/message-plans/choose-other-language-letter-template/${routingConfigs.valid.id}?lockNumber=${routingConfigs.valid.lockNumber}`
601+
await page.waitForURL((url) =>
602+
url.href.includes(
603+
`/templates/message-plans/choose-other-language-letter-template/${routingConfigs.valid.id}?lockNumber=`
604+
)
596605
);
597606

598607
await expect(

tests/test-team/template-mgmt-routing-component-tests/letter/choose-standard-letter-template.routing-component.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ test.describe('Routing - Choose letter template page', () => {
186186
await expect(previewLink).toHaveText('Preview');
187187
await expect(previewLink).toHaveAttribute(
188188
'href',
189-
`/templates/message-plans/choose-standard-english-letter-template/${plan.id}/preview-template/${template.id}`
189+
`/templates/message-plans/choose-standard-english-letter-template/${plan.id}/preview-template/${template.id}?lockNumber=${plan.lockNumber}`
190190
);
191191
}
192192

tests/test-team/template-mgmt-routing-component-tests/letter/preview-large-print-letter-template.routing-component.spec.ts

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,10 @@ test.describe('Routing - Preview large print letter template page', () => {
8080
const props = {
8181
page: new RoutingPreviewLargePrintLetterTemplatePage(page)
8282
.setPathParam('messagePlanId', messagePlans.LETTER_ROUTING_CONFIG.id)
83-
.setPathParam('templateId', templates.LARGE_PRINT_LETTER.id),
83+
.setPathParam('templateId', templates.LARGE_PRINT_LETTER.id)
84+
.setSearchParam('lockNumber', '0'),
8485
baseURL,
85-
expectedUrl: `templates/message-plans/choose-large-print-letter-template/${messagePlans.LETTER_ROUTING_CONFIG.id}`,
86+
expectedUrl: `templates/message-plans/choose-large-print-letter-template/${messagePlans.LETTER_ROUTING_CONFIG.id}?lockNumber=0`,
8687
};
8788
await assertSkipToMainContent(props);
8889
await assertHeaderLogoLink(props);
@@ -92,12 +93,42 @@ test.describe('Routing - Preview large print letter template page', () => {
9293
await assertAndClickBackLinkTop(props);
9394
});
9495

96+
test('back links preserve lockNumber query parameter', async ({
97+
page,
98+
baseURL,
99+
}) => {
100+
const lockNumber = 5;
101+
const previewPage = new RoutingPreviewLargePrintLetterTemplatePage(page)
102+
.setPathParam('messagePlanId', messagePlans.LETTER_ROUTING_CONFIG.id)
103+
.setPathParam('templateId', templates.LARGE_PRINT_LETTER.id)
104+
.setSearchParam('lockNumber', String(lockNumber));
105+
106+
await previewPage.loadPage();
107+
108+
await expect(previewPage.backLinkTop).toHaveAttribute(
109+
'href',
110+
`/templates/message-plans/choose-large-print-letter-template/${messagePlans.LETTER_ROUTING_CONFIG.id}?lockNumber=${lockNumber}`
111+
);
112+
113+
await expect(previewPage.backLinkBottom).toHaveAttribute(
114+
'href',
115+
`/templates/message-plans/choose-large-print-letter-template/${messagePlans.LETTER_ROUTING_CONFIG.id}?lockNumber=${lockNumber}`
116+
);
117+
118+
await previewPage.backLinkTop.click();
119+
120+
await expect(page).toHaveURL(
121+
`${baseURL}/templates/message-plans/choose-large-print-letter-template/${messagePlans.LETTER_ROUTING_CONFIG.id}?lockNumber=${lockNumber}`
122+
);
123+
});
124+
95125
test('loads the large print letter template', async ({ page, baseURL }) => {
96126
const previewLargePrintLetterTemplatePage =
97127
new RoutingPreviewLargePrintLetterTemplatePage(page);
98128
await previewLargePrintLetterTemplatePage
99129
.setPathParam('messagePlanId', messagePlans.LETTER_ROUTING_CONFIG.id)
100130
.setPathParam('templateId', templates.LARGE_PRINT_LETTER.id)
131+
.setSearchParam('lockNumber', '0')
101132
.loadPage();
102133

103134
await expect(page).toHaveURL(
@@ -148,6 +179,7 @@ test.describe('Routing - Preview large print letter template page', () => {
148179
await previewLargePrintLetterTemplatePage
149180
.setPathParam('messagePlanId', messagePlans.LETTER_ROUTING_CONFIG.id)
150181
.setPathParam('templateId', notFoundTemplateId)
182+
.setSearchParam('lockNumber', '0')
151183
.loadPage();
152184

153185
await expect(page).toHaveURL(`${baseURL}/templates/invalid-template`);
@@ -160,6 +192,7 @@ test.describe('Routing - Preview large print letter template page', () => {
160192
await previewLargePrintLetterTemplatePage
161193
.setPathParam('messagePlanId', messagePlans.LETTER_ROUTING_CONFIG.id)
162194
.setPathParam('templateId', invalidTemplateId)
195+
.setSearchParam('lockNumber', '0')
163196
.loadPage();
164197

165198
await expect(page).toHaveURL(`${baseURL}/templates/invalid-template`);
@@ -172,6 +205,7 @@ test.describe('Routing - Preview large print letter template page', () => {
172205
await previewLargePrintLetterTemplatePage
173206
.setPathParam('messagePlanId', messagePlans.LETTER_ROUTING_CONFIG.id)
174207
.setPathParam('templateId', templates.EMAIL.id)
208+
.setSearchParam('lockNumber', '0')
175209
.loadPage();
176210

177211
await expect(page).toHaveURL(`${baseURL}/templates/invalid-template`);
@@ -187,6 +221,7 @@ test.describe('Routing - Preview large print letter template page', () => {
187221
await previewLargePrintLetterTemplatePage
188222
.setPathParam('messagePlanId', messagePlans.LETTER_ROUTING_CONFIG.id)
189223
.setPathParam('templateId', templates.STANDARD_LETTER.id)
224+
.setSearchParam('lockNumber', '0')
190225
.loadPage();
191226

192227
await expect(page).toHaveURL(`${baseURL}/templates/invalid-template`);

tests/test-team/template-mgmt-routing-component-tests/letter/preview-other-language-letter-template.routing-component.spec.ts

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,14 @@ test.describe('Routing - Preview foreign language letter template page', () => {
8686
const previewForeignLanguageLetterTemplatePage =
8787
new RoutingPreviewOtherLanguageLetterTemplatePage(page)
8888
.setPathParam('messagePlanId', messagePlans.LETTER_ROUTING_CONFIG.id)
89-
.setPathParam('templateId', templates.FRENCH_LETTER.id);
89+
.setPathParam('templateId', templates.FRENCH_LETTER.id)
90+
.setSearchParam('lockNumber', '0');
9091
await previewForeignLanguageLetterTemplatePage.loadPage();
9192

9293
const props = {
9394
page: previewForeignLanguageLetterTemplatePage,
9495
baseURL,
95-
expectedUrl: `templates/message-plans/choose-other-language-letter-template/${messagePlans.LETTER_ROUTING_CONFIG.id}`,
96+
expectedUrl: `templates/message-plans/choose-other-language-letter-template/${messagePlans.LETTER_ROUTING_CONFIG.id}?lockNumber=0`,
9697
};
9798
await assertSkipToMainContent(props);
9899
await assertHeaderLogoLink(props);
@@ -102,14 +103,44 @@ test.describe('Routing - Preview foreign language letter template page', () => {
102103
await assertAndClickBackLinkTop(props);
103104
});
104105

106+
test('back links preserve lockNumber query parameter', async ({
107+
page,
108+
baseURL,
109+
}) => {
110+
const lockNumber = 5;
111+
const previewPage = new RoutingPreviewOtherLanguageLetterTemplatePage(page)
112+
.setPathParam('messagePlanId', messagePlans.LETTER_ROUTING_CONFIG.id)
113+
.setPathParam('templateId', templates.FRENCH_LETTER.id)
114+
.setSearchParam('lockNumber', String(lockNumber));
115+
116+
await previewPage.loadPage();
117+
118+
await expect(previewPage.backLinkTop).toHaveAttribute(
119+
'href',
120+
`/templates/message-plans/choose-other-language-letter-template/${messagePlans.LETTER_ROUTING_CONFIG.id}?lockNumber=${lockNumber}`
121+
);
122+
123+
await expect(previewPage.backLinkBottom).toHaveAttribute(
124+
'href',
125+
`/templates/message-plans/choose-other-language-letter-template/${messagePlans.LETTER_ROUTING_CONFIG.id}?lockNumber=${lockNumber}`
126+
);
127+
128+
await previewPage.backLinkTop.click();
129+
130+
await expect(page).toHaveURL(
131+
`${baseURL}/templates/message-plans/choose-other-language-letter-template/${messagePlans.LETTER_ROUTING_CONFIG.id}?lockNumber=${lockNumber}`
132+
);
133+
});
134+
105135
test('loads the foreign language letter template', async ({
106136
page,
107137
baseURL,
108138
}) => {
109139
const previewForeignLanguageLetterTemplatePage =
110140
new RoutingPreviewOtherLanguageLetterTemplatePage(page)
111141
.setPathParam('messagePlanId', messagePlans.LETTER_ROUTING_CONFIG.id)
112-
.setPathParam('templateId', templates.FRENCH_LETTER.id);
142+
.setPathParam('templateId', templates.FRENCH_LETTER.id)
143+
.setSearchParam('lockNumber', '0');
113144
await previewForeignLanguageLetterTemplatePage.loadPage();
114145
await expect(page).toHaveURL(
115146
`${baseURL}/templates/message-plans/choose-other-language-letter-template/${messagePlans.LETTER_ROUTING_CONFIG.id}/preview-template/${templates.FRENCH_LETTER.id}`
@@ -163,7 +194,8 @@ test.describe('Routing - Preview foreign language letter template page', () => {
163194
const previewForeignLanguageLetterTemplatePage =
164195
new RoutingPreviewOtherLanguageLetterTemplatePage(page)
165196
.setPathParam('messagePlanId', messagePlans.LETTER_ROUTING_CONFIG.id)
166-
.setPathParam('templateId', notFoundTemplateId);
197+
.setPathParam('templateId', notFoundTemplateId)
198+
.setSearchParam('lockNumber', '0');
167199

168200
await previewForeignLanguageLetterTemplatePage.loadPage();
169201

@@ -174,7 +206,8 @@ test.describe('Routing - Preview foreign language letter template page', () => {
174206
const previewForeignLanguageLetterTemplatePage =
175207
new RoutingPreviewOtherLanguageLetterTemplatePage(page)
176208
.setPathParam('messagePlanId', messagePlans.LETTER_ROUTING_CONFIG.id)
177-
.setPathParam('templateId', invalidTemplateId);
209+
.setPathParam('templateId', invalidTemplateId)
210+
.setSearchParam('lockNumber', '0');
178211

179212
await previewForeignLanguageLetterTemplatePage.loadPage();
180213

@@ -185,7 +218,8 @@ test.describe('Routing - Preview foreign language letter template page', () => {
185218
const previewForeignLanguageLetterTemplatePage =
186219
new RoutingPreviewOtherLanguageLetterTemplatePage(page)
187220
.setPathParam('messagePlanId', messagePlans.LETTER_ROUTING_CONFIG.id)
188-
.setPathParam('templateId', templates.EMAIL.id);
221+
.setPathParam('templateId', templates.EMAIL.id)
222+
.setSearchParam('lockNumber', '0');
189223

190224
await previewForeignLanguageLetterTemplatePage.loadPage();
191225

@@ -199,7 +233,8 @@ test.describe('Routing - Preview foreign language letter template page', () => {
199233
const previewForeignLanguageLetterTemplatePage =
200234
new RoutingPreviewOtherLanguageLetterTemplatePage(page)
201235
.setPathParam('messagePlanId', messagePlans.LETTER_ROUTING_CONFIG.id)
202-
.setPathParam('templateId', templates.STANDARD_LETTER.id);
236+
.setPathParam('templateId', templates.STANDARD_LETTER.id)
237+
.setSearchParam('lockNumber', '0');
203238

204239
await previewForeignLanguageLetterTemplatePage.loadPage();
205240

0 commit comments

Comments
 (0)