From ff13ade1b6b1f38c2a49e466762b4954b72cc78a Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Thu, 28 May 2026 22:41:30 -0700 Subject: [PATCH] test(e2e): harden team-admin member specs per review feedback Address Greptile feedback on the Team Admin spec: - locate the delete action via getByTestId("delete-member") instead of the fragile svg/img .last() selector - match the seeded removable member by user_id (members_with_roles stores no email, so the roster renders user_id) - assert exact success-toast strings rather than broad regexes that could match unrelated "success" text --- .../e2e_tests/tests/team-admin/teamAdmin.spec.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ui/litellm-dashboard/e2e_tests/tests/team-admin/teamAdmin.spec.ts b/ui/litellm-dashboard/e2e_tests/tests/team-admin/teamAdmin.spec.ts index 4091b624649..1612e6929bd 100644 --- a/ui/litellm-dashboard/e2e_tests/tests/team-admin/teamAdmin.spec.ts +++ b/ui/litellm-dashboard/e2e_tests/tests/team-admin/teamAdmin.spec.ts @@ -60,7 +60,7 @@ test.describe("Team Admin", () => { await modal.getByRole("button", { name: /Add Member/i }).click(); - await expect(page.getByText(/member.*added|success/i).first()) + await expect(page.getByText("Team member added successfully").first()) .toBeVisible({ timeout: 10_000 }); }); @@ -72,17 +72,17 @@ test.describe("Team Admin", () => { await page.getByRole("tab", { name: "Members" }).click(); - // Find the row for the seeded removable member and click its delete icon. - const row = page.locator("tr", { hasText: "removable@test.local" }).first(); + // Seeded members appear in the roster by user_id (members_with_roles has no + // email), so match the row on the user_id rather than the email. + const row = page.locator("tr", { hasText: "e2e-removable-member" }).first(); await expect(row).toBeVisible({ timeout: 10_000 }); - // The trash icon sits in the Actions column at the end of the row. - await row.locator("svg, img").last().click(); + await row.getByTestId("delete-member").click(); const modal = page.locator(".ant-modal:visible"); await expect(modal).toBeVisible({ timeout: 5_000 }); await modal.getByRole("button", { name: /^Delete$/ }).click(); - await expect(page.getByText(/removed|deleted|success/i).first()) + await expect(page.getByText("Team member removed successfully").first()) .toBeVisible({ timeout: 10_000 }); });