Skip to content

Commit 96b5899

Browse files
committed
CCM-8426: add ui tests for the create pages
1 parent 23a1077 commit 96b5899

12 files changed

+1170
-319
lines changed

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,7 @@ export class TemplateMgmtCreateEmailPage extends TemplateMgmtBasePage {
3838
this.messageFormatting = new TemplateMgmtMessageFormatting(page);
3939
}
4040

41-
async loadPage(templateId?: string) {
42-
await this.navigateTo(
43-
templateId
44-
? `/templates/edit-email-template/${templateId}`
45-
: '/templates/create-email-template'
46-
);
41+
async loadPage() {
42+
await this.navigateTo('/templates/create-email-template');
4743
}
4844
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { Locator, Page } from '@playwright/test';
2+
import { TemplateMgmtBasePage } from '../template-mgmt-base-page';
3+
import { TemplateMgmtMessageFormatting } from '../template-mgmt-message-formatting';
4+
5+
export class TemplateMgmtEditEmailPage extends TemplateMgmtBasePage {
6+
public readonly nameInput: Locator;
7+
8+
public readonly subjectLineInput: Locator;
9+
10+
public readonly messageTextArea: Locator;
11+
12+
public readonly errorSummary: Locator;
13+
14+
public readonly personalisationFields: Locator;
15+
16+
public readonly namingYourTemplate: Locator;
17+
18+
public readonly messageFormatting: TemplateMgmtMessageFormatting;
19+
20+
constructor(page: Page) {
21+
super(page);
22+
this.nameInput = page.locator('[id="emailTemplateName"]');
23+
this.subjectLineInput = page.locator('[id="emailTemplateSubjectLine"]');
24+
this.messageTextArea = page.locator('[id="emailTemplateMessage"]');
25+
this.errorSummary = page.locator('[class="nhsuk-error-summary"]');
26+
this.personalisationFields = page.locator(
27+
'[data-testid="personalisation-details"]'
28+
);
29+
this.namingYourTemplate = page.locator(
30+
'[data-testid="how-to-name-your-template"]'
31+
);
32+
33+
this.messageFormatting = new TemplateMgmtMessageFormatting(page);
34+
}
35+
36+
async loadPage(templateId: string) {
37+
await this.navigateTo(`/templates/edit-email-template/${templateId}`);
38+
}
39+
}

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,7 @@ export class TemplateMgmtCreateNhsAppPage extends TemplateMgmtBasePage {
3737
this.messageFormatting = new TemplateMgmtMessageFormatting(page);
3838
}
3939

40-
async loadPage(templateId?: string) {
41-
await this.navigateTo(
42-
templateId
43-
? `/templates/edit-nhs-app-template/${templateId}`
44-
: '/templates/create-nhs-app-template'
45-
);
40+
async loadPage() {
41+
await this.navigateTo('/templates/create-nhs-app-template');
4642
}
4743
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { Locator, Page } from '@playwright/test';
2+
import { TemplateMgmtBasePage } from '../template-mgmt-base-page';
3+
import { TemplateMgmtMessageFormatting } from '../template-mgmt-message-formatting';
4+
5+
export class TemplateMgmtEditNhsAppPage extends TemplateMgmtBasePage {
6+
public readonly nameInput: Locator;
7+
8+
public readonly messageTextArea: Locator;
9+
10+
public readonly errorSummary: Locator;
11+
12+
public readonly personalisationFields: Locator;
13+
14+
public readonly namingYourTemplate: Locator;
15+
16+
public readonly characterCountText: Locator;
17+
18+
public readonly messageFormatting: TemplateMgmtMessageFormatting;
19+
20+
constructor(page: Page) {
21+
super(page);
22+
this.nameInput = page.locator('[id="nhsAppTemplateName"]');
23+
this.messageTextArea = page.locator('[id="nhsAppTemplateMessage"]');
24+
this.errorSummary = page.locator('[class="nhsuk-error-summary"]');
25+
this.personalisationFields = page.locator(
26+
'[data-testid="personalisation-details"]'
27+
);
28+
this.namingYourTemplate = page.locator(
29+
'[data-testid="how-to-name-your-template"]'
30+
);
31+
this.characterCountText = page.locator('[id="character-count"]');
32+
this.messageFormatting = new TemplateMgmtMessageFormatting(page);
33+
}
34+
35+
async loadPage(templateId: string) {
36+
await this.navigateTo(`/templates/edit-nhs-app-template/${templateId}`);
37+
}
38+
}

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,7 @@ export class TemplateMgmtCreateSmsPage extends TemplateMgmtBasePage {
4141
this.messageFormatting = new TemplateMgmtMessageFormatting(page);
4242
}
4343

44-
async loadPage(templateId?: string) {
45-
await this.navigateTo(
46-
templateId
47-
? `/templates/edit-text-message-template/${templateId}`
48-
: '/templates/create-text-message-template'
49-
);
44+
async loadPage() {
45+
await this.navigateTo('/templates/create-text-message-template');
5046
}
5147
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { Locator, Page } from '@playwright/test';
2+
import { TemplateMgmtBasePage } from '../template-mgmt-base-page';
3+
import { TemplateMgmtMessageFormatting } from '../template-mgmt-message-formatting';
4+
5+
export class TemplateMgmtEditSmsPage extends TemplateMgmtBasePage {
6+
public readonly nameInput: Locator;
7+
8+
public readonly messageTextArea: Locator;
9+
10+
public readonly errorSummary: Locator;
11+
12+
public readonly personalisationFields: Locator;
13+
14+
public readonly namingYourTemplate: Locator;
15+
16+
public readonly pricingLink: Locator;
17+
18+
public readonly characterCountText: Locator;
19+
20+
public readonly messageFormatting: TemplateMgmtMessageFormatting;
21+
22+
constructor(page: Page) {
23+
super(page);
24+
this.nameInput = page.locator('[id="smsTemplateName"]');
25+
this.messageTextArea = page.locator('[id="smsTemplateMessage"]');
26+
this.errorSummary = page.locator('[class="nhsuk-error-summary"]');
27+
this.personalisationFields = page.locator(
28+
'[data-testid="personalisation-details"]'
29+
);
30+
this.namingYourTemplate = page.locator(
31+
'[data-testid="how-to-name-your-template"]'
32+
);
33+
this.pricingLink = page.locator('[data-testid="sms-pricing-link"]');
34+
this.characterCountText = page.locator('[id="character-count"]');
35+
36+
this.messageFormatting = new TemplateMgmtMessageFormatting(page);
37+
}
38+
39+
async loadPage(templateId: string) {
40+
await this.navigateTo(`/templates/edit-text-message-template/${templateId}`);
41+
}
42+
}

tests/test-team/template-mgmt-component-tests/email/template-mgmt-create-email-page.component.spec.ts

Lines changed: 25 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,29 @@
11
import { test, expect } from '@playwright/test';
22
import { TemplateStorageHelper } from '../../helpers/db/template-storage-helper';
33
import { TemplateMgmtCreateEmailPage } from '../../pages/email/template-mgmt-create-email-page';
4-
import { TemplateFactory } from '../../helpers/factories/template-factory';
54
import {
65
assertFooterLinks,
76
assertGoBackLink,
87
assertLogoutLink,
9-
assertGoBackLinkNotPresent,
108
assertNotifyBannerLink,
119
assertSkipToMainContent,
1210
} from '../template-mgmt-common.steps';
13-
import { TemplateType } from '../../helpers/types';
1411
import {
1512
createAuthHelper,
13+
TestUser,
1614
TestUserId,
1715
} from '../../helpers/auth/cognito-auth-helper';
1816

19-
function createTemplates(owner: string) {
20-
return {
21-
empty: TemplateFactory.createEmailTemplate('empty-email-template', owner),
22-
submit: TemplateFactory.createEmailTemplate('submit-email-template', owner),
23-
submitAndReturn: TemplateFactory.createEmailTemplate(
24-
'submit-and-return-create-email-template',
25-
owner
26-
),
27-
goBackAndReturn: TemplateFactory.createEmailTemplate(
28-
'go-back-email-template',
29-
owner
30-
),
31-
noEmailTemplateType: TemplateFactory.create({
32-
id: 'no-email-template-type-template',
33-
templateType: TemplateType.NHS_APP,
34-
owner,
35-
}),
36-
previousData: {
37-
...TemplateFactory.createEmailTemplate(
38-
'previous-data-email-template',
39-
owner
40-
),
41-
name: 'previous-data-email-template',
42-
subject: 'previous-data-email-template-subject-line',
43-
message: 'previous-data-email-template-message',
44-
},
45-
};
46-
}
47-
4817
test.describe('Create Email message template Page', () => {
49-
let templates: ReturnType<typeof createTemplates>;
5018
const templateStorageHelper = new TemplateStorageHelper();
19+
let user: TestUser;
5120

5221
test.beforeAll(async () => {
53-
const user = await createAuthHelper().getTestUser(TestUserId.User1);
54-
templates = createTemplates(user.userId);
55-
await templateStorageHelper.seedTemplateData(Object.values(templates));
22+
user = await createAuthHelper().getTestUser(TestUserId.User1);
5623
});
5724

5825
test.afterAll(async () => {
59-
await templateStorageHelper.deleteSeededTemplates();
26+
await templateStorageHelper.deleteAdHocTemplates();
6027
});
6128

6229
test('when user visits page, then page is loaded', async ({
@@ -65,10 +32,10 @@ test.describe('Create Email message template Page', () => {
6532
}) => {
6633
const createEmailTemplatePage = new TemplateMgmtCreateEmailPage(page);
6734

68-
await createEmailTemplatePage.loadPage(templates.empty.id);
35+
await createEmailTemplatePage.loadPage();
6936

7037
await expect(page).toHaveURL(
71-
`${baseURL}/templates/edit-email-template/${templates.empty.id}`
38+
`${baseURL}/templates/create-email-template`
7239
);
7340

7441
expect(await createEmailTemplatePage.pageHeader.textContent()).toBe(
@@ -93,40 +60,12 @@ test.describe('Create Email message template Page', () => {
9360
});
9461
});
9562

96-
test('edit page has no go back link', async ({ page, baseURL }) => {
97-
const props = {
98-
page: new TemplateMgmtCreateEmailPage(page),
99-
id: templates.empty.id,
100-
baseURL,
101-
};
102-
103-
await assertGoBackLinkNotPresent(props);
104-
});
105-
106-
test('when user visits page with previous data, then form fields retain previous data', async ({
107-
page,
108-
}) => {
109-
const createEmailTemplatePage = new TemplateMgmtCreateEmailPage(page);
110-
111-
await createEmailTemplatePage.loadPage(templates.previousData.id);
112-
113-
await expect(createEmailTemplatePage.nameInput).toHaveValue(
114-
templates.previousData.name
115-
);
116-
await expect(createEmailTemplatePage.subjectLineInput).toHaveValue(
117-
templates.previousData.subject
118-
);
119-
await expect(createEmailTemplatePage.messageTextArea).toHaveValue(
120-
templates.previousData.message
121-
);
122-
});
123-
12463
test('when user clicks "Personalisation" tool tips, then tool tips are displayed', async ({
12564
page,
12665
}) => {
12766
const createEmailTemplatePage = new TemplateMgmtCreateEmailPage(page);
12867

129-
await createEmailTemplatePage.loadPage(templates.goBackAndReturn.id);
68+
await createEmailTemplatePage.loadPage();
13069

13170
await createEmailTemplatePage.personalisationFields.click();
13271

@@ -140,7 +79,7 @@ test.describe('Create Email message template Page', () => {
14079
}) => {
14180
const createEmailTemplatePage = new TemplateMgmtCreateEmailPage(page);
14281

143-
await createEmailTemplatePage.loadPage(templates.empty.id);
82+
await createEmailTemplatePage.loadPage();
14483

14584
await createEmailTemplatePage.messageFormatting.assertDetailsOpen([
14685
createEmailTemplatePage.messageFormatting.lineBreaksAndParagraphs,
@@ -188,7 +127,7 @@ test.describe('Create Email message template Page', () => {
188127
}) => {
189128
const createEmailTemplatePage = new TemplateMgmtCreateEmailPage(page);
190129

191-
await createEmailTemplatePage.loadPage(templates.empty.id);
130+
await createEmailTemplatePage.loadPage();
192131

193132
await createEmailTemplatePage.namingYourTemplate.click({
194133
position: { x: 0, y: 0 },
@@ -199,12 +138,11 @@ test.describe('Create Email message template Page', () => {
199138
});
200139

201140
test('when user submits form with valid data, then the next page is displayed', async ({
202-
baseURL,
203141
page,
204142
}) => {
205143
const createEmailTemplatePage = new TemplateMgmtCreateEmailPage(page);
206144

207-
await createEmailTemplatePage.loadPage(templates.submit.id);
145+
await createEmailTemplatePage.loadPage();
208146

209147
await createEmailTemplatePage.nameInput.fill(
210148
'This is an email template name'
@@ -220,41 +158,30 @@ test.describe('Create Email message template Page', () => {
220158

221159
await createEmailTemplatePage.clickSubmitButton();
222160

161+
const previewPageRegex = "\\/templates\\/preview-email-template\\/([0-9a-fA-F-]+)(?:\\?from=edit)?$";
162+
223163
await expect(page).toHaveURL(
224-
`${baseURL}/templates/preview-email-template/${templates.submit.id}?from=edit`
164+
RegExp(previewPageRegex)
225165
);
226-
});
227-
});
228166

229-
test.describe('Error handling', () => {
230-
test('when user visits page with mismatched template journey, then an invalid template error is displayed', async ({
231-
baseURL,
232-
page,
233-
}) => {
234-
const createEmailTemplatePage = new TemplateMgmtCreateEmailPage(page);
167+
const previewPageParts = page.url().match(previewPageRegex);
235168

236-
await createEmailTemplatePage.loadPage(templates.noEmailTemplateType.id);
237-
238-
await expect(page).toHaveURL(`${baseURL}/templates/invalid-template`);
239-
});
169+
expect(previewPageParts?.length).toEqual(2);
240170

241-
test('when user visits page with a fake template, then an invalid template error is displayed', async ({
242-
baseURL,
243-
page,
244-
}) => {
245-
const createEmailTemplatePage = new TemplateMgmtCreateEmailPage(page);
246-
247-
await createEmailTemplatePage.loadPage('/fake-template-id');
248-
249-
await expect(page).toHaveURL(`${baseURL}/templates/invalid-template`);
171+
templateStorageHelper.addAdHocTemplateKey({
172+
id: previewPageParts![1],
173+
owner: user.userId,
174+
});
250175
});
176+
});
251177

178+
test.describe('Error handling', () => {
252179
test('when user submits form with no data, then errors are displayed', async ({
253180
page,
254181
}) => {
255182
const createEmailTemplatePage = new TemplateMgmtCreateEmailPage(page);
256183

257-
await createEmailTemplatePage.loadPage(templates.empty.id);
184+
await createEmailTemplatePage.loadPage();
258185

259186
await createEmailTemplatePage.clickSubmitButton();
260187

@@ -290,7 +217,7 @@ test.describe('Create Email message template Page', () => {
290217

291218
const createEmailTemplatePage = new TemplateMgmtCreateEmailPage(page);
292219

293-
await createEmailTemplatePage.loadPage(templates.empty.id);
220+
await createEmailTemplatePage.loadPage();
294221

295222
await createEmailTemplatePage.subjectLineInput.fill(
296223
'template-subject-line'
@@ -318,7 +245,7 @@ test.describe('Create Email message template Page', () => {
318245

319246
const createEmailTemplatePage = new TemplateMgmtCreateEmailPage(page);
320247

321-
await createEmailTemplatePage.loadPage(templates.empty.id);
248+
await createEmailTemplatePage.loadPage();
322249

323250
await createEmailTemplatePage.nameInput.fill('template-name');
324251

@@ -345,7 +272,7 @@ test.describe('Create Email message template Page', () => {
345272

346273
const createEmailTemplatePage = new TemplateMgmtCreateEmailPage(page);
347274

348-
await createEmailTemplatePage.loadPage(templates.empty.id);
275+
await createEmailTemplatePage.loadPage();
349276

350277
await createEmailTemplatePage.nameInput.fill('template-name');
351278

0 commit comments

Comments
 (0)