Skip to content

Commit 9140568

Browse files
committed
CCM-11492 Update pw tests
1 parent 4f04e0f commit 9140568

File tree

3 files changed

+152
-66
lines changed

3 files changed

+152
-66
lines changed

tests/test-team/helpers/types.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,17 @@ export const templateTypeToUrlTextMappings: Record<string, string> = {
1818
LETTER: 'letter',
1919
};
2020

21+
export const expectedChannelLabels: Record<Channel, string> = {
22+
NHSAPP: 'NHS App',
23+
SMS: 'Text message (SMS)',
24+
EMAIL: 'Email',
25+
LETTER: 'Letter',
26+
};
27+
28+
export const allChannels: Channel[] = ['NHSAPP', 'EMAIL', 'SMS', 'LETTER'];
29+
30+
export const ordinals = ['first', 'second', 'third', 'fourth', 'fifth'];
31+
2132
export type File = {
2233
fileName: string;
2334
currentVersion: string;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export const getIdFromUrl = (fullUrl: string, pageSegment: string) => {
2+
// eslint-disable-next-line security/detect-non-literal-regexp
3+
const match = fullUrl.match(new RegExp(`${pageSegment}\\/([^#/?]+)`));
4+
const id = match ? match[1] : undefined;
5+
return id;
6+
};

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

Lines changed: 135 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -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';
2429
import { TemplateStorageHelper } from 'helpers/db/template-storage-helper';
2530
import { randomUUID } from 'node:crypto';
2631
import { TemplateFactory } from 'helpers/factories/template-factory';
32+
import { getIdFromUrl } from 'helpers/url-helper';
2733

2834
const routingConfigStorageHelper = new RoutingConfigStorageHelper();
2935
const templateStorageHelper = new TemplateStorageHelper();
3036

31-
const allChannels = ['NHSAPP', 'EMAIL', 'SMS', 'LETTER'];
32-
3337
const validRoutingConfigId = randomUUID();
3438
const invalidRoutingConfigId = 'invalid-id';
3539
const 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+
/\/templates\/message-plans\/choose-templates\//
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

Comments
 (0)