From 3da8fc7871efcdf055af31b12f413219c9b1f57a Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Mon, 9 Dec 2024 22:26:28 +0000 Subject: [PATCH 1/9] wuuba --- site/e2e/helpers.ts | 45 ++++++++++++ site/e2e/tests/organizationMembers.spec.ts | 47 +++++++++++++ site/e2e/tests/organizations.spec.ts | 20 +++--- .../users/createUserWithPassword.spec.ts | 70 ++----------------- .../OrganizationMembersPageView.tsx | 2 + 5 files changed, 111 insertions(+), 73 deletions(-) create mode 100644 site/e2e/tests/organizationMembers.spec.ts diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index 8f69b90900538..23847d18cb740 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -987,3 +987,48 @@ export async function openTerminalWindow( return terminal; } + +type UserValues = { + name: string; + username: string; + email: string; + password: string; +}; + +export async function createUser( + page: Page, + userValues: Partial = {}, +): Promise { + const returnTo = page.url(); + + await page.goto("/deployment/users", { waitUntil: "domcontentloaded" }); + await expect(page).toHaveTitle("Users - Coder"); + + await page.getByRole("button", { name: "Create user" }).click(); + await expect(page).toHaveTitle("Create User - Coder"); + + const username = userValues.username ?? randomName(); + const name = userValues.name ?? username; + const email = userValues.email ?? `${username}@coder.com`; + const password = userValues.password || "s3cure&password!"; + + await page.getByLabel("Username").fill(username); + if (name) { + await page.getByLabel("Full name").fill(name); + } + await page.getByLabel("Email").fill(email); + await page.getByLabel("Login Type").click(); + await page.getByRole("option", { name: "Password", exact: false }).click(); + // Using input[name=password] due to the select element utilizing 'password' + // as the label for the currently active option. + const passwordField = page.locator("input[name=password]"); + await passwordField.fill(password); + await page.getByRole("button", { name: "Create user" }).click(); + await expect(page.getByText("Successfully created user.")).toBeVisible(); + + await expect(page).toHaveTitle("Users - Coder"); + await expect(page.locator("tr", { hasText: email })).toBeVisible(); + + await page.goto(returnTo, { waitUntil: "domcontentloaded" }); + return { name, username, email, password }; +} diff --git a/site/e2e/tests/organizationMembers.spec.ts b/site/e2e/tests/organizationMembers.spec.ts new file mode 100644 index 0000000000000..04daf4768f971 --- /dev/null +++ b/site/e2e/tests/organizationMembers.spec.ts @@ -0,0 +1,47 @@ +import { expect, test } from "@playwright/test"; +import { setupApiCalls } from "../api"; +import { expectUrl } from "../expectUrl"; +import { createUser, randomName, requiresLicense } from "../helpers"; +import { beforeCoderTest } from "../hooks"; + +test.beforeEach(async ({ page }) => { + await beforeCoderTest(page); + await setupApiCalls(page); +}); + +test("create and delete organization", async ({ page }) => { + requiresLicense(); + + // Create an organization + await page.goto("/organizations/new", { + waitUntil: "domcontentloaded", + }); + + const name = randomName(); + await page.getByLabel("Slug").fill(name); + await page.getByLabel("Display name").fill(`Org ${name}`); + await page.getByLabel("Description").fill(`Org description ${name}`); + await page.getByLabel("Icon", { exact: true }).fill("/emojis/1f957.png"); + await page.getByRole("button", { name: "Submit" }).click(); + + // Expect to be redirected to the new organization + await expectUrl(page).toHavePathName(`/organizations/${name}`); + await expect(page.getByText("Organization created.")).toBeVisible(); + + await page.getByText("Members").click(); + + const personToAdd = await createUser(page); + await page.getByPlaceholder("User email or username").fill(personToAdd.email); + await page.getByRole("option", { name: personToAdd.email }).click(); + await page.getByRole("button", { name: "Add user" }).click(); + await page.pause(); + await expect( + page.locator("tr", { hasText: personToAdd.email }), + ).toBeVisible(); + + // await page.getByRole("button", { name: "Delete this organization" }).click(); + // const dialog = page.getByTestId("dialog"); + // await dialog.getByLabel("Name").fill(newName); + // await dialog.getByRole("button", { name: "Delete" }).click(); + // await expect(page.getByText("Organization deleted.")).toBeVisible(); +}); diff --git a/site/e2e/tests/organizations.spec.ts b/site/e2e/tests/organizations.spec.ts index 625eac4762997..8d26020618643 100644 --- a/site/e2e/tests/organizations.spec.ts +++ b/site/e2e/tests/organizations.spec.ts @@ -1,7 +1,7 @@ import { expect, test } from "@playwright/test"; import { setupApiCalls } from "../api"; import { expectUrl } from "../expectUrl"; -import { requiresLicense } from "../helpers"; +import { randomName, requiresLicense } from "../helpers"; import { beforeCoderTest } from "../hooks"; test.beforeEach(async ({ page }) => { @@ -17,27 +17,29 @@ test("create and delete organization", async ({ page }) => { waitUntil: "domcontentloaded", }); - await page.getByLabel("Slug").fill("floop"); - await page.getByLabel("Display name").fill("Floop"); - await page.getByLabel("Description").fill("Org description floop"); + const name = randomName(); + await page.getByLabel("Slug").fill(name); + await page.getByLabel("Display name").fill(`Org ${name}`); + await page.getByLabel("Description").fill(`Org description ${name}`); await page.getByLabel("Icon", { exact: true }).fill("/emojis/1f957.png"); await page.getByRole("button", { name: "Submit" }).click(); // Expect to be redirected to the new organization - await expectUrl(page).toHavePathName("/organizations/floop"); + await expectUrl(page).toHavePathName(`/organizations/${name}`); await expect(page.getByText("Organization created.")).toBeVisible(); - await page.getByLabel("Slug").fill("wibble"); - await page.getByLabel("Description").fill("Org description wibble"); + const newName = randomName(); + await page.getByLabel("Slug").fill(newName); + await page.getByLabel("Description").fill(`Org description ${newName}`); await page.getByRole("button", { name: "Submit" }).click(); // Expect to be redirected when renaming the organization - await expectUrl(page).toHavePathName("/organizations/wibble"); + await expectUrl(page).toHavePathName(`/organizations/${newName}`); await expect(page.getByText("Organization settings updated.")).toBeVisible(); await page.getByRole("button", { name: "Delete this organization" }).click(); const dialog = page.getByTestId("dialog"); - await dialog.getByLabel("Name").fill("wibble"); + await dialog.getByLabel("Name").fill(newName); await dialog.getByRole("button", { name: "Delete" }).click(); await expect(page.getByText("Organization deleted.")).toBeVisible(); }); diff --git a/site/e2e/tests/users/createUserWithPassword.spec.ts b/site/e2e/tests/users/createUserWithPassword.spec.ts index 85a3e47ccd87f..20396a6ac17eb 100644 --- a/site/e2e/tests/users/createUserWithPassword.spec.ts +++ b/site/e2e/tests/users/createUserWithPassword.spec.ts @@ -1,71 +1,13 @@ -import { expect, test } from "@playwright/test"; -import { randomName } from "../../helpers"; +import { test } from "@playwright/test"; +import { createUser } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; test.beforeEach(async ({ page }) => await beforeCoderTest(page)); -test("create user with password", async ({ page, baseURL }) => { - await page.goto(`${baseURL}/deployment/users`, { - waitUntil: "domcontentloaded", - }); - await expect(page).toHaveTitle("Users - Coder"); - - await page.getByRole("button", { name: "Create user" }).click(); - await expect(page).toHaveTitle("Create User - Coder"); - - const name = randomName(); - const userValues = { - username: name, - name: name, - email: `${name}@coder.com`, - loginType: "password", - password: "s3cure&password!", - }; - - await page.getByLabel("Username").fill(userValues.username); - await page.getByLabel("Full name").fill(userValues.username); - await page.getByLabel("Email").fill(userValues.email); - await page.getByLabel("Login Type").click(); - await page.getByRole("option", { name: "Password", exact: false }).click(); - // Using input[name=password] due to the select element utilizing 'password' - // as the label for the currently active option. - const passwordField = page.locator("input[name=password]"); - await passwordField.fill(userValues.password); - await page.getByRole("button", { name: "Create user" }).click(); - await expect(page.getByText("Successfully created user.")).toBeVisible(); - - await expect(page).toHaveTitle("Users - Coder"); - await expect(page.locator("tr", { hasText: userValues.email })).toBeVisible(); +test("create user with password", async ({ page }) => { + await createUser(page); }); -test("create user without full name is optional", async ({ page, baseURL }) => { - await page.goto(`${baseURL}/deployment/users`, { - waitUntil: "domcontentloaded", - }); - await expect(page).toHaveTitle("Users - Coder"); - - await page.getByRole("button", { name: "Create user" }).click(); - await expect(page).toHaveTitle("Create User - Coder"); - - const name = randomName(); - const userValues = { - username: name, - email: `${name}@coder.com`, - loginType: "password", - password: "s3cure&password!", - }; - - await page.getByLabel("Username").fill(userValues.username); - await page.getByLabel("Email").fill(userValues.email); - await page.getByLabel("Login Type").click(); - await page.getByRole("option", { name: "Password", exact: false }).click(); - // Using input[name=password] due to the select element utilizing 'password' - // as the label for the currently active option. - const passwordField = page.locator("input[name=password]"); - await passwordField.fill(userValues.password); - await page.getByRole("button", { name: "Create user" }).click(); - await expect(page.getByText("Successfully created user.")).toBeVisible(); - - await expect(page).toHaveTitle("Users - Coder"); - await expect(page.locator("tr", { hasText: userValues.email })).toBeVisible(); +test("create user without full name", async ({ page }) => { + await createUser(page, { name: "" }); }); diff --git a/site/src/pages/ManagementSettingsPage/OrganizationMembersPageView.tsx b/site/src/pages/ManagementSettingsPage/OrganizationMembersPageView.tsx index c343a2490f119..bc77a44c64f52 100644 --- a/site/src/pages/ManagementSettingsPage/OrganizationMembersPageView.tsx +++ b/site/src/pages/ManagementSettingsPage/OrganizationMembersPageView.tsx @@ -58,6 +58,8 @@ interface OrganizationMemberTableEntry extends OrganizationMemberWithUserData { export const OrganizationMembersPageView: FC< OrganizationMembersPageViewProps > = (props) => { + console.log(props.members); + return (
From cd88542a94f8f8c11df3a6a31a2b2a8fb0e7ce86 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Mon, 9 Dec 2024 16:38:40 -0700 Subject: [PATCH 2/9] hmm --- .../OrganizationMembersPageView.tsx | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/site/src/pages/ManagementSettingsPage/OrganizationMembersPageView.tsx b/site/src/pages/ManagementSettingsPage/OrganizationMembersPageView.tsx index bc77a44c64f52..36002c605e04b 100644 --- a/site/src/pages/ManagementSettingsPage/OrganizationMembersPageView.tsx +++ b/site/src/pages/ManagementSettingsPage/OrganizationMembersPageView.tsx @@ -42,7 +42,6 @@ interface OrganizationMembersPageViewProps { isUpdatingMemberRoles: boolean; me: User; members: Array | undefined; - groupsByUserId: GroupsByUserId | undefined; addMember: (user: User) => Promise; removeMember: (member: OrganizationMemberWithUserData) => void; updateMemberRoles: ( @@ -57,19 +56,28 @@ interface OrganizationMemberTableEntry extends OrganizationMemberWithUserData { export const OrganizationMembersPageView: FC< OrganizationMembersPageViewProps -> = (props) => { - console.log(props.members); - +> = ({ + allAvailableRoles, + canEditMembers, + error, + isAddingMember, + isUpdatingMemberRoles, + me, + members, + addMember, + removeMember, + updateMemberRoles, +}) => { return (
- {Boolean(props.error) && } + {Boolean(error) && } - {props.canEditMembers && ( + {canEditMembers && ( )} @@ -94,7 +102,7 @@ export const OrganizationMembersPageView: FC< - {props.members?.map((member) => ( + {members?.map((member) => ( { try { - await props.updateMemberRoles(member, roles); + await updateMemberRoles(member, roles); displaySuccess("Roles updated successfully."); } catch (error) { displayError( @@ -128,7 +136,7 @@ export const OrganizationMembersPageView: FC< /> - {member.user_id !== props.me.id && props.canEditMembers && ( + {member.user_id !== me.id && canEditMembers && ( @@ -136,7 +144,7 @@ export const OrganizationMembersPageView: FC< props.removeMember(member)} + onClick={() => removeMember(member)} > Remove From 6e2bd03a6357ce8fb3a58097cfa07d213cd5585d Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Tue, 10 Dec 2024 17:48:56 +0000 Subject: [PATCH 3/9] fix dbmem `OrganizationMembers` implementation --- coderd/database/dbmem/dbmem.go | 4 ++++ .../pages/ManagementSettingsPage/OrganizationMembersPage.tsx | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/coderd/database/dbmem/dbmem.go b/coderd/database/dbmem/dbmem.go index c5b9f7f6cc06f..cd0fb83f83f70 100644 --- a/coderd/database/dbmem/dbmem.go +++ b/coderd/database/dbmem/dbmem.go @@ -8556,6 +8556,10 @@ func (q *FakeQuerier) OrganizationMembers(_ context.Context, arg database.Organi tmp = append(tmp, database.OrganizationMembersRow{ OrganizationMember: organizationMember, Username: user.Username, + AvatarURL: user.AvatarURL, + Name: user.Name, + Email: user.Email, + GlobalRoles: user.RBACRoles, }) } return tmp, nil diff --git a/site/src/pages/ManagementSettingsPage/OrganizationMembersPage.tsx b/site/src/pages/ManagementSettingsPage/OrganizationMembersPage.tsx index de6295a838bd9..4cefc75f7e08b 100644 --- a/site/src/pages/ManagementSettingsPage/OrganizationMembersPage.tsx +++ b/site/src/pages/ManagementSettingsPage/OrganizationMembersPage.tsx @@ -77,7 +77,6 @@ const OrganizationMembersPage: FC = () => { isUpdatingMemberRoles={updateMemberRolesMutation.isLoading} me={me} members={members} - groupsByUserId={groupsByUserIdQuery.data} addMember={async (user: User) => { await addMemberMutation.mutateAsync(user.id); void membersQuery.refetch(); From d193bb1a064dbabea56633c89ffe8ef06afce5b5 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Tue, 10 Dec 2024 19:47:49 +0000 Subject: [PATCH 4/9] >:( --- site/e2e/tests/organizationMembers.spec.ts | 29 ++++++++++++------- .../UserTable/UserRoleCell.tsx | 10 ++----- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/site/e2e/tests/organizationMembers.spec.ts b/site/e2e/tests/organizationMembers.spec.ts index 04daf4768f971..5c85060497dd1 100644 --- a/site/e2e/tests/organizationMembers.spec.ts +++ b/site/e2e/tests/organizationMembers.spec.ts @@ -12,11 +12,8 @@ test.beforeEach(async ({ page }) => { test("create and delete organization", async ({ page }) => { requiresLicense(); - // Create an organization - await page.goto("/organizations/new", { - waitUntil: "domcontentloaded", - }); - + // Create a new organization to test + await page.goto("/organizations/new", { waitUntil: "domcontentloaded" }); const name = randomName(); await page.getByLabel("Slug").fill(name); await page.getByLabel("Display name").fill(`Org ${name}`); @@ -24,20 +21,30 @@ test("create and delete organization", async ({ page }) => { await page.getByLabel("Icon", { exact: true }).fill("/emojis/1f957.png"); await page.getByRole("button", { name: "Submit" }).click(); - // Expect to be redirected to the new organization + // Navigate to members page await expectUrl(page).toHavePathName(`/organizations/${name}`); await expect(page.getByText("Organization created.")).toBeVisible(); - await page.getByText("Members").click(); + // Add a user to the org const personToAdd = await createUser(page); await page.getByPlaceholder("User email or username").fill(personToAdd.email); await page.getByRole("option", { name: personToAdd.email }).click(); await page.getByRole("button", { name: "Add user" }).click(); - await page.pause(); - await expect( - page.locator("tr", { hasText: personToAdd.email }), - ).toBeVisible(); + const addedRow = page.locator("tr", { hasText: personToAdd.email }); + await expect(addedRow).toBeVisible(); + + // Give them a role + await addedRow.getByLabel("Edit user roles").click(); + await page.getByRole("checkbox", { name: "Organization admin" }).click(); + // await addedRow.getByLabel("Edit user roles").click(); + await expect(addedRow.getByText("Organization admin")).toBeVisible(); + + // Remove them from the org + await addedRow.getByLabel("More options").click(); + await page.getByText("Remove").click(); // Click the "Remove" option + await page.getByRole("button", { name: "Remove" }).click(); // Click "Remove" in the confirmation dialog + await expect(addedRow).not.toBeVisible(); // await page.getByRole("button", { name: "Delete this organization" }).click(); // const dialog = page.getByTestId("dialog"); diff --git a/site/src/pages/ManagementSettingsPage/UserTable/UserRoleCell.tsx b/site/src/pages/ManagementSettingsPage/UserTable/UserRoleCell.tsx index 48764aa1e877d..22ca15fdcbf73 100644 --- a/site/src/pages/ManagementSettingsPage/UserTable/UserRoleCell.tsx +++ b/site/src/pages/ManagementSettingsPage/UserTable/UserRoleCell.tsx @@ -136,14 +136,8 @@ const OverflowRolePill: FC = ({ roles }) => { minWidth: "auto", }, }} - anchorOrigin={{ - vertical: -4, - horizontal: "center", - }} - transformOrigin={{ - vertical: "bottom", - horizontal: "center", - }} + anchorOrigin={{ vertical: -4, horizontal: "center" }} + transformOrigin={{ vertical: "bottom", horizontal: "center" }} > {roles.map((role) => ( Date: Wed, 11 Dec 2024 01:03:21 +0000 Subject: [PATCH 5/9] [_screaming intensifies_] --- site/e2e/tests/organizationMembers.spec.ts | 16 ++++++---------- .../UserTable/EditRolesButton.tsx | 2 +- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/site/e2e/tests/organizationMembers.spec.ts b/site/e2e/tests/organizationMembers.spec.ts index 5c85060497dd1..56fb2dbc4acde 100644 --- a/site/e2e/tests/organizationMembers.spec.ts +++ b/site/e2e/tests/organizationMembers.spec.ts @@ -9,7 +9,7 @@ test.beforeEach(async ({ page }) => { await setupApiCalls(page); }); -test("create and delete organization", async ({ page }) => { +test("add and remove organization member", async ({ page }) => { requiresLicense(); // Create a new organization to test @@ -36,19 +36,15 @@ test("create and delete organization", async ({ page }) => { // Give them a role await addedRow.getByLabel("Edit user roles").click(); - await page.getByRole("checkbox", { name: "Organization admin" }).click(); - // await addedRow.getByLabel("Edit user roles").click(); - await expect(addedRow.getByText("Organization admin")).toBeVisible(); + await page.getByText("Organization User Admin").click(); + await page.getByText("Organization Template Admin").click(); + await page.mouse.click(10, 10); // close the popover by clicking outside of it + await expect(addedRow.getByText("Organization User Admin")).toBeVisible(); + await expect(addedRow.getByText("+1 more")).toBeVisible(); // Remove them from the org await addedRow.getByLabel("More options").click(); await page.getByText("Remove").click(); // Click the "Remove" option await page.getByRole("button", { name: "Remove" }).click(); // Click "Remove" in the confirmation dialog await expect(addedRow).not.toBeVisible(); - - // await page.getByRole("button", { name: "Delete this organization" }).click(); - // const dialog = page.getByTestId("dialog"); - // await dialog.getByLabel("Name").fill(newName); - // await dialog.getByRole("button", { name: "Delete" }).click(); - // await expect(page.getByText("Organization deleted.")).toBeVisible(); }); diff --git a/site/src/pages/ManagementSettingsPage/UserTable/EditRolesButton.tsx b/site/src/pages/ManagementSettingsPage/UserTable/EditRolesButton.tsx index ed8712f4c6f73..c0a2681442f3c 100644 --- a/site/src/pages/ManagementSettingsPage/UserTable/EditRolesButton.tsx +++ b/site/src/pages/ManagementSettingsPage/UserTable/EditRolesButton.tsx @@ -128,7 +128,7 @@ export const EditRolesButton: FC = ({ - +
Date: Wed, 11 Dec 2024 20:34:01 +0000 Subject: [PATCH 6/9] specify org name --- site/e2e/helpers.ts | 3 +++ site/e2e/tests/workspaces/updateWorkspace.spec.ts | 2 ++ 2 files changed, 5 insertions(+) diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index 23847d18cb740..59541fb79b282 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -850,6 +850,7 @@ export const fillParameters = async ( export const updateTemplate = async ( page: Page, + organization: string, templateName: string, responses?: EchoProvisionerResponses, ) => { @@ -861,6 +862,8 @@ export const updateTemplate = async ( [ "run", coderMain, + "-O", + organization, "templates", "push", "--test.provisioner", diff --git a/site/e2e/tests/workspaces/updateWorkspace.spec.ts b/site/e2e/tests/workspaces/updateWorkspace.spec.ts index 8ff256f74d3e6..5bab9fd36f6b4 100644 --- a/site/e2e/tests/workspaces/updateWorkspace.spec.ts +++ b/site/e2e/tests/workspaces/updateWorkspace.spec.ts @@ -41,6 +41,7 @@ test("update workspace, new optional, immutable parameter added", async ({ const updatedRichParameters = [...richParameters, fifthParameter]; await updateTemplate( page, + "default", template, echoResponsesWithParameters(updatedRichParameters), ); @@ -79,6 +80,7 @@ test("update workspace, new required, mutable parameter added", async ({ const updatedRichParameters = [...richParameters, sixthParameter]; await updateTemplate( page, + "default", template, echoResponsesWithParameters(updatedRichParameters), ); From 85f72f8dd5c24cbac3bdf76efbabd531adc8a95f Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Wed, 11 Dec 2024 21:38:54 +0000 Subject: [PATCH 7/9] :| --- site/e2e/helpers.ts | 13 +++++++++++-- site/e2e/tests/workspaces/updateWorkspace.spec.ts | 4 ++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index 59541fb79b282..b982a58840c2f 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -1,5 +1,6 @@ import { type ChildProcess, exec, spawn } from "node:child_process"; import { randomUUID } from "node:crypto"; +import * as fs from "node:fs"; import net from "node:net"; import path from "node:path"; import { Duplex } from "node:stream"; @@ -862,8 +863,6 @@ export const updateTemplate = async ( [ "run", coderMain, - "-O", - organization, "templates", "push", "--test.provisioner", @@ -871,6 +870,8 @@ export const updateTemplate = async ( "-y", "-d", "-", + "-O", + organization, templateName, ], { @@ -882,7 +883,15 @@ export const updateTemplate = async ( }, ); + child.stdout.on("data", (data) => + console.log("::::", new TextDecoder().decode(data)), + ); + child.stderr.on("data", (data) => + console.log(";;;;", new TextDecoder().decode(data)), + ); + const uploaded = new Awaiter(); + child.on("exit", (code) => { if (code === 0) { uploaded.done(); diff --git a/site/e2e/tests/workspaces/updateWorkspace.spec.ts b/site/e2e/tests/workspaces/updateWorkspace.spec.ts index 5bab9fd36f6b4..8018856495c40 100644 --- a/site/e2e/tests/workspaces/updateWorkspace.spec.ts +++ b/site/e2e/tests/workspaces/updateWorkspace.spec.ts @@ -41,7 +41,7 @@ test("update workspace, new optional, immutable parameter added", async ({ const updatedRichParameters = [...richParameters, fifthParameter]; await updateTemplate( page, - "default", + "coder", template, echoResponsesWithParameters(updatedRichParameters), ); @@ -80,7 +80,7 @@ test("update workspace, new required, mutable parameter added", async ({ const updatedRichParameters = [...richParameters, sixthParameter]; await updateTemplate( page, - "default", + "coder", template, echoResponsesWithParameters(updatedRichParameters), ); From e1cde705448025ef8ae6ffeb95164e4d1ff4a5ed Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Wed, 11 Dec 2024 22:21:36 +0000 Subject: [PATCH 8/9] remove debugging code --- site/e2e/helpers.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index b982a58840c2f..34fa03837057f 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -883,13 +883,6 @@ export const updateTemplate = async ( }, ); - child.stdout.on("data", (data) => - console.log("::::", new TextDecoder().decode(data)), - ); - child.stderr.on("data", (data) => - console.log(";;;;", new TextDecoder().decode(data)), - ); - const uploaded = new Awaiter(); child.on("exit", (code) => { From fe0d4ae6976b26a4353e76097fc83198e85c6224 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Wed, 11 Dec 2024 22:31:44 +0000 Subject: [PATCH 9/9] fix userspage tests --- site/src/pages/UsersPage/UsersPage.stories.tsx | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/site/src/pages/UsersPage/UsersPage.stories.tsx b/site/src/pages/UsersPage/UsersPage.stories.tsx index 9a426be53042c..cd4a1cfc7e113 100644 --- a/site/src/pages/UsersPage/UsersPage.stories.tsx +++ b/site/src/pages/UsersPage/UsersPage.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { spyOn, userEvent, within } from "@storybook/test"; +import { screen, spyOn, userEvent, within } from "@storybook/test"; import { API } from "api/api"; import { deploymentConfigQueryKey } from "api/queries/deployment"; import { groupsQueryKey } from "api/queries/groups"; @@ -368,12 +368,8 @@ export const UpdateUserRoleSuccess: Story = { }); await user.click(within(userRow).getByLabelText("Edit user roles")); - await user.click( - within(userRow).getByLabelText("Auditor", { exact: false }), - ); - await within(document.body).findByText( - "Successfully updated the user roles.", - ); + await user.click(screen.getByLabelText("Auditor", { exact: false })); + await screen.findByText("Successfully updated the user roles."); }, }; @@ -388,10 +384,8 @@ export const UpdateUserRoleError: Story = { spyOn(API, "updateUserRoles").mockRejectedValue({}); await user.click(within(userRow).getByLabelText("Edit user roles")); - await user.click( - within(userRow).getByLabelText("Auditor", { exact: false }), - ); - await within(document.body).findByText("Error on updating the user roles."); + await user.click(screen.getByLabelText("Auditor", { exact: false })); + await screen.findByText("Error on updating the user roles."); }, };