Skip to content

Commit c53c390

Browse files
committed
Factor out member dialog fixture
1 parent 83dd0ba commit c53c390

File tree

3 files changed

+108
-46
lines changed

3 files changed

+108
-46
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import type { Locator, Page } from "@playwright/test";
2+
3+
import { faker } from "@faker-js/faker";
4+
5+
import { MemberRole } from "db/public";
6+
7+
export class AddMemberDialog {
8+
constructor(
9+
public readonly page: Page,
10+
public readonly dialog: Locator
11+
) {
12+
this.page = page;
13+
this.dialog = dialog;
14+
}
15+
16+
async addNewUser(
17+
email = faker.internet.email(),
18+
{
19+
firstName = faker.person.firstName(),
20+
lastName = faker.person.lastName(),
21+
isSuperAdmin = false,
22+
role = MemberRole.editor,
23+
forms = [],
24+
}: {
25+
firstName: string;
26+
lastName: string;
27+
isSuperAdmin: boolean;
28+
role: MemberRole;
29+
forms: string[];
30+
} = {
31+
firstName: faker.person.firstName(),
32+
lastName: faker.person.lastName(),
33+
isSuperAdmin: false,
34+
role: MemberRole.editor,
35+
forms: [],
36+
}
37+
) {
38+
await this.dialog.getByLabel("Email").fill(email);
39+
40+
await this.page.locator('input[name="firstName"]').fill(firstName);
41+
await this.page.locator('input[name="lastName"]').fill(lastName);
42+
if (isSuperAdmin) {
43+
await this.page.getByLabel("Make user superadmin").click();
44+
}
45+
46+
await this.page.getByLabel("Role").click();
47+
await this.page.getByLabel(role[0].toUpperCase() + role.slice(1)).click();
48+
49+
if (role === MemberRole.contributor && forms.length) {
50+
await this.selectForms(forms);
51+
}
52+
53+
await this.page.getByRole("button", { name: "Invite" }).click();
54+
55+
await this.page.getByText("User successfully invited", { exact: true }).waitFor();
56+
await this.dialog.waitFor({ state: "hidden" });
57+
58+
return {
59+
email,
60+
firstName,
61+
lastName,
62+
isSuperAdmin,
63+
role,
64+
};
65+
}
66+
67+
/**
68+
* @param forms An array of form names to add to this membership
69+
*/
70+
async addExistingUser(email: string, role = MemberRole.editor, forms: string[] = []) {
71+
await this.dialog.getByLabel("Email").fill(email);
72+
73+
await this.page.getByLabel("Role").click();
74+
await this.page.getByLabel(role[0].toUpperCase() + role.slice(1)).click();
75+
76+
if (role === MemberRole.contributor && forms.length) {
77+
await this.selectForms(forms);
78+
}
79+
80+
await this.page.getByRole("button", { name: "Add Member" }).click();
81+
82+
await this.page.getByText("Member added successfully", { exact: true }).waitFor();
83+
await this.dialog.waitFor({ state: "hidden" });
84+
}
85+
86+
async selectForms(forms: string[]) {
87+
const button = this.page.getByRole("button", { name: "Edit/View Access", exact: true });
88+
await button.click();
89+
for (const form of forms) {
90+
await this.page.getByRole("option", { name: form, exact: true }).click();
91+
}
92+
await button.click();
93+
}
94+
}

core/playwright/fixtures/member-page.ts

Lines changed: 7 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import { faker } from "@faker-js/faker";
44

55
import { MemberRole } from "db/public";
66

7+
import { AddMemberDialog } from "./member-dialog";
8+
79
export class MembersPage {
810
private readonly communitySlug: string;
911

@@ -26,7 +28,7 @@ export class MembersPage {
2628
await this.page.getByText(/Add Member/).click();
2729
const addMemberDialog = this.page.getByRole("dialog", { name: "Add Member" });
2830
await addMemberDialog.waitFor();
29-
return addMemberDialog;
31+
return new AddMemberDialog(this.page, addMemberDialog);
3032
}
3133

3234
async addNewUser(
@@ -52,62 +54,21 @@ export class MembersPage {
5254
}
5355
) {
5456
const addMemberDialog = await this.openAddMemberDialog();
55-
await addMemberDialog.getByLabel("Email").fill(email);
56-
57-
await this.page.locator('input[name="firstName"]').fill(firstName);
58-
await this.page.locator('input[name="lastName"]').fill(lastName);
59-
if (isSuperAdmin) {
60-
await this.page.getByLabel("Make user superadmin").click();
61-
}
62-
63-
await this.page.getByLabel("Role").click();
64-
await this.page.getByLabel(role[0].toUpperCase() + role.slice(1)).click();
65-
66-
if (role === MemberRole.contributor && forms.length) {
67-
await this.selectForms(forms);
68-
}
69-
70-
await this.page.getByRole("button", { name: "Invite" }).click();
71-
72-
await this.page.getByText("User successfully invited", { exact: true }).waitFor();
73-
await addMemberDialog.waitFor({ state: "hidden" });
74-
75-
return {
76-
email,
57+
return await addMemberDialog.addNewUser(email, {
7758
firstName,
7859
lastName,
7960
isSuperAdmin,
8061
role,
81-
};
62+
forms,
63+
});
8264
}
8365

8466
/**
8567
* @param forms An array of form names to add to this membership
8668
*/
8769
async addExistingUser(email: string, role = MemberRole.editor, forms: string[] = []) {
8870
const addMemberDialog = await this.openAddMemberDialog();
89-
await addMemberDialog.getByLabel("Email").fill(email);
90-
91-
await this.page.getByLabel("Role").click();
92-
await this.page.getByLabel(role[0].toUpperCase() + role.slice(1)).click();
93-
94-
if (role === MemberRole.contributor && forms.length) {
95-
await this.selectForms(forms);
96-
}
97-
98-
await this.page.getByRole("button", { name: "Add Member" }).click();
99-
100-
await this.page.getByText("Member added successfully", { exact: true }).waitFor();
101-
await addMemberDialog.waitFor({ state: "hidden" });
102-
}
103-
104-
async selectForms(forms: string[]) {
105-
const button = this.page.getByRole("button", { name: "Edit/View Access", exact: true });
106-
await button.click();
107-
for (const form of forms) {
108-
await this.page.getByRole("option", { name: form, exact: true }).click();
109-
}
110-
await button.click();
71+
return await addMemberDialog.addExistingUser(email, role, forms);
11172
}
11273

11374
async removeMember(email: string) {

core/playwright/fixtures/pub-details-page.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,11 @@ export class PubDetailsPage {
3636
await runActionDialog.waitFor({ state: "hidden" });
3737
}
3838
}
39+
40+
async openAddMemberDialog() {
41+
await this.page.getByText("Add Member", { exact: true }).click();
42+
const addMemberDialog = this.page.getByRole("dialog", { name: "Add Member" });
43+
await addMemberDialog.waitFor();
44+
return addMemberDialog;
45+
}
3946
}

0 commit comments

Comments
 (0)