From f9c376cb51a14204ec4a2315c76bbc455172ee36 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Thu, 4 Apr 2024 13:09:31 +0000 Subject: [PATCH 01/10] Add create group test --- site/e2e/tests/groups/createGroup.spec.ts | 27 +++++++++++++++++++++++ site/src/pages/UsersPage/UsersLayout.tsx | 11 +++++---- 2 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 site/e2e/tests/groups/createGroup.spec.ts diff --git a/site/e2e/tests/groups/createGroup.spec.ts b/site/e2e/tests/groups/createGroup.spec.ts new file mode 100644 index 0000000000000..8ed40dac4f0f1 --- /dev/null +++ b/site/e2e/tests/groups/createGroup.spec.ts @@ -0,0 +1,27 @@ +import { test, expect } from "@playwright/test"; +import { randomName } from "../../helpers"; +import { beforeCoderTest } from "../../hooks"; + +test.beforeEach(async ({ page }) => await beforeCoderTest(page)); + +test("create group", async ({ page, baseURL }) => { + await page.goto(`${baseURL}/groups`, { waitUntil: "domcontentloaded" }); + await expect(page).toHaveTitle("Groups - Coder"); + + await page.getByRole("button", { name: "Create group" }).click(); + await expect(page).toHaveTitle("Create Group - Coder"); + + const name = randomName(); + const groupValues = { + name: name, + displayName: `Display Name for ${name}`, + avatarURL: "/emojis/1f60d.png", + }; + + await page.getByLabel("Name", { exact: true }).fill(groupValues.name); + await page.getByLabel("Display Name").fill(groupValues.displayName); + await page.getByLabel("Avatar URL").fill(groupValues.avatarURL); + await page.getByRole("button", { name: "Submit" }).click(); + await expect(page).toHaveTitle(`${groupValues.displayName} - Coder`); + await expect(page.getByText(groupValues.displayName)).toBeVisible(); +}); diff --git a/site/src/pages/UsersPage/UsersLayout.tsx b/site/src/pages/UsersPage/UsersLayout.tsx index dc39ae33acc23..bb85cae1b03b8 100644 --- a/site/src/pages/UsersPage/UsersLayout.tsx +++ b/site/src/pages/UsersPage/UsersLayout.tsx @@ -1,7 +1,6 @@ import GroupAdd from "@mui/icons-material/GroupAddOutlined"; import PersonAdd from "@mui/icons-material/PersonAddOutlined"; import Button from "@mui/material/Button"; -import Link from "@mui/material/Link"; import { type FC, Suspense } from "react"; import { Link as RouterLink, @@ -43,9 +42,13 @@ export const UsersLayout: FC = () => { )} {canCreateGroup && isTemplateRBACEnabled && ( - - - + )} } From 89237fca55de999f82ccdf8f938e6827d996ee97 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Thu, 4 Apr 2024 13:21:00 +0000 Subject: [PATCH 02/10] Add remove group test --- site/e2e/tests/groups/removeGroup.spec.ts | 35 +++++++++++++++++++++++ site/src/pages/GroupsPage/GroupPage.tsx | 1 + 2 files changed, 36 insertions(+) create mode 100644 site/e2e/tests/groups/removeGroup.spec.ts diff --git a/site/e2e/tests/groups/removeGroup.spec.ts b/site/e2e/tests/groups/removeGroup.spec.ts new file mode 100644 index 0000000000000..1b18939c57b45 --- /dev/null +++ b/site/e2e/tests/groups/removeGroup.spec.ts @@ -0,0 +1,35 @@ +import { test, expect } from "@playwright/test"; +import * as API from "api/api"; +import { randomName, setupApiCalls } from "../../helpers"; +import { beforeCoderTest } from "../../hooks"; + +test.beforeEach(async ({ page }) => await beforeCoderTest(page)); + +test("remove group", async ({ page, baseURL }) => { + await setupApiCalls(page); + const currentUser = await API.getAuthenticatedUser(); + const name = randomName(); + const orgId = currentUser.organization_ids[0]; + const group = await API.createGroup(orgId, { + name, + display_name: `Display Name of ${name}`, + avatar_url: "/emojis/1f60d.png", + quota_allowance: 0, + }); + + await page.goto(`${baseURL}/groups`, { waitUntil: "domcontentloaded" }); + await expect(page).toHaveTitle("Groups - Coder"); + + const groupRow = page.locator("tr", { hasText: group.display_name }); + await groupRow.click(); + + await expect(page).toHaveTitle(`${group.display_name} - Coder`); + await page.getByRole("button", { name: "Delete" }).click(); + + const dialog = page.getByTestId("dialog"); + await dialog.getByLabel("Name of the group to delete").fill(group.name); + await dialog.getByRole("button", { name: "Delete" }).click(); + await expect(page.getByText("Group deleted successfully.")).toBeVisible(); + + await expect(page).toHaveTitle("Groups - Coder"); +}); diff --git a/site/src/pages/GroupsPage/GroupPage.tsx b/site/src/pages/GroupsPage/GroupPage.tsx index f1f3a7bd24fc9..01e8dc250b13b 100644 --- a/site/src/pages/GroupsPage/GroupPage.tsx +++ b/site/src/pages/GroupsPage/GroupPage.tsx @@ -197,6 +197,7 @@ export const GroupPage: FC = () => { onConfirm={async () => { try { await deleteGroupMutation.mutateAsync(groupId); + displaySuccess("Group deleted successfully."); navigate("/groups"); } catch (error) { displayError(getErrorMessage(error, "Failed to delete group.")); From 438aa6f906a2aa943e4cc2a75f39f6aeebf9c1be Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Thu, 4 Apr 2024 13:43:58 +0000 Subject: [PATCH 03/10] Add add members test --- site/e2e/api.ts | 45 +++++++++++++++++++++++ site/e2e/helpers.ts | 7 ---- site/e2e/tests/groups/addMembers.spec.ts | 34 +++++++++++++++++ site/e2e/tests/groups/createGroup.spec.ts | 2 + site/e2e/tests/groups/removeGroup.spec.ts | 16 ++------ site/e2e/tests/users/removeUser.spec.ts | 17 ++------- 6 files changed, 89 insertions(+), 32 deletions(-) create mode 100644 site/e2e/api.ts create mode 100644 site/e2e/tests/groups/addMembers.spec.ts diff --git a/site/e2e/api.ts b/site/e2e/api.ts new file mode 100644 index 0000000000000..220595464fefe --- /dev/null +++ b/site/e2e/api.ts @@ -0,0 +1,45 @@ +import type { Page } from "@playwright/test"; +import * as API from "api/api"; +import { coderPort } from "./constants"; +import { findSessionToken, randomName } from "./helpers"; + +let currentOrgId: string; + +export const setupApiCalls = async (page: Page) => { + const token = await findSessionToken(page); + API.setSessionToken(token); + API.setHost(`http://127.0.0.1:${coderPort}`); +}; + +export const getCurrentOrgId = async (): Promise => { + if (currentOrgId) { + return currentOrgId; + } + const currentUser = await API.getAuthenticatedUser(); + currentOrgId = currentUser.organization_ids[0]; + return currentOrgId; +}; + +export const createUser = async (orgId: string) => { + const name = randomName(); + const user = await API.createUser({ + email: `${name}@coder.com`, + username: name, + password: "s3cure&password!", + login_type: "password", + disable_login: false, + organization_id: orgId, + }); + return user; +}; + +export const createGroup = async (orgId: string) => { + const name = randomName(); + const group = await API.createGroup(orgId, { + name, + display_name: `Display Name of ${name}`, + avatar_url: "/emojis/1f60d.png", + quota_allowance: 0, + }); + return group; +}; diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index 84b1b911c975d..a1fb47816f236 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -7,7 +7,6 @@ import capitalize from "lodash/capitalize"; import path from "path"; import * as ssh from "ssh2"; import { Duplex } from "stream"; -import * as API from "api/api"; import type { WorkspaceBuildParameter, UpdateTemplateMeta, @@ -826,9 +825,3 @@ export async function openTerminalWindow( return terminal; } - -export const setupApiCalls = async (page: Page) => { - const token = await findSessionToken(page); - API.setSessionToken(token); - API.setHost(`http://127.0.0.1:${coderPort}`); -}; diff --git a/site/e2e/tests/groups/addMembers.spec.ts b/site/e2e/tests/groups/addMembers.spec.ts new file mode 100644 index 0000000000000..358351c61674e --- /dev/null +++ b/site/e2e/tests/groups/addMembers.spec.ts @@ -0,0 +1,34 @@ +import { test, expect } from "@playwright/test"; +import { + createGroup, + createUser, + getCurrentOrgId, + setupApiCalls, +} from "../../api"; +import { beforeCoderTest } from "../../hooks"; + +test.beforeEach(async ({ page }) => await beforeCoderTest(page)); + +test("add members", async ({ page, baseURL }) => { + await setupApiCalls(page); + const orgId = await getCurrentOrgId(); + const group = await createGroup(orgId); + const numberOfMembers = 3; + const users = await Promise.all( + Array.from({ length: numberOfMembers }, () => createUser(orgId)), + ); + + await page.goto(`${baseURL}/groups`, { waitUntil: "domcontentloaded" }); + await expect(page).toHaveTitle("Groups - Coder"); + + const groupRow = page.getByRole("row", { name: group.display_name }); + await groupRow.click(); + await expect(page).toHaveTitle(`${group.display_name} - Coder`); + + for (const user of users) { + await page.getByPlaceholder("User email or username").fill(user.username); + await page.getByRole("option", { name: user.email }).click(); + await page.getByRole("button", { name: "Add user" }).click(); + await expect(page.getByRole("row", { name: user.username })).toBeVisible(); + } +}); diff --git a/site/e2e/tests/groups/createGroup.spec.ts b/site/e2e/tests/groups/createGroup.spec.ts index 8ed40dac4f0f1..8b49150ed8b3e 100644 --- a/site/e2e/tests/groups/createGroup.spec.ts +++ b/site/e2e/tests/groups/createGroup.spec.ts @@ -22,6 +22,8 @@ test("create group", async ({ page, baseURL }) => { await page.getByLabel("Display Name").fill(groupValues.displayName); await page.getByLabel("Avatar URL").fill(groupValues.avatarURL); await page.getByRole("button", { name: "Submit" }).click(); + await expect(page).toHaveTitle(`${groupValues.displayName} - Coder`); await expect(page.getByText(groupValues.displayName)).toBeVisible(); + await expect(page.getByText("No members yet")).toBeVisible(); }); diff --git a/site/e2e/tests/groups/removeGroup.spec.ts b/site/e2e/tests/groups/removeGroup.spec.ts index 1b18939c57b45..4e411d6a18a07 100644 --- a/site/e2e/tests/groups/removeGroup.spec.ts +++ b/site/e2e/tests/groups/removeGroup.spec.ts @@ -1,26 +1,18 @@ import { test, expect } from "@playwright/test"; -import * as API from "api/api"; -import { randomName, setupApiCalls } from "../../helpers"; +import { createGroup, getCurrentOrgId, setupApiCalls } from "../../api"; import { beforeCoderTest } from "../../hooks"; test.beforeEach(async ({ page }) => await beforeCoderTest(page)); test("remove group", async ({ page, baseURL }) => { await setupApiCalls(page); - const currentUser = await API.getAuthenticatedUser(); - const name = randomName(); - const orgId = currentUser.organization_ids[0]; - const group = await API.createGroup(orgId, { - name, - display_name: `Display Name of ${name}`, - avatar_url: "/emojis/1f60d.png", - quota_allowance: 0, - }); + const orgId = await getCurrentOrgId(); + const group = await createGroup(orgId); await page.goto(`${baseURL}/groups`, { waitUntil: "domcontentloaded" }); await expect(page).toHaveTitle("Groups - Coder"); - const groupRow = page.locator("tr", { hasText: group.display_name }); + const groupRow = page.getByRole("row", { name: group.display_name }); await groupRow.click(); await expect(page).toHaveTitle(`${group.display_name} - Coder`); diff --git a/site/e2e/tests/users/removeUser.spec.ts b/site/e2e/tests/users/removeUser.spec.ts index c6e60c25e604d..19217ed76e14b 100644 --- a/site/e2e/tests/users/removeUser.spec.ts +++ b/site/e2e/tests/users/removeUser.spec.ts @@ -1,27 +1,18 @@ import { test, expect } from "@playwright/test"; -import * as API from "api/api"; -import { randomName, setupApiCalls } from "../../helpers"; +import { createUser, getCurrentOrgId, setupApiCalls } from "../../api"; import { beforeCoderTest } from "../../hooks"; test.beforeEach(async ({ page }) => await beforeCoderTest(page)); test("remove user", async ({ page, baseURL }) => { await setupApiCalls(page); - const currentUser = await API.getAuthenticatedUser(); - const name = randomName(); - const user = await API.createUser({ - email: `${name}@coder.com`, - username: name, - password: "s3cure&password!", - login_type: "password", - disable_login: false, - organization_id: currentUser.organization_ids[0], - }); + const orgId = await getCurrentOrgId(); + const user = await createUser(orgId); await page.goto(`${baseURL}/users`, { waitUntil: "domcontentloaded" }); await expect(page).toHaveTitle("Users - Coder"); - const userRow = page.locator("tr", { hasText: user.email }); + const userRow = page.getByRole("row", { name: user.email }); await userRow.getByRole("button", { name: "More options" }).click(); await userRow.getByText("Delete", { exact: false }).click(); From c643c6a1a19049ce5e14634f87956279bb30dd0e Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Thu, 4 Apr 2024 14:58:04 +0000 Subject: [PATCH 04/10] Add test to remove member --- site/e2e/api.ts | 2 +- site/e2e/tests/groups/addMembers.spec.ts | 8 ++--- site/e2e/tests/groups/navigateToGroupPage.ts | 21 ++++++++++++ site/e2e/tests/groups/removeGroup.spec.ts | 11 +++---- site/e2e/tests/groups/removeMember.spec.ts | 34 ++++++++++++++++++++ site/src/api/api.ts | 1 - 6 files changed, 63 insertions(+), 14 deletions(-) create mode 100644 site/e2e/tests/groups/navigateToGroupPage.ts create mode 100644 site/e2e/tests/groups/removeMember.spec.ts diff --git a/site/e2e/api.ts b/site/e2e/api.ts index 220595464fefe..88f8666475507 100644 --- a/site/e2e/api.ts +++ b/site/e2e/api.ts @@ -37,7 +37,7 @@ export const createGroup = async (orgId: string) => { const name = randomName(); const group = await API.createGroup(orgId, { name, - display_name: `Display Name of ${name}`, + display_name: `Display ${name}`, avatar_url: "/emojis/1f60d.png", quota_allowance: 0, }); diff --git a/site/e2e/tests/groups/addMembers.spec.ts b/site/e2e/tests/groups/addMembers.spec.ts index 358351c61674e..0d46855cf788d 100644 --- a/site/e2e/tests/groups/addMembers.spec.ts +++ b/site/e2e/tests/groups/addMembers.spec.ts @@ -18,11 +18,9 @@ test("add members", async ({ page, baseURL }) => { Array.from({ length: numberOfMembers }, () => createUser(orgId)), ); - await page.goto(`${baseURL}/groups`, { waitUntil: "domcontentloaded" }); - await expect(page).toHaveTitle("Groups - Coder"); - - const groupRow = page.getByRole("row", { name: group.display_name }); - await groupRow.click(); + await page.goto(`${baseURL}/groups/${group.id}`, { + waitUntil: "domcontentloaded", + }); await expect(page).toHaveTitle(`${group.display_name} - Coder`); for (const user of users) { diff --git a/site/e2e/tests/groups/navigateToGroupPage.ts b/site/e2e/tests/groups/navigateToGroupPage.ts new file mode 100644 index 0000000000000..bc0eed6ced4ea --- /dev/null +++ b/site/e2e/tests/groups/navigateToGroupPage.ts @@ -0,0 +1,21 @@ +import { test, expect } from "@playwright/test"; +import { createGroup, getCurrentOrgId, setupApiCalls } from "../../api"; +import { beforeCoderTest } from "../../hooks"; + +test.beforeEach(async ({ page }) => await beforeCoderTest(page)); + +test("navigate to group page", async ({ page, baseURL }) => { + await setupApiCalls(page); + const orgId = await getCurrentOrgId(); + const group = await createGroup(orgId); + + await page.goto(`${baseURL}/users`, { waitUntil: "domcontentloaded" }); + await expect(page).toHaveTitle("Users - Coder"); + + await page.getByText("Groups").click(); + await expect(page).toHaveTitle("Groups - Coder"); + + const groupRow = page.getByRole("row", { name: group.display_name }); + await groupRow.click(); + await expect(page).toHaveTitle(`${group.display_name} - Coder`); +}); diff --git a/site/e2e/tests/groups/removeGroup.spec.ts b/site/e2e/tests/groups/removeGroup.spec.ts index 4e411d6a18a07..a749ffa961c66 100644 --- a/site/e2e/tests/groups/removeGroup.spec.ts +++ b/site/e2e/tests/groups/removeGroup.spec.ts @@ -9,15 +9,12 @@ test("remove group", async ({ page, baseURL }) => { const orgId = await getCurrentOrgId(); const group = await createGroup(orgId); - await page.goto(`${baseURL}/groups`, { waitUntil: "domcontentloaded" }); - await expect(page).toHaveTitle("Groups - Coder"); - - const groupRow = page.getByRole("row", { name: group.display_name }); - await groupRow.click(); - + await page.goto(`${baseURL}/groups/${group.id}`, { + waitUntil: "domcontentloaded", + }); await expect(page).toHaveTitle(`${group.display_name} - Coder`); - await page.getByRole("button", { name: "Delete" }).click(); + await page.getByRole("button", { name: "Delete" }).click(); const dialog = page.getByTestId("dialog"); await dialog.getByLabel("Name of the group to delete").fill(group.name); await dialog.getByRole("button", { name: "Delete" }).click(); diff --git a/site/e2e/tests/groups/removeMember.spec.ts b/site/e2e/tests/groups/removeMember.spec.ts new file mode 100644 index 0000000000000..5020daf2bd552 --- /dev/null +++ b/site/e2e/tests/groups/removeMember.spec.ts @@ -0,0 +1,34 @@ +import { test, expect } from "@playwright/test"; +import * as API from "api/api"; +import { + createGroup, + createUser, + getCurrentOrgId, + setupApiCalls, +} from "../../api"; +import { beforeCoderTest } from "../../hooks"; + +test.beforeEach(async ({ page }) => await beforeCoderTest(page)); + +test("remove member", async ({ page, baseURL }) => { + await setupApiCalls(page); + const orgId = await getCurrentOrgId(); + const [group, member] = await Promise.all([ + createGroup(orgId), + createUser(orgId), + ]); + await API.addMember(group.id, member.id); + + await page.goto(`${baseURL}/groups/${group.id}`, { + waitUntil: "domcontentloaded", + }); + await expect(page).toHaveTitle(`${group.display_name} - Coder`); + + const userRow = page.getByRole("row", { name: member.username }); + await userRow.getByRole("button", { name: "More options" }).click(); + + const menu = page.locator("#more-options"); + await menu.getByText("Remove").click({ timeout: 1_000 }); + + await expect(page.getByText("Member removed successfully.")).toBeVisible(); +}); diff --git a/site/src/api/api.ts b/site/src/api/api.ts index 760f860ebe3c1..12c2a63b2c014 100644 --- a/site/src/api/api.ts +++ b/site/src/api/api.ts @@ -1147,7 +1147,6 @@ export const patchGroup = async ( export const addMember = async (groupId: string, userId: string) => { return patchGroup(groupId, { name: "", - display_name: "", add_users: [userId], remove_users: [], }); From 23dd879ba27618feb4a0ec0516c613f91377cdfb Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Thu, 4 Apr 2024 15:05:06 +0000 Subject: [PATCH 05/10] Add missing test --- .../{navigateToGroupPage.ts => navigateToGroupPage.spec.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename site/e2e/tests/groups/{navigateToGroupPage.ts => navigateToGroupPage.spec.ts} (100%) diff --git a/site/e2e/tests/groups/navigateToGroupPage.ts b/site/e2e/tests/groups/navigateToGroupPage.spec.ts similarity index 100% rename from site/e2e/tests/groups/navigateToGroupPage.ts rename to site/e2e/tests/groups/navigateToGroupPage.spec.ts From 6111994c8a3b1174b2cd3d636d945dc0918406d1 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Thu, 4 Apr 2024 17:37:45 +0000 Subject: [PATCH 06/10] Fix user test --- site/e2e/tests/users/removeUser.spec.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/site/e2e/tests/users/removeUser.spec.ts b/site/e2e/tests/users/removeUser.spec.ts index 19217ed76e14b..cd09d13611e60 100644 --- a/site/e2e/tests/users/removeUser.spec.ts +++ b/site/e2e/tests/users/removeUser.spec.ts @@ -14,7 +14,8 @@ test("remove user", async ({ page, baseURL }) => { const userRow = page.getByRole("row", { name: user.email }); await userRow.getByRole("button", { name: "More options" }).click(); - await userRow.getByText("Delete", { exact: false }).click(); + const menu = page.locator("#more-options"); + await menu.getByText("Delete").click(); const dialog = page.getByTestId("dialog"); await dialog.getByLabel("Name of the user to delete").fill(user.username); From 5d2b96ee49858561c8a86cc3bb36662b60a7d182 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Thu, 4 Apr 2024 17:44:28 +0000 Subject: [PATCH 07/10] Fix create group test --- site/e2e/tests/groups/createGroup.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/e2e/tests/groups/createGroup.spec.ts b/site/e2e/tests/groups/createGroup.spec.ts index 8b49150ed8b3e..4b964f7d6c34e 100644 --- a/site/e2e/tests/groups/createGroup.spec.ts +++ b/site/e2e/tests/groups/createGroup.spec.ts @@ -8,7 +8,7 @@ test("create group", async ({ page, baseURL }) => { await page.goto(`${baseURL}/groups`, { waitUntil: "domcontentloaded" }); await expect(page).toHaveTitle("Groups - Coder"); - await page.getByRole("button", { name: "Create group" }).click(); + await page.getByText("Create group").click(); await expect(page).toHaveTitle("Create Group - Coder"); const name = randomName(); From befe669e69fc787ecd7933c11b0e45334d262f5d Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Thu, 4 Apr 2024 17:47:26 +0000 Subject: [PATCH 08/10] Fix navigate test --- site/e2e/tests/groups/navigateToGroupPage.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/e2e/tests/groups/navigateToGroupPage.spec.ts b/site/e2e/tests/groups/navigateToGroupPage.spec.ts index bc0eed6ced4ea..8e8cb11f46cae 100644 --- a/site/e2e/tests/groups/navigateToGroupPage.spec.ts +++ b/site/e2e/tests/groups/navigateToGroupPage.spec.ts @@ -12,7 +12,7 @@ test("navigate to group page", async ({ page, baseURL }) => { await page.goto(`${baseURL}/users`, { waitUntil: "domcontentloaded" }); await expect(page).toHaveTitle("Users - Coder"); - await page.getByText("Groups").click(); + await page.getByRole("link", { name: "Groups" }).click(); await expect(page).toHaveTitle("Groups - Coder"); const groupRow = page.getByRole("row", { name: group.display_name }); From 8b0bdd951de20c70fdaca38e1da859872b01dfaf Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Thu, 4 Apr 2024 17:52:58 +0000 Subject: [PATCH 09/10] Add check for enterprise license in the groups tests --- site/e2e/tests/groups/addMembers.spec.ts | 2 ++ site/e2e/tests/groups/createGroup.spec.ts | 3 ++- site/e2e/tests/groups/navigateToGroupPage.spec.ts | 2 ++ site/e2e/tests/groups/removeGroup.spec.ts | 2 ++ site/e2e/tests/groups/removeMember.spec.ts | 2 ++ 5 files changed, 10 insertions(+), 1 deletion(-) diff --git a/site/e2e/tests/groups/addMembers.spec.ts b/site/e2e/tests/groups/addMembers.spec.ts index 0d46855cf788d..f9532733d86dd 100644 --- a/site/e2e/tests/groups/addMembers.spec.ts +++ b/site/e2e/tests/groups/addMembers.spec.ts @@ -5,11 +5,13 @@ import { getCurrentOrgId, setupApiCalls, } from "../../api"; +import { requiresEnterpriseLicense } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; test.beforeEach(async ({ page }) => await beforeCoderTest(page)); test("add members", async ({ page, baseURL }) => { + requiresEnterpriseLicense(); await setupApiCalls(page); const orgId = await getCurrentOrgId(); const group = await createGroup(orgId); diff --git a/site/e2e/tests/groups/createGroup.spec.ts b/site/e2e/tests/groups/createGroup.spec.ts index 4b964f7d6c34e..9542f4ea135d2 100644 --- a/site/e2e/tests/groups/createGroup.spec.ts +++ b/site/e2e/tests/groups/createGroup.spec.ts @@ -1,10 +1,11 @@ import { test, expect } from "@playwright/test"; -import { randomName } from "../../helpers"; +import { randomName, requiresEnterpriseLicense } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; test.beforeEach(async ({ page }) => await beforeCoderTest(page)); test("create group", async ({ page, baseURL }) => { + requiresEnterpriseLicense(); await page.goto(`${baseURL}/groups`, { waitUntil: "domcontentloaded" }); await expect(page).toHaveTitle("Groups - Coder"); diff --git a/site/e2e/tests/groups/navigateToGroupPage.spec.ts b/site/e2e/tests/groups/navigateToGroupPage.spec.ts index 8e8cb11f46cae..44e2224df7c72 100644 --- a/site/e2e/tests/groups/navigateToGroupPage.spec.ts +++ b/site/e2e/tests/groups/navigateToGroupPage.spec.ts @@ -1,10 +1,12 @@ import { test, expect } from "@playwright/test"; import { createGroup, getCurrentOrgId, setupApiCalls } from "../../api"; +import { requiresEnterpriseLicense } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; test.beforeEach(async ({ page }) => await beforeCoderTest(page)); test("navigate to group page", async ({ page, baseURL }) => { + requiresEnterpriseLicense(); await setupApiCalls(page); const orgId = await getCurrentOrgId(); const group = await createGroup(orgId); diff --git a/site/e2e/tests/groups/removeGroup.spec.ts b/site/e2e/tests/groups/removeGroup.spec.ts index a749ffa961c66..9011ecbb7147a 100644 --- a/site/e2e/tests/groups/removeGroup.spec.ts +++ b/site/e2e/tests/groups/removeGroup.spec.ts @@ -1,10 +1,12 @@ import { test, expect } from "@playwright/test"; import { createGroup, getCurrentOrgId, setupApiCalls } from "../../api"; +import { requiresEnterpriseLicense } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; test.beforeEach(async ({ page }) => await beforeCoderTest(page)); test("remove group", async ({ page, baseURL }) => { + requiresEnterpriseLicense(); await setupApiCalls(page); const orgId = await getCurrentOrgId(); const group = await createGroup(orgId); diff --git a/site/e2e/tests/groups/removeMember.spec.ts b/site/e2e/tests/groups/removeMember.spec.ts index 5020daf2bd552..716c86af84a8d 100644 --- a/site/e2e/tests/groups/removeMember.spec.ts +++ b/site/e2e/tests/groups/removeMember.spec.ts @@ -6,11 +6,13 @@ import { getCurrentOrgId, setupApiCalls, } from "../../api"; +import { requiresEnterpriseLicense } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; test.beforeEach(async ({ page }) => await beforeCoderTest(page)); test("remove member", async ({ page, baseURL }) => { + requiresEnterpriseLicense(); await setupApiCalls(page); const orgId = await getCurrentOrgId(); const [group, member] = await Promise.all([ From 3b260c89aac88aecfaa4cfc0bcb38ec4d32cb63f Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Fri, 5 Apr 2024 00:50:37 +0000 Subject: [PATCH 10/10] Add everyone test --- .../groups/addUsersToDefaultGroup.spec.ts | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 site/e2e/tests/groups/addUsersToDefaultGroup.spec.ts diff --git a/site/e2e/tests/groups/addUsersToDefaultGroup.spec.ts b/site/e2e/tests/groups/addUsersToDefaultGroup.spec.ts new file mode 100644 index 0000000000000..b5767026c037c --- /dev/null +++ b/site/e2e/tests/groups/addUsersToDefaultGroup.spec.ts @@ -0,0 +1,32 @@ +import { test, expect } from "@playwright/test"; +import { createUser, getCurrentOrgId, setupApiCalls } from "../../api"; +import { requiresEnterpriseLicense } from "../../helpers"; +import { beforeCoderTest } from "../../hooks"; + +test.beforeEach(async ({ page }) => await beforeCoderTest(page)); + +const DEFAULT_GROUP_NAME = "Everyone"; + +test(`Every user should be automatically added to the default '${DEFAULT_GROUP_NAME}' group upon creation`, async ({ + page, + baseURL, +}) => { + requiresEnterpriseLicense(); + await setupApiCalls(page); + const orgId = await getCurrentOrgId(); + const numberOfMembers = 3; + const users = await Promise.all( + Array.from({ length: numberOfMembers }, () => createUser(orgId)), + ); + + await page.goto(`${baseURL}/groups`, { waitUntil: "domcontentloaded" }); + await expect(page).toHaveTitle("Groups - Coder"); + + const groupRow = page.getByRole("row", { name: DEFAULT_GROUP_NAME }); + await groupRow.click(); + await expect(page).toHaveTitle(`${DEFAULT_GROUP_NAME} - Coder`); + + for (const user of users) { + await expect(page.getByRole("row", { name: user.username })).toBeVisible(); + } +});