Skip to content

Commit 2b1f03d

Browse files
committed
Update end-to-end test to add account name before inviting users
1 parent 9f3be27 commit 2b1f03d

File tree

4 files changed

+106
-16
lines changed

4 files changed

+106
-16
lines changed

application/account-management/WebApp/tests/e2e/mobile-view-flows.spec.ts

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,18 @@ test.describe("@comprehensive", () => {
2424
// Set mobile viewport
2525
await page.setViewportSize({ width: 390, height: 844 });
2626

27-
await step("Complete owner signup")(async () => {
27+
await step("Complete owner signup & verify welcome page")(async () => {
2828
await completeSignupFlow(page, expect, owner, context);
2929
})();
3030

31+
await step("Set account name & verify save confirmation")(async () => {
32+
await page.goto("/admin/account");
33+
await expect(page.getByRole("heading", { name: "Account settings" })).toBeVisible();
34+
await page.getByRole("textbox", { name: "Account name" }).fill("Mobile Nav Test");
35+
await page.getByRole("button", { name: "Save changes" }).click();
36+
await expectToastMessage(context, "Account name updated successfully");
37+
})();
38+
3139
await step("Navigate to admin dashboard & verify mobile layout")(async () => {
3240
await page.goto("/admin");
3341

@@ -357,11 +365,21 @@ test.describe("@comprehensive", () => {
357365
* - Modal behavior on mobile viewport
358366
*/
359367
test("should handle mobile form interactions and validation correctly", async ({ ownerPage }) => {
360-
createTestContext(ownerPage);
368+
const context = createTestContext(ownerPage);
361369

362370
// Set mobile viewport
363371
await ownerPage.setViewportSize({ width: 375, height: 667 });
364372

373+
await step("Set account name & verify save confirmation")(async () => {
374+
await ownerPage.goto("/admin/account");
375+
await expect(ownerPage.getByRole("heading", { name: "Account settings" })).toBeVisible();
376+
377+
await ownerPage.getByRole("textbox", { name: "Account name" }).clear();
378+
await ownerPage.getByRole("textbox", { name: "Account name" }).fill("Mobile Test Org");
379+
await ownerPage.getByRole("button", { name: "Save changes" }).click();
380+
await expectToastMessage(context, "Account name updated successfully");
381+
})();
382+
365383
await step("Navigate to users page & open invite user dialog")(async () => {
366384
await ownerPage.goto("/admin/users");
367385
// Check for either English or Danish heading
@@ -405,10 +423,18 @@ test.describe("@comprehensive", () => {
405423
// Set mobile viewport
406424
await page.setViewportSize({ width: 375, height: 667 });
407425

408-
await step("Create a fresh tenant")(async () => {
426+
await step("Create a fresh tenant & verify welcome page")(async () => {
409427
await completeSignupFlow(page, expect, user, context, true);
410428
})();
411429

430+
await step("Set account name & verify save confirmation")(async () => {
431+
await page.goto("/admin/account");
432+
await expect(page.getByRole("heading", { name: "Account settings" })).toBeVisible();
433+
await page.getByRole("textbox", { name: "Account name" }).fill("Mobile Selection Test");
434+
await page.getByRole("button", { name: "Save changes" }).click();
435+
await expectToastMessage(context, "Account name updated successfully");
436+
})();
437+
412438
// === SETUP ===
413439
await step("Navigate to users page & invite 3 test users")(async () => {
414440
await page.goto("/admin/users");

application/account-management/WebApp/tests/e2e/permission-based-ui-flows.spec.ts

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,19 @@ test.describe("@smoke", () => {
2121
const member = testUser();
2222

2323
// Create owner and member users
24-
await step("Create owner account")(async () => {
24+
await step("Create owner account with signup flow & verify welcome page")(async () => {
2525
await completeSignupFlow(page, expect, owner, context);
2626
await expect(page.getByRole("heading", { name: "Welcome home" })).toBeVisible();
2727
})();
2828

29+
await step("Set account name & verify save confirmation")(async () => {
30+
await page.goto("/admin/account");
31+
await expect(page.getByRole("heading", { name: "Account settings" })).toBeVisible();
32+
await page.getByRole("textbox", { name: "Account name" }).fill("Test Organization");
33+
await page.getByRole("button", { name: "Save changes" }).click();
34+
await expectToastMessage(context, "Account name updated successfully");
35+
})();
36+
2937
await step("Navigate to users page as Owner & verify invite button is visible")(async () => {
3038
await page.goto("/admin/users");
3139

@@ -79,7 +87,7 @@ test.describe("@smoke", () => {
7987
await expect(page.getByRole("menu")).not.toBeVisible();
8088
})();
8189

82-
await step("Invite member user")(async () => {
90+
await step("Invite member user & verify user appears in table")(async () => {
8391
// Invite member user
8492
await page.getByRole("button", { name: "Invite user" }).click();
8593
await page.getByRole("textbox", { name: "Email" }).fill(member.email);
@@ -91,7 +99,7 @@ test.describe("@smoke", () => {
9199
await expect(page.locator("tbody").first()).toContainText(member.email);
92100
})();
93101

94-
await step("Log out from owner and log in as member")(async () => {
102+
await step("Log out from owner and log in as member & verify authentication")(async () => {
95103
// Ensure the user table is stable and all users are loaded
96104
await expect(page.locator("tbody").first().locator("tr")).toHaveCount(2); // owner + member
97105

@@ -129,7 +137,7 @@ test.describe("@smoke", () => {
129137
await page.waitForURL("/admin");
130138
})();
131139

132-
await step("Complete member profile setup")(async () => {
140+
await step("Complete member profile setup & verify profile saved")(async () => {
133141
await expect(page.getByRole("dialog", { name: "User profile" })).toBeVisible();
134142
await page.getByRole("textbox", { name: "First name" }).fill(member.firstName);
135143
await page.getByRole("textbox", { name: "Last name" }).fill(member.lastName);
@@ -202,10 +210,21 @@ test.describe("@smoke", () => {
202210
const user1 = testUser();
203211
const user2 = testUser();
204212

205-
await step("Create owner account")(async () => {
213+
await step("Create owner account with signup flow & verify welcome page")(async () => {
206214
await completeSignupFlow(page, expect, owner, context);
207-
await page.goto("/admin/users");
215+
await expect(page.getByRole("heading", { name: "Welcome home" })).toBeVisible();
216+
})();
208217

218+
await step("Set account name & verify save confirmation")(async () => {
219+
await page.goto("/admin/account");
220+
await expect(page.getByRole("heading", { name: "Account settings" })).toBeVisible();
221+
await page.getByRole("textbox", { name: "Account name" }).fill("Test Organization");
222+
await page.getByRole("button", { name: "Save changes" }).click();
223+
await expectToastMessage(context, "Account name updated successfully");
224+
})();
225+
226+
await step("Navigate to users page & verify owner is listed")(async () => {
227+
await page.goto("/admin/users");
209228
await expect(page.getByRole("heading", { name: "Users" })).toBeVisible();
210229
})();
211230

@@ -266,7 +285,7 @@ test.describe("@smoke", () => {
266285
await expect(thirdRow).toHaveAttribute("aria-selected", "true");
267286
})();
268287

269-
await step("Log out as owner and log in as member")(async () => {
288+
await step("Log out as owner and log in as member & verify authentication")(async () => {
270289
// Ensure the bulk delete button is still visible and selections are stable
271290
await expect(page.getByRole("button", { name: "Delete 2 users" })).toBeVisible();
272291
await expect(page.getByRole("button", { name: "Delete 2 users" })).toBeEnabled();
@@ -304,7 +323,7 @@ test.describe("@smoke", () => {
304323
await page.waitForURL("/admin");
305324
})();
306325

307-
await step("Complete member profile setup")(async () => {
326+
await step("Complete member profile setup & verify profile saved")(async () => {
308327
await expect(page.getByRole("dialog", { name: "User profile" })).toBeVisible();
309328
await page.getByRole("textbox", { name: "First name" }).fill(member.firstName);
310329
await page.getByRole("textbox", { name: "Last name" }).fill(member.lastName);

application/account-management/WebApp/tests/e2e/user-management-flows.spec.ts

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ test.describe("@smoke", () => {
2121
const adminUser = testUser();
2222
const memberUser = testUser();
2323

24-
await step("Complete owner signup")(async () => {
24+
await step("Complete owner signup & verify welcome page")(async () => {
2525
await completeSignupFlow(page, expect, owner, context);
2626
await expect(page.getByRole("heading", { name: "Welcome home" })).toBeVisible();
2727
})();
@@ -35,6 +35,29 @@ test.describe("@smoke", () => {
3535
await expect(page.locator("tbody").first().first()).toContainText("Owner");
3636
})();
3737

38+
await step("Attempt invitation without account name & verify requirement dialog")(async () => {
39+
await page.getByRole("button", { name: "Invite user" }).click();
40+
41+
// Verify account name required dialog appears
42+
await expect(page.getByRole("dialog", { name: "Add your account name" })).toBeVisible();
43+
await expect(page.getByText("Your team needs to know who's inviting them")).toBeVisible();
44+
45+
// Navigate to account settings via dialog
46+
await page.getByRole("button", { name: "Go to account settings" }).click();
47+
await expect(page).toHaveURL("/admin/account");
48+
})();
49+
50+
await step("Set account name & verify successful save")(async () => {
51+
await expect(page.getByRole("heading", { name: "Account settings" })).toBeVisible();
52+
await page.getByRole("textbox", { name: "Account name" }).fill("Test Company");
53+
await page.getByRole("button", { name: "Save changes" }).click();
54+
await expectToastMessage(context, "Account name updated successfully");
55+
56+
// Return to users page
57+
await page.getByLabel("Main navigation").getByRole("link", { name: "Users" }).click();
58+
await expect(page.getByRole("heading", { name: "Users" })).toBeVisible();
59+
})();
60+
3861
// Email validation is comprehensively tested in signup-flows.spec.ts
3962

4063
await step("Invite member user & verify successful invitation")(async () => {
@@ -165,7 +188,7 @@ test.describe("@smoke", () => {
165188
await expect(userTable).toContainText(owner.email);
166189
})();
167190

168-
await step("Logout from owner account")(async () => {
191+
await step("Logout from owner account & verify redirect to login")(async () => {
169192
// Mark 401 as expected during logout transition (React Query may have in-flight requests)
170193
context.monitoring.expectedStatusCodes.push(401);
171194

@@ -188,7 +211,7 @@ test.describe("@smoke", () => {
188211
await expect(page).toHaveURL("/admin");
189212
})();
190213

191-
await step("Complete admin user profile setup")(async () => {
214+
await step("Complete admin user profile setup & verify profile saved")(async () => {
192215
await expect(page.getByRole("dialog", { name: "User profile" })).toBeVisible();
193216
await page.getByRole("textbox", { name: "First name" }).fill(adminUser.firstName);
194217
await page.getByRole("textbox", { name: "Last name" }).fill(adminUser.lastName);
@@ -242,10 +265,21 @@ test.describe("@comprehensive", () => {
242265
const user3 = testUser();
243266

244267
// === USER SETUP SECTION ===
245-
await step("Complete owner signup")(async () => {
268+
await step("Complete owner signup & verify welcome page")(async () => {
246269
await completeSignupFlow(page, expect, owner, context);
247-
await page.goto("/admin/users");
270+
await expect(page.getByRole("heading", { name: "Welcome home" })).toBeVisible();
271+
})();
248272

273+
await step("Set account name for user invitations")(async () => {
274+
await page.goto("/admin/account");
275+
await expect(page.getByRole("heading", { name: "Account settings" })).toBeVisible();
276+
await page.getByRole("textbox", { name: "Account name" }).fill("Test Company");
277+
await page.getByRole("button", { name: "Save changes" }).click();
278+
await expectToastMessage(context, "Account name updated successfully");
279+
})();
280+
281+
await step("Navigate to users page & verify owner is listed")(async () => {
282+
await page.goto("/admin/users");
249283
await expect(page.getByRole("heading", { name: "Users" })).toBeVisible();
250284
})();
251285

application/shared-webapp/tests/e2e/fixtures/page-auth.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,17 @@ async function performFreshAuthentication(
6262
const testContext = createTestContext(page);
6363
await completeSignupFlow(page, expect, user, testContext);
6464

65+
// Set account name for Owner role to allow user invitations
66+
if (role === "Owner") {
67+
await page.goto("/admin/account");
68+
await expect(page.getByRole("heading", { name: "Account settings" })).toBeVisible();
69+
await page.getByRole("textbox", { name: "Account name" }).fill("Test Organization");
70+
await page.getByRole("button", { name: "Save" }).click();
71+
72+
const { expectToastMessage } = await import("../utils/test-assertions.js");
73+
await expectToastMessage(testContext, "Account name updated successfully");
74+
}
75+
6576
// Ensure any modal dialogs are closed by waiting for them to disappear
6677
try {
6778
await page.locator('[role="dialog"]').waitFor({ state: "detached", timeout: 2000 });

0 commit comments

Comments
 (0)