Skip to content

Commit 2be0de8

Browse files
jazrattanpaljassean-corrigan1
authored
Feature/ccm 6323 nhsapp message (#136)
* CCM-6323: nhsapp create template tests --------- Co-authored-by: jas <[email protected]> Co-authored-by: sean.corrigan1 <[email protected]>
1 parent 9d0b8f1 commit 2be0de8

File tree

4 files changed

+220
-14
lines changed

4 files changed

+220
-14
lines changed

tests/test-team/pages/template-mgmt-base-page.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,8 @@ export class TemplateMgmtBasePage {
7777
async loadPage(_: string) {
7878
throw new Error('Not implemented');
7979
}
80+
81+
async clickBackLink() {
82+
await this.goBackLink.click();
83+
}
8084
}

tests/test-team/pages/template-mgmt-create-page.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@ export class TemplateMgmtCreatePage extends TemplateMgmtBasePage {
77
private static createSmsTemplatePageUrl =
88
'/templates/create-text-message-template';
99

10-
private static createEmailTemplatePageUrl =
11-
'/templates/create-email-template';
12-
13-
async navigateToCreateNhsAppTemplatePage(sessionId: string) {
10+
async loadPage(sessionId: string) {
1411
await this.navigateTo(
1512
`${TemplateMgmtCreatePage.createNhsAppTemplatePageUrl}/${sessionId}`
1613
);

tests/test-team/template-mgmt-component-tests/template-mgmt-common.steps.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,9 @@ type CommonStepsProps = {
77
baseURL?: string;
88
};
99

10-
export function assertSkipToMainContent({
11-
page,
12-
id: sessionId,
13-
}: CommonStepsProps) {
10+
export function assertSkipToMainContent({ page, id }: CommonStepsProps) {
1411
return test.step('when user clicks "skip to main content", then page heading is focused', async () => {
15-
await page.loadPage(sessionId);
12+
await page.loadPage(id);
1613

1714
await page.page.keyboard.press('Tab');
1815

tests/test-team/template-mgmt-component-tests/template-mgmt-create-nhs-app-template-page.component.ts

Lines changed: 213 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,15 @@ import { test, expect } from '@playwright/test';
22
import { TemplateMgmtCreatePage } from '../pages/template-mgmt-create-page';
33
import { Session, TemplateType } from '../helpers/types';
44
import SessionStorageHelper from '../helpers/session-storage-helper';
5+
import {
6+
assertFooterLinks,
7+
assertGoBackLink,
8+
assertLoginLink,
9+
assertNotifyBannerLink,
10+
assertSkipToMainContent,
11+
} from './template-mgmt-common.steps';
512

6-
export const nhsAppNoTemplateSessionData: Session = {
13+
export const emptySessionData: Session = {
714
__typename: 'SessionStorage',
815
id: '3d98b0c4-6666-0000-1111-95eb27590000',
916
createdAt: '2024-09-19T23:36:20.815Z',
@@ -13,9 +20,20 @@ export const nhsAppNoTemplateSessionData: Session = {
1320
nhsAppTemplateMessage: '',
1421
};
1522

23+
export const emptySessionForTemplateCreation: Session = {
24+
__typename: 'SessionStorage',
25+
id: '4d98b0c4-7777-0000-1111-95eb27590011',
26+
createdAt: '2024-09-19T23:36:20.815Z',
27+
updatedAt: '2024-09-19T23:36:20.815Z',
28+
templateType: TemplateType.NHS_APP,
29+
nhsAppTemplateName: '',
30+
nhsAppTemplateMessage: '',
31+
};
32+
1633
test.describe('Create NHS App Template Page', () => {
1734
const sessionStorageHelper = new SessionStorageHelper([
18-
nhsAppNoTemplateSessionData,
35+
emptySessionData,
36+
emptySessionForTemplateCreation,
1937
]);
2038

2139
test.beforeAll(async () => {
@@ -32,15 +50,205 @@ test.describe('Create NHS App Template Page', () => {
3250
}) => {
3351
const createTemplatePage = new TemplateMgmtCreatePage(page);
3452

35-
await createTemplatePage.navigateToCreateNhsAppTemplatePage(
36-
nhsAppNoTemplateSessionData.id
53+
await createTemplatePage.loadPage(emptySessionData.id);
54+
55+
await expect(page).toHaveURL(
56+
`${baseURL}/templates/create-nhs-app-template/${emptySessionData.id}`
57+
);
58+
expect(await createTemplatePage.pageHeader.textContent()).toBe(
59+
'Create NHS App message template'
60+
);
61+
});
62+
63+
test('common page tests', async ({ page, baseURL }) => {
64+
const props = {
65+
page: new TemplateMgmtCreatePage(page),
66+
id: emptySessionData.id,
67+
baseURL,
68+
};
69+
70+
await assertSkipToMainContent(props);
71+
await assertNotifyBannerLink(props);
72+
await assertLoginLink(props);
73+
await assertFooterLinks(props);
74+
await assertGoBackLink({
75+
...props,
76+
expectedUrl: `templates/choose-a-template-type/${emptySessionData.id}`,
77+
});
78+
});
79+
80+
test('Validate error messages on the create NHS App message template page with no template name or body', async ({
81+
page,
82+
baseURL,
83+
}) => {
84+
const createTemplatePage = new TemplateMgmtCreatePage(page);
85+
86+
await createTemplatePage.loadPage(emptySessionData.id);
87+
88+
await expect(page).toHaveURL(
89+
`${baseURL}/templates/create-nhs-app-template/${emptySessionData.id}`
90+
);
91+
expect(await createTemplatePage.pageHeader.textContent()).toBe(
92+
'Create NHS App message template'
93+
);
94+
await createTemplatePage.clickContinueButton();
95+
await expect(page.locator('.nhsuk-error-summary')).toBeVisible();
96+
97+
await expect(
98+
page.locator('ul[class="nhsuk-list nhsuk-error-summary__list"] > li')
99+
).toHaveText(['Enter a template name', 'Enter a template message']);
100+
});
101+
102+
test('NHS App Message template populated and continued to the preview screen displayed', async ({
103+
page,
104+
baseURL,
105+
}) => {
106+
const createTemplatePage = new TemplateMgmtCreatePage(page);
107+
108+
await createTemplatePage.loadPage(emptySessionForTemplateCreation.id);
109+
110+
await expect(page).toHaveURL(
111+
`${baseURL}/templates/create-nhs-app-template/${emptySessionForTemplateCreation.id}`
112+
);
113+
const templateName = 'NHS Testing 123';
114+
await page.locator('[id="nhsAppTemplateName"]').fill(templateName);
115+
const templateMessage = 'Test Message box';
116+
await page.locator('[id="nhsAppTemplateMessage"]').fill(templateMessage);
117+
await createTemplatePage.clickContinueButton();
118+
await expect(page.getByRole('heading', { level: 1 })).toContainText(
119+
'NHS Testing 123'
120+
);
121+
});
122+
123+
test('Validate error messages on the create NHS App message template page with a no template message', async ({
124+
page,
125+
baseURL,
126+
}) => {
127+
const createTemplatePage = new TemplateMgmtCreatePage(page);
128+
129+
await createTemplatePage.loadPage(emptySessionData.id);
130+
131+
await expect(page).toHaveURL(
132+
`${baseURL}/templates/create-nhs-app-template/${emptySessionData.id}`
133+
);
134+
expect(await createTemplatePage.pageHeader.textContent()).toBe(
135+
'Create NHS App message template'
37136
);
137+
const templateName = 'NHS Testing 123';
138+
await page.locator('[id="nhsAppTemplateName"]').fill(templateName);
139+
await createTemplatePage.clickContinueButton();
140+
await expect(page.locator('.nhsuk-error-summary')).toBeVisible();
141+
await expect(
142+
page.locator('ul[class="nhsuk-list nhsuk-error-summary__list"] > li')
143+
).toHaveText(['Enter a template message']);
144+
});
145+
146+
test('Validate error messages on the create NHS App message template page with no template name', async ({
147+
page,
148+
baseURL,
149+
}) => {
150+
const createTemplatePage = new TemplateMgmtCreatePage(page);
151+
152+
await createTemplatePage.loadPage(emptySessionData.id);
38153

39154
await expect(page).toHaveURL(
40-
`${baseURL}/templates/create-nhs-app-template/${nhsAppNoTemplateSessionData.id}`
155+
`${baseURL}/templates/create-nhs-app-template/${emptySessionData.id}`
41156
);
42157
expect(await createTemplatePage.pageHeader.textContent()).toBe(
43158
'Create NHS App message template'
44159
);
160+
const templateMessage = 'Test Message box';
161+
await page.locator('[id="nhsAppTemplateMessage"]').fill(templateMessage);
162+
await createTemplatePage.clickContinueButton();
163+
await expect(page.locator('.nhsuk-error-summary')).toBeVisible();
164+
165+
await expect(
166+
page.locator('ul[class="nhsuk-list nhsuk-error-summary__list"] > li')
167+
).toHaveText(['Enter a template name']);
168+
});
169+
170+
test('5000 words Entered in Template body and word count correctly displayed', async ({
171+
page,
172+
baseURL,
173+
}) => {
174+
const createTemplatePage = new TemplateMgmtCreatePage(page);
175+
176+
await createTemplatePage.loadPage(emptySessionForTemplateCreation.id);
177+
178+
await expect(page).toHaveURL(
179+
`${baseURL}/templates/create-nhs-app-template/${emptySessionForTemplateCreation.id}`
180+
);
181+
await page.locator('[id="nhsAppTemplateName"]').fill('NHS Testing 123');
182+
await page
183+
.locator('[id="nhsAppTemplateMessage"]')
184+
.fill('T'.repeat(5000).trim());
185+
await expect(page.getByText('5000 of 5000 characters')).toBeVisible();
186+
});
187+
188+
test('5001 words attempted to be entered in Template body and only 5000 allowed', async ({
189+
page,
190+
baseURL,
191+
}) => {
192+
const createTemplatePage = new TemplateMgmtCreatePage(page);
193+
194+
await createTemplatePage.loadPage(emptySessionForTemplateCreation.id);
195+
196+
await expect(page).toHaveURL(
197+
`${baseURL}/templates/create-nhs-app-template/${emptySessionForTemplateCreation.id}`
198+
);
199+
200+
await page.locator('[id="nhsAppTemplateName"]').fill('NHS Testing 123');
201+
await page
202+
.locator('[id="nhsAppTemplateMessage"]')
203+
.fill('T'.repeat(5001).trim());
204+
await expect(page.getByText('5000 of 5000 characters')).toBeVisible();
205+
206+
const messageContent = await page
207+
.getByRole('textbox', { name: 'Message' })
208+
.textContent();
209+
210+
expect(messageContent).toHaveLength(5000);
211+
});
212+
213+
const detailsSections = [
214+
'[data-testid="personalisation-details"]',
215+
'[data-testid="lines-breaks-and-paragraphs-details"]',
216+
'[data-testid="headings-details"]',
217+
'[data-testid="bold-text-details"]',
218+
'[data-testid="link-and-url-details"]',
219+
'[data-testid="how-to-name-your-template"]',
220+
];
221+
222+
for (const section of detailsSections) {
223+
test(`personalisation mark expanding fields for ${section}`, async ({
224+
page,
225+
baseURL,
226+
}) => {
227+
const createTemplatePage = new TemplateMgmtCreatePage(page);
228+
await createTemplatePage.loadPage(emptySessionData.id);
229+
await expect(page).toHaveURL(
230+
`${baseURL}/templates/create-nhs-app-template/${emptySessionData.id}`
231+
);
232+
233+
await page.locator(`${section} > summary`).click();
234+
await expect(page.locator(section)).toHaveAttribute('open');
235+
await expect(page.locator(`${section} > div`)).toBeVisible();
236+
237+
await page.locator(`${section} > summary`).click();
238+
await expect(page.locator(section)).not.toHaveAttribute('open');
239+
await expect(page.locator(`${section} > div`)).toBeHidden();
240+
});
241+
}
242+
243+
test('Invalid session ID test', async ({ page, baseURL }) => {
244+
const createTemplatePage = new TemplateMgmtCreatePage(page);
245+
const invalidSessionId = 'invalid-session-id';
246+
await createTemplatePage.loadPage(invalidSessionId);
247+
const errorMessage = page.locator('.nhsuk-heading-xl');
248+
await Promise.all([
249+
expect(errorMessage).toBeVisible(),
250+
expect(errorMessage).toHaveText('Sorry, we could not find that page'),
251+
expect(page).toHaveURL(`${baseURL}/templates/invalid-session`),
252+
]);
45253
});
46254
});

0 commit comments

Comments
 (0)