@@ -20,16 +20,20 @@ import {
2020 TestUser ,
2121 testUsers ,
2222} from 'helpers/auth/cognito-auth-helper' ;
23- import { RoutingConfigDbEntry } from 'helpers/types' ;
23+ import {
24+ RoutingConfigDbEntry ,
25+ expectedChannelLabels ,
26+ allChannels ,
27+ ordinals ,
28+ } from 'helpers/types' ;
2429import { TemplateStorageHelper } from 'helpers/db/template-storage-helper' ;
2530import { randomUUID } from 'node:crypto' ;
2631import { TemplateFactory } from 'helpers/factories/template-factory' ;
32+ import { getIdFromUrl } from 'helpers/url-helper' ;
2733
2834const routingConfigStorageHelper = new RoutingConfigStorageHelper ( ) ;
2935const templateStorageHelper = new TemplateStorageHelper ( ) ;
3036
31- const allChannels = [ 'NHSAPP' , 'EMAIL' , 'SMS' , 'LETTER' ] ;
32-
3337const validRoutingConfigId = randomUUID ( ) ;
3438const invalidRoutingConfigId = 'invalid-id' ;
3539const notFoundRoutingConfigId = randomUUID ( ) ;
@@ -136,21 +140,44 @@ test.describe('Routing - Choose Templates page', () => {
136140 chooseTemplatesPage . messagePlanChannel ( channel ) . fallbackConditions ;
137141
138142 if ( messagePlanChannels . includes ( channel ) ) {
139- await expect ( channelBlock ) . toBeVisible ( ) ;
140-
141143 const channelIndexInPlan = messagePlanChannels . indexOf ( channel ) ;
142144
143- await expect (
144- chooseTemplatesPage . messagePlanChannel ( channel ) . number
145- ) . toHaveText ( ( channelIndexInPlan + 1 ) . toString ( ) ) ;
146-
147- await ( messagePlanChannels . length > 1 &&
148- channelIndexInPlan < messagePlanChannels . length - 1
149- ? await expect ( fallbackConditions ) . toBeVisible ( )
150- : await expect ( fallbackConditions ) . toBeHidden ( ) ) ;
145+ await test . step ( 'channel that is included in the plan appears with its number' , async ( ) => {
146+ await expect ( channelBlock ) . toBeVisible ( ) ;
147+ await expect ( channelBlock ) . toContainText (
148+ expectedChannelLabels [ channel ]
149+ ) ;
150+ await expect (
151+ chooseTemplatesPage . messagePlanChannel ( channel ) . number
152+ ) . toHaveText ( ( channelIndexInPlan + 1 ) . toString ( ) ) ;
153+ } ) ;
154+
155+ // eslint-disable-next-line unicorn/prefer-ternary
156+ if (
157+ messagePlanChannels . length > 1 &&
158+ channelIndexInPlan < messagePlanChannels . length - 1
159+ ) {
160+ await test . step ( 'channel displays fallback conditions where its followed by a subsequent channel' , async ( ) => {
161+ await expect ( fallbackConditions ) . toBeVisible ( ) ;
162+
163+ const listItems = await fallbackConditions
164+ . locator ( 'li' )
165+ . allTextContents ( ) ;
166+ expect ( listItems [ 0 ] ) . toContain ( ordinals [ channelIndexInPlan ] ) ;
167+ expect ( listItems [ 1 ] ) . toContain (
168+ ordinals [ channelIndexInPlan + 1 ]
169+ ) ;
170+ } ) ;
171+ } else {
172+ await test . step ( 'channel that is last (or the only one) in the plan does not have fallback conditions' , async ( ) => {
173+ await expect ( fallbackConditions ) . toBeHidden ( ) ;
174+ } ) ;
175+ }
151176 } else {
152- await expect ( channelBlock ) . toBeHidden ( ) ;
153- await expect ( fallbackConditions ) . toBeHidden ( ) ;
177+ await test . step ( 'channel not in the plan does not appear' , async ( ) => {
178+ await expect ( channelBlock ) . toBeHidden ( ) ;
179+ await expect ( fallbackConditions ) . toBeHidden ( ) ;
180+ } ) ;
154181 }
155182 }
156183 } ) ;
@@ -175,7 +202,6 @@ test.describe('Routing - Choose Templates page', () => {
175202 baseURL,
176203 } ) => {
177204 const chooseTemplatesPage = new RoutingChooseTemplatesPage ( page ) ;
178-
179205 await chooseTemplatesPage . loadPage ( validRoutingConfigId ) ;
180206
181207 await expect ( page ) . toHaveURL (
@@ -186,7 +212,6 @@ test.describe('Routing - Choose Templates page', () => {
186212 ) ;
187213
188214 await expect ( chooseTemplatesPage . changeNameLink ) . toHaveText ( 'Change name' ) ;
189- // TODO: Update href?
190215 await expect ( chooseTemplatesPage . changeNameLink ) . toHaveAttribute (
191216 'href' ,
192217 `/templates/message-plans/edit-message-plan/${ messagePlans . valid . id } `
@@ -225,7 +250,7 @@ test.describe('Routing - Choose Templates page', () => {
225250 page,
226251 baseURL,
227252 } ) => {
228- const messageOrder = 'NHSAPP,SMS' ;
253+ const messageOrder : MessageOrder = 'NHSAPP,SMS' ;
229254
230255 const createMessagePlanPage = new RoutingCreateMessagePlanPage ( page , {
231256 messageOrder,
@@ -237,29 +262,43 @@ test.describe('Routing - Choose Templates page', () => {
237262
238263 const chooseTemplatesPage = new RoutingChooseTemplatesPage ( page ) ;
239264
240- await expect ( chooseTemplatesPage . nhsApp . templateName ) . toBeHidden ( ) ;
241- await expect ( chooseTemplatesPage . nhsApp . chooseTemplateLink ) . toBeVisible ( ) ;
242- await expect ( chooseTemplatesPage . nhsApp . chooseTemplateLink ) . toHaveAttribute (
243- 'href' ,
244- '/templates/message-plans/choose-nhs-app-template'
265+ await expect ( page ) . toHaveURL (
266+ / \/ t e m p l a t e s \/ m e s s a g e - p l a n s \/ c h o o s e - t e m p l a t e s \/ /
245267 ) ;
246- await expect ( chooseTemplatesPage . nhsApp . changeTemplateLink ) . toBeHidden ( ) ;
247- await expect ( chooseTemplatesPage . nhsApp . removeTemplateLink ) . toBeHidden ( ) ;
248268
249- await expect ( chooseTemplatesPage . sms . templateName ) . toBeHidden ( ) ;
250- await expect ( chooseTemplatesPage . sms . chooseTemplateLink ) . toBeVisible ( ) ;
251- await expect ( chooseTemplatesPage . sms . chooseTemplateLink ) . toHaveAttribute (
252- 'href' ,
253- '/templates/message-plans/choose-text-message-template'
254- ) ;
255- await expect ( chooseTemplatesPage . sms . changeTemplateLink ) . toBeHidden ( ) ;
256- await expect ( chooseTemplatesPage . sms . removeTemplateLink ) . toBeHidden ( ) ;
269+ const routingConfigId = getIdFromUrl ( page . url ( ) , 'choose-templates' ) ;
270+
271+ await test . step ( 'app channel with no template has only choose link' , async ( ) => {
272+ await expect ( chooseTemplatesPage . nhsApp . templateName ) . toBeHidden ( ) ;
273+ await expect ( chooseTemplatesPage . nhsApp . chooseTemplateLink ) . toBeVisible ( ) ;
274+ await expect (
275+ chooseTemplatesPage . nhsApp . chooseTemplateLink
276+ ) . toHaveAttribute (
277+ 'href' ,
278+ `/templates/message-plans/choose-nhs-app-template/${ routingConfigId } `
279+ ) ;
280+ await expect ( chooseTemplatesPage . nhsApp . changeTemplateLink ) . toBeHidden ( ) ;
281+ await expect ( chooseTemplatesPage . nhsApp . removeTemplateLink ) . toBeHidden ( ) ;
282+ } ) ;
283+
284+ await test . step ( 'sms channel with no template has only choose link' , async ( ) => {
285+ await expect ( chooseTemplatesPage . sms . templateName ) . toBeHidden ( ) ;
286+ await expect ( chooseTemplatesPage . sms . chooseTemplateLink ) . toBeVisible ( ) ;
287+ await expect ( chooseTemplatesPage . sms . chooseTemplateLink ) . toHaveAttribute (
288+ 'href' ,
289+ `/templates/message-plans/choose-text-message-template/${ routingConfigId } `
290+ ) ;
291+ await expect ( chooseTemplatesPage . sms . changeTemplateLink ) . toBeHidden ( ) ;
292+ await expect ( chooseTemplatesPage . sms . removeTemplateLink ) . toBeHidden ( ) ;
293+ } ) ;
257294
258295 await chooseTemplatesPage . nhsApp . clickChooseTemplateLink ( ) ;
259296
260297 await expect ( page ) . toHaveURL (
261- `${ baseURL } /templates/message-plans/choose-nhs-app-template/${ validRoutingConfigId } `
298+ `${ baseURL } /templates/message-plans/choose-nhs-app-template/${ routingConfigId } `
262299 ) ;
300+
301+ // TODO: CCM-11537 Choose template then return and assert updated
263302 } ) ;
264303
265304 test ( 'user can change templates on their existing message plan' , async ( {
@@ -270,32 +309,42 @@ test.describe('Routing - Choose Templates page', () => {
270309
271310 await chooseTemplatesPage . loadPage ( validRoutingConfigId ) ;
272311
273- await expect ( chooseTemplatesPage . nhsApp . templateName ) . toHaveText (
274- templates . NHSAPP . name
275- ) ;
276- await expect ( chooseTemplatesPage . nhsApp . changeTemplateLink ) . toBeVisible ( ) ;
277- await expect ( chooseTemplatesPage . nhsApp . changeTemplateLink ) . toHaveAttribute (
278- 'href' ,
279- `/templates/message-plans/choose-nhs-app-template/${ validRoutingConfigId } `
280- ) ;
312+ await test . step ( 'app channel with template has template name and change link' , async ( ) => {
313+ await expect ( chooseTemplatesPage . nhsApp . templateName ) . toHaveText (
314+ templates . NHSAPP . name
315+ ) ;
316+ await expect ( chooseTemplatesPage . nhsApp . changeTemplateLink ) . toBeVisible ( ) ;
317+ await expect (
318+ chooseTemplatesPage . nhsApp . changeTemplateLink
319+ ) . toHaveAttribute (
320+ 'href' ,
321+ `/templates/message-plans/choose-nhs-app-template/${ validRoutingConfigId } `
322+ ) ;
323+ } ) ;
281324
282- await expect ( chooseTemplatesPage . email . templateName ) . toBeHidden ( ) ;
283- await expect ( chooseTemplatesPage . email . changeTemplateLink ) . toBeHidden ( ) ;
325+ await test . step ( 'email channel with no template has no name or change link' , async ( ) => {
326+ await expect ( chooseTemplatesPage . email . templateName ) . toBeHidden ( ) ;
327+ await expect ( chooseTemplatesPage . email . changeTemplateLink ) . toBeHidden ( ) ;
328+ } ) ;
284329
285- await expect ( chooseTemplatesPage . sms . templateName ) . toHaveText (
286- templates . SMS . name
287- ) ;
288- await expect ( chooseTemplatesPage . sms . changeTemplateLink ) . toBeVisible ( ) ;
289- await expect ( chooseTemplatesPage . sms . changeTemplateLink ) . toHaveAttribute (
290- 'href' ,
291- `/templates/message-plans/choose-text-message-template/${ validRoutingConfigId } `
292- ) ;
330+ await test . step ( 'sms channel with template has template name and change link' , async ( ) => {
331+ await expect ( chooseTemplatesPage . sms . templateName ) . toHaveText (
332+ templates . SMS . name
333+ ) ;
334+ await expect ( chooseTemplatesPage . sms . changeTemplateLink ) . toBeVisible ( ) ;
335+ await expect ( chooseTemplatesPage . sms . changeTemplateLink ) . toHaveAttribute (
336+ 'href' ,
337+ `/templates/message-plans/choose-text-message-template/${ validRoutingConfigId } `
338+ ) ;
339+ } ) ;
293340
294341 await chooseTemplatesPage . nhsApp . clickChangeTemplateLink ( ) ;
295342
296343 await expect ( page ) . toHaveURL (
297344 `${ baseURL } /templates/message-plans/choose-nhs-app-template/${ validRoutingConfigId } `
298345 ) ;
346+
347+ // TODO: CCM-11537 Choose template then return and assert updated
299348 } ) ;
300349
301350 test ( 'user can remove templates from their existing message plan' , async ( {
@@ -310,24 +359,18 @@ test.describe('Routing - Choose Templates page', () => {
310359 templates . NHSAPP . name
311360 ) ;
312361 await expect ( chooseTemplatesPage . nhsApp . removeTemplateLink ) . toBeVisible ( ) ;
313- await expect ( chooseTemplatesPage . nhsApp . removeTemplateLink ) . toHaveAttribute (
314- 'href' ,
315- '/templates/message-plans/remove-nhs-app-template'
316- ) ;
317362
318363 await expect ( chooseTemplatesPage . email . removeTemplateLink ) . toBeHidden ( ) ;
319364
320365 await expect ( chooseTemplatesPage . sms . templateName ) . toHaveText (
321366 templates . SMS . name
322367 ) ;
323368 await expect ( chooseTemplatesPage . sms . removeTemplateLink ) . toBeVisible ( ) ;
324- await expect ( chooseTemplatesPage . sms . removeTemplateLink ) . toHaveAttribute (
325- 'href' ,
326- '/templates/message-plans/remove-text-message-template'
327- ) ; // TODO: REMOVE
328369
329370 await chooseTemplatesPage . nhsApp . clickRemoveTemplateLink ( ) ;
330371
372+ // TODO: Implement remove
373+
331374 await expect ( page ) . toHaveURL (
332375 `${ baseURL } /templates/message-plans/choose-templates/${ validRoutingConfigId } `
333376 ) ;
@@ -349,18 +392,44 @@ test.describe('Routing - Choose Templates page', () => {
349392 await expect ( page ) . toHaveURL ( `${ baseURL } /templates/message-plans` ) ;
350393 } ) ;
351394
352- // TODO: Upgrade to
395+ // TODO: CCM-11495
396+ // Upgrade to the below once validation is in
353397 // test('can move to production once all templates have been chosen', () => {});
354- // once validation is in
355398
356- // TODO: as part of validation ticket
399+ // TODO: CCM-11495
400+ // Add as part of validation ticket
357401 // test('displays an error message when trying to "Move to production" without all required templates', () => {});
358402
359403 test . describe ( 'redirects to invalid message plan page' , ( ) => {
360- test ( 'when message plan cannot be found' , ( ) => { } ) ;
404+ test ( 'when message plan cannot be found' , async ( { page, baseURL } ) => {
405+ const chooseTemplatesPage = new RoutingChooseTemplatesPage ( page ) ;
406+
407+ await chooseTemplatesPage . loadPage ( notFoundRoutingConfigId ) ;
408+
409+ await expect ( page ) . toHaveURL (
410+ `${ baseURL } /templates/message-plans/invalid`
411+ ) ;
412+ } ) ;
413+
414+ test ( 'when routing config ID is invalid' , async ( { page, baseURL } ) => {
415+ const chooseTemplatesPage = new RoutingChooseTemplatesPage ( page ) ;
361416
362- test ( 'when routing config ID is invalid' , ( ) => { } ) ;
417+ await chooseTemplatesPage . loadPage ( invalidRoutingConfigId ) ;
363418
364- test ( 'when no routing config ID is provided in the URL' , ( ) => { } ) ;
419+ await expect ( page ) . toHaveURL (
420+ `${ baseURL } /templates/message-plans/invalid`
421+ ) ;
422+ } ) ;
423+
424+ test ( 'when no routing config ID is provided in the URL' , async ( {
425+ page,
426+ baseURL,
427+ } ) => {
428+ await page . goto ( `${ baseURL } /templates/message-plans/choose-templates` ) ;
429+
430+ await expect ( page ) . toHaveURL (
431+ `${ baseURL } /templates/message-plans/invalid`
432+ ) ;
433+ } ) ;
365434 } ) ;
366435} ) ;
0 commit comments