From 0b7218b60e66af287cd5c2966cbfb10dac2ed6d5 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Fri, 22 Mar 2024 20:28:36 +0000 Subject: [PATCH 1/5] chore: add e2e tests for template permissions --- site/e2e/helpers.ts | 15 +++++++++++++++ site/e2e/tests/updateTemplate.spec.ts | 26 ++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index 6037f9f1ab155..f16136a10ec89 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -140,6 +140,21 @@ export const createTemplate = async ( return name; }; +// createGroup navigates to the /templates/new page and uploads a template +// with the resources provided in the responses argument. +export const createGroup = async (page: Page): Promise => { + await page.goto("/groups/create", { waitUntil: "domcontentloaded" }); + await expect(page).toHaveURL("/groups/create"); + + const name = randomName(); + await page.getByLabel("Name", { exact: true }).fill(name); + await page.getByTestId("form-submit").click(); + await expect(page).toHaveURL( + /^\/groups\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/, + ); + return name; +}; + // sshIntoWorkspace spawns a Coder SSH process and a client connected to it. export const sshIntoWorkspace = async ( page: Page, diff --git a/site/e2e/tests/updateTemplate.spec.ts b/site/e2e/tests/updateTemplate.spec.ts index a1efdd3805e06..db03ae9b62fa7 100644 --- a/site/e2e/tests/updateTemplate.spec.ts +++ b/site/e2e/tests/updateTemplate.spec.ts @@ -1,5 +1,9 @@ -import { test } from "@playwright/test"; -import { createTemplate, updateTemplateSettings } from "../helpers"; +import { expect, test } from "@playwright/test"; +import { + createGroup, + createTemplate, + updateTemplateSettings, +} from "../helpers"; test("template update with new name redirects on successful submit", async ({ page, @@ -10,3 +14,21 @@ test("template update with new name redirects on successful submit", async ({ name: "new-name", }); }); + +test("add and remove a group", async ({ page }) => { + const templateName = await createTemplate(page); + const groupName = await createGroup(page); + + await page.goto(`/templates/${templateName}/settings/permissions`, { + waitUntil: "domcontentloaded", + }); + await expect(page).toHaveURL( + `/templates/${templateName}/settings/permissions`, + ); + + await page + .getByPlaceholder("Search for user or group", { exact: true }) + .fill(groupName); + + await page.getByText("Add member").click(); +}); From 346e9ad0feddb1b13e993b55b355779537e64367 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Thu, 28 Mar 2024 22:18:18 +0000 Subject: [PATCH 2/5] scoop --- site/e2e/global.setup.ts | 2 +- site/e2e/helpers.ts | 2 +- site/e2e/playwright.config.ts | 2 +- site/e2e/reporter.ts | 2 +- site/e2e/tests/updateTemplate.spec.ts | 4 +++- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/site/e2e/global.setup.ts b/site/e2e/global.setup.ts index c8fffff5d88d4..9a9d4d026fa83 100644 --- a/site/e2e/global.setup.ts +++ b/site/e2e/global.setup.ts @@ -3,7 +3,7 @@ import { Language } from "pages/CreateUserPage/CreateUserForm"; import * as constants from "./constants"; import { storageState } from "./playwright.config"; -test("setup first user", async ({ page }) => { +test("setup deployment", async ({ page }) => { await page.goto("/", { waitUntil: "domcontentloaded" }); // Setup first user diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index f35e22074eb34..dd7f791fbe958 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -160,7 +160,7 @@ export const createGroup = async (page: Page): Promise => { await page.getByLabel("Name", { exact: true }).fill(name); await page.getByTestId("form-submit").click(); await expect(page).toHaveURL( - /^\/groups\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/, + /\/groups\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/, ); return name; }; diff --git a/site/e2e/playwright.config.ts b/site/e2e/playwright.config.ts index 299c0963a6601..df38e572436aa 100644 --- a/site/e2e/playwright.config.ts +++ b/site/e2e/playwright.config.ts @@ -22,7 +22,7 @@ export default defineConfig({ testMatch: /.*\.spec\.ts/, dependencies: ["testsSetup"], use: { storageState }, - timeout: 60_000, + timeout: 20_000, }, ], reporter: [["./reporter.ts"]], diff --git a/site/e2e/reporter.ts b/site/e2e/reporter.ts index 9b4eaabd5ba1b..af7acc01cecb8 100644 --- a/site/e2e/reporter.ts +++ b/site/e2e/reporter.ts @@ -42,7 +42,7 @@ class CoderReporter implements Reporter { onStdErr(chunk: string, test?: TestCase, _?: TestResult): void { for (const line of filteredServerLogLines(chunk)) { - console.error(`[stderr] ${line}`); + // console.error(`[stderr] ${line}`); } if (!test) { return; diff --git a/site/e2e/tests/updateTemplate.spec.ts b/site/e2e/tests/updateTemplate.spec.ts index 53eb1d991a054..734f5e392a265 100644 --- a/site/e2e/tests/updateTemplate.spec.ts +++ b/site/e2e/tests/updateTemplate.spec.ts @@ -16,10 +16,11 @@ test("template update with new name redirects on successful submit", async ({ }); }); -test("add and remove a group", async ({ page }) => { +test.only("add and remove a group", async ({ page }) => { requiresEnterpriseLicense(); const templateName = await createTemplate(page); + await page.pause(); const groupName = await createGroup(page); await page.goto(`/templates/${templateName}/settings/permissions`, { @@ -33,6 +34,7 @@ test("add and remove a group", async ({ page }) => { .getByPlaceholder("Search for user or group", { exact: true }) .fill(groupName); + await page.pause(); await page.getByText("Add member").click(); }); From 6e1d1bc7c9a59c849e8192de41c54f853fb9808a Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Thu, 28 Mar 2024 16:36:02 -0600 Subject: [PATCH 3/5] seems legit --- site/e2e/tests/updateTemplate.spec.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/site/e2e/tests/updateTemplate.spec.ts b/site/e2e/tests/updateTemplate.spec.ts index 734f5e392a265..e4225d7a04bbd 100644 --- a/site/e2e/tests/updateTemplate.spec.ts +++ b/site/e2e/tests/updateTemplate.spec.ts @@ -16,11 +16,10 @@ test("template update with new name redirects on successful submit", async ({ }); }); -test.only("add and remove a group", async ({ page }) => { +test("add and remove a group", async ({ page }) => { requiresEnterpriseLicense(); const templateName = await createTemplate(page); - await page.pause(); const groupName = await createGroup(page); await page.goto(`/templates/${templateName}/settings/permissions`, { @@ -30,12 +29,15 @@ test.only("add and remove a group", async ({ page }) => { `/templates/${templateName}/settings/permissions`, ); + // Type the first half of the group name await page .getByPlaceholder("Search for user or group", { exact: true }) - .fill(groupName); + .fill(groupName.slice(0, 4)); - await page.pause(); + // Select the group from the list and add it + await page.getByText(groupName).click(); await page.getByText("Add member").click(); + expect(page.locator(".MuiTable-root").getByText(groupName)).toBeVisible(); }); test("require latest version", async ({ page }) => { From 5f70eb7881ab5d1be15905a32c835d77ab1b10e7 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Thu, 28 Mar 2024 22:39:45 +0000 Subject: [PATCH 4/5] =?UTF-8?q?=CA=95=C2=B7=CD=A1=E1=B4=A5=C2=B7=CA=94?= =?UTF-8?q?=EF=BB=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/e2e/helpers.ts | 4 ++-- site/e2e/reporter.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index dd7f791fbe958..519a8968f89f3 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -150,8 +150,8 @@ export const createTemplate = async ( return name; }; -// createGroup navigates to the /templates/new page and uploads a template -// with the resources provided in the responses argument. +// createGroup navigates to the /groups/create page and creates a group with a +// random name. export const createGroup = async (page: Page): Promise => { await page.goto("/groups/create", { waitUntil: "domcontentloaded" }); await expect(page).toHaveURL("/groups/create"); diff --git a/site/e2e/reporter.ts b/site/e2e/reporter.ts index af7acc01cecb8..9b4eaabd5ba1b 100644 --- a/site/e2e/reporter.ts +++ b/site/e2e/reporter.ts @@ -42,7 +42,7 @@ class CoderReporter implements Reporter { onStdErr(chunk: string, test?: TestCase, _?: TestResult): void { for (const line of filteredServerLogLines(chunk)) { - // console.error(`[stderr] ${line}`); + console.error(`[stderr] ${line}`); } if (!test) { return; From 5d16a82f7bffcf54e415e65afbe7b6a29dd778d3 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Thu, 28 Mar 2024 23:24:53 +0000 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=92=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/e2e/tests/updateTemplate.spec.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/site/e2e/tests/updateTemplate.spec.ts b/site/e2e/tests/updateTemplate.spec.ts index e4225d7a04bbd..1159b9903ff00 100644 --- a/site/e2e/tests/updateTemplate.spec.ts +++ b/site/e2e/tests/updateTemplate.spec.ts @@ -37,7 +37,9 @@ test("add and remove a group", async ({ page }) => { // Select the group from the list and add it await page.getByText(groupName).click(); await page.getByText("Add member").click(); - expect(page.locator(".MuiTable-root").getByText(groupName)).toBeVisible(); + await expect( + page.locator(".MuiTable-root").getByText(groupName), + ).toBeVisible(); }); test("require latest version", async ({ page }) => {