From 86075a5a6c1910d2220e18824f7458a61d8643df Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Thu, 21 Mar 2024 22:48:11 +0000 Subject: [PATCH 1/8] :| --- site/e2e/tests/updateTemplate.spec.ts | 26 +++++++++++++++++++++++++- site/e2e/tests/webTerminal.spec.ts | 3 +-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/site/e2e/tests/updateTemplate.spec.ts b/site/e2e/tests/updateTemplate.spec.ts index a1efdd3805e06..dfca1ee69ed93 100644 --- a/site/e2e/tests/updateTemplate.spec.ts +++ b/site/e2e/tests/updateTemplate.spec.ts @@ -1,4 +1,4 @@ -import { test } from "@playwright/test"; +import { expect, test } from "@playwright/test"; import { createTemplate, updateTemplateSettings } from "../helpers"; test("template update with new name redirects on successful submit", async ({ @@ -10,3 +10,27 @@ test("template update with new name redirects on successful submit", async ({ name: "new-name", }); }); + +test.only("require latest version", async ({ page }) => { + const templateName = await createTemplate(page); + + await page.goto(`/templates/${templateName}/settings`, { + waitUntil: "domcontentloaded", + }); + await expect(page).toHaveURL(`/templates/${templateName}/settings`); + + await (await page.waitForSelector("#require_active_version")).click(); + const ocheckbox = await page.waitForSelector("#require_active_version"); + expect(await ocheckbox.isChecked()).toBe(true); + await page.getByTestId("form-submit").click(); + + await page.goto(`/templates/${templateName}/settings`, { + waitUntil: "domcontentloaded", + }); + await expect(page).toHaveURL(`/templates/${templateName}/settings`); + await page.reload(); + const checkbox = await page.waitForSelector("#require_active_version"); + await checkbox.scrollIntoViewIfNeeded(); + await new Promise((resolve) => setTimeout(resolve, 3000)); + expect(await checkbox.isChecked()).toBe(true); +}); diff --git a/site/e2e/tests/webTerminal.spec.ts b/site/e2e/tests/webTerminal.spec.ts index 969f659e99f9a..2e08331686838 100644 --- a/site/e2e/tests/webTerminal.spec.ts +++ b/site/e2e/tests/webTerminal.spec.ts @@ -37,9 +37,8 @@ test("web terminal", async ({ context, page }) => { const agent = await startAgent(page, token); // Wait for the web terminal to open in a new tab - const pagePromise = context.waitForEvent("page"); await page.getByTestId("terminal").click(); - const terminal = await pagePromise; + const terminal = await context.waitForEvent("page"); await terminal.waitForLoadState("domcontentloaded"); await terminal.waitForSelector("div.xterm-rows", { From 898d81f6dafe5b0e8b212b0a569df8e3b56820f3 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Wed, 27 Mar 2024 11:50:58 -0600 Subject: [PATCH 2/8] something like this --- site/e2e/enterprise.setup.ts | 13 ++++++++++ site/e2e/playwright.config.ts | 23 +++++++++++++--- site/e2e/{global.setup.ts => tests.setup.ts} | 0 .../tests/updateTemplate.enterpriseSpec.ts | 21 +++++++++++++++ site/e2e/tests/updateTemplate.spec.ts | 26 +------------------ 5 files changed, 55 insertions(+), 28 deletions(-) create mode 100644 site/e2e/enterprise.setup.ts rename site/e2e/{global.setup.ts => tests.setup.ts} (100%) create mode 100644 site/e2e/tests/updateTemplate.enterpriseSpec.ts diff --git a/site/e2e/enterprise.setup.ts b/site/e2e/enterprise.setup.ts new file mode 100644 index 0000000000000..3cb7fc108387b --- /dev/null +++ b/site/e2e/enterprise.setup.ts @@ -0,0 +1,13 @@ +import { test } from "@playwright/test"; + +const license = process.env.CODER_E2E_ENTERPRISE_LICENSE!; + +test("setup license", async ({ page }) => { + await page.goto("/deployment/licenses", { waitUntil: "domcontentloaded" }); + + await page.getByText("Add a license").click(); + await page.getByRole("textbox").fill(license); + await page.getByText("Upload License").click(); + + await page.getByText("You have successfully added a license").isVisible(); +}); diff --git a/site/e2e/playwright.config.ts b/site/e2e/playwright.config.ts index 95e671485e46f..088c8f5f62463 100644 --- a/site/e2e/playwright.config.ts +++ b/site/e2e/playwright.config.ts @@ -20,13 +20,30 @@ const localURL = (port: number, path: string): string => { export default defineConfig({ projects: [ { - name: "setup", - testMatch: /global.setup\.ts/, + name: "testsSetup", + testMatch: /tests.setup\.ts/, }, { name: "tests", testMatch: /.*\.spec\.ts/, - dependencies: ["setup"], + dependencies: ["testsSetup"], + use: { + storageState: storageState, + }, + timeout: 60_000, + }, + { + name: "enterpriseSetup", + testMatch: /enterprise.setup\.ts/, + dependencies: ["tests"], + use: { + storageState: storageState, + }, + }, + { + name: "enterprise", + testMatch: /.*\.enterpriseSpec\.ts/, + dependencies: ["enterpriseSetup"], use: { storageState: storageState, }, diff --git a/site/e2e/global.setup.ts b/site/e2e/tests.setup.ts similarity index 100% rename from site/e2e/global.setup.ts rename to site/e2e/tests.setup.ts diff --git a/site/e2e/tests/updateTemplate.enterpriseSpec.ts b/site/e2e/tests/updateTemplate.enterpriseSpec.ts new file mode 100644 index 0000000000000..5f5a17f0fcf4a --- /dev/null +++ b/site/e2e/tests/updateTemplate.enterpriseSpec.ts @@ -0,0 +1,21 @@ +import { expect, test } from "@playwright/test"; +import { createTemplate } from "../helpers"; + +test("require latest version", async ({ page }) => { + const templateName = await createTemplate(page); + + await page.goto(`/templates/${templateName}/settings`, { + waitUntil: "domcontentloaded", + }); + await expect(page).toHaveURL(`/templates/${templateName}/settings`); + let checkbox = await page.waitForSelector("#require_active_version"); + await checkbox.click(); + await page.getByTestId("form-submit").click(); + + await page.goto(`/templates/${templateName}/settings`, { + waitUntil: "domcontentloaded", + }); + checkbox = await page.waitForSelector("#require_active_version"); + await checkbox.scrollIntoViewIfNeeded(); + expect(await checkbox.isChecked()).toBe(true); +}); diff --git a/site/e2e/tests/updateTemplate.spec.ts b/site/e2e/tests/updateTemplate.spec.ts index dfca1ee69ed93..a1efdd3805e06 100644 --- a/site/e2e/tests/updateTemplate.spec.ts +++ b/site/e2e/tests/updateTemplate.spec.ts @@ -1,4 +1,4 @@ -import { expect, test } from "@playwright/test"; +import { test } from "@playwright/test"; import { createTemplate, updateTemplateSettings } from "../helpers"; test("template update with new name redirects on successful submit", async ({ @@ -10,27 +10,3 @@ test("template update with new name redirects on successful submit", async ({ name: "new-name", }); }); - -test.only("require latest version", async ({ page }) => { - const templateName = await createTemplate(page); - - await page.goto(`/templates/${templateName}/settings`, { - waitUntil: "domcontentloaded", - }); - await expect(page).toHaveURL(`/templates/${templateName}/settings`); - - await (await page.waitForSelector("#require_active_version")).click(); - const ocheckbox = await page.waitForSelector("#require_active_version"); - expect(await ocheckbox.isChecked()).toBe(true); - await page.getByTestId("form-submit").click(); - - await page.goto(`/templates/${templateName}/settings`, { - waitUntil: "domcontentloaded", - }); - await expect(page).toHaveURL(`/templates/${templateName}/settings`); - await page.reload(); - const checkbox = await page.waitForSelector("#require_active_version"); - await checkbox.scrollIntoViewIfNeeded(); - await new Promise((resolve) => setTimeout(resolve, 3000)); - expect(await checkbox.isChecked()).toBe(true); -}); From 174917357719e452f1ce2405cb13e99db1ec876d Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Wed, 27 Mar 2024 12:27:58 -0600 Subject: [PATCH 3/8] read secret --- .github/workflows/ci.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ad21801cbdab4..6d84434301664 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -473,6 +473,7 @@ jobs: - run: pnpm playwright:test --workers 1 env: DEBUG: pw:api + CODER_E2E_ENTERPRISE_LICENSE: ${{ secrets.CODER_E2E_ENTERPRISE_LICENSE }} working-directory: site - name: Upload Playwright Failed Tests From a5b7635a9ceb40eb27e03fd0922ca0aea2af518d Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Wed, 27 Mar 2024 13:56:04 -0600 Subject: [PATCH 4/8] =?UTF-8?q?=F0=9F=A7=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/e2e/constants.ts | 7 ++++++ site/e2e/enterprise.setup.ts | 7 +++--- site/e2e/helpers.ts | 25 +++++++------------ site/e2e/playwright.config.ts | 6 ++--- .../tests/updateTemplate.enterpriseSpec.ts | 2 ++ site/e2e/tests/updateTemplate.spec.ts | 2 +- 6 files changed, 25 insertions(+), 24 deletions(-) diff --git a/site/e2e/constants.ts b/site/e2e/constants.ts index 69c95fda1064f..00608311b9c08 100644 --- a/site/e2e/constants.ts +++ b/site/e2e/constants.ts @@ -1,3 +1,7 @@ +import * as path from "path"; + +export const coderMain = path.join(__dirname, "../../enterprise/cmd/coder"); + // Default port from the server export const coderPort = process.env.CODER_E2E_PORT ? Number(process.env.CODER_E2E_PORT) @@ -28,3 +32,6 @@ export const gitAuth = { validatePath: "/validate", installationsPath: "/installations", }; + +export const enterpriseLicense = process.env.CODER_E2E_ENTERPRISE_LICENSE ?? ""; +export const skipEnterpriseTests = Boolean(enterpriseLicense); diff --git a/site/e2e/enterprise.setup.ts b/site/e2e/enterprise.setup.ts index 3cb7fc108387b..0b75b340e92d8 100644 --- a/site/e2e/enterprise.setup.ts +++ b/site/e2e/enterprise.setup.ts @@ -1,12 +1,13 @@ import { test } from "@playwright/test"; - -const license = process.env.CODER_E2E_ENTERPRISE_LICENSE!; +import { enterpriseLicense, skipEnterpriseTests } from "./constants"; test("setup license", async ({ page }) => { + test.skip(skipEnterpriseTests); + await page.goto("/deployment/licenses", { waitUntil: "domcontentloaded" }); await page.getByText("Add a license").click(); - await page.getByRole("textbox").fill(license); + await page.getByRole("textbox").fill(enterpriseLicense); await page.getByText("Upload License").click(); await page.getByText("You have successfully added a license").isVisible(); diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index 7bf50b1c6d04f..3891c6eccac68 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -12,7 +12,12 @@ import type { UpdateTemplateMeta, } from "api/typesGenerated"; import { TarWriter } from "utils/tar"; -import { agentPProfPort, coderPort, prometheusPort } from "./constants"; +import { + agentPProfPort, + coderMain, + coderPort, + prometheusPort, +} from "./constants"; import { Agent, type App, @@ -147,7 +152,7 @@ export const sshIntoWorkspace = async ( binaryArgs: string[] = [], ): Promise => { if (binaryPath === "go") { - binaryArgs = ["run", coderMainPath()]; + binaryArgs = ["run", coderMain]; } const sessionToken = await findSessionToken(page); return new Promise((resolve, reject) => { @@ -229,7 +234,7 @@ export const startAgent = async ( page: Page, token: string, ): Promise => { - return startAgentWithCommand(page, token, "go", "run", coderMainPath()); + return startAgentWithCommand(page, token, "go", "run", coderMain); }; // downloadCoderVersion downloads the version provided into a temporary dir and @@ -358,18 +363,6 @@ const waitUntilUrlIsNotResponding = async (url: string) => { ); }; -const coderMainPath = (): string => { - return path.join( - __dirname, - "..", - "..", - "enterprise", - "cmd", - "coder", - "main.go", - ); -}; - // Allows users to more easily define properties they want for agents and resources! type RecursivePartial = { [P in keyof T]?: T[P] extends (infer U)[] @@ -686,7 +679,7 @@ export const updateTemplate = async ( "go", [ "run", - coderMainPath(), + coderMain, "templates", "push", "--test.provisioner", diff --git a/site/e2e/playwright.config.ts b/site/e2e/playwright.config.ts index d8c89f9575962..4feb52eed61d1 100644 --- a/site/e2e/playwright.config.ts +++ b/site/e2e/playwright.config.ts @@ -1,11 +1,9 @@ import { defineConfig } from "@playwright/test"; -import path from "path"; -import { coderPort, coderdPProfPort, gitAuth } from "./constants"; +import * as path from "path"; +import { coderMain, coderPort, coderdPProfPort, gitAuth } from "./constants"; export const wsEndpoint = process.env.CODER_E2E_WS_ENDPOINT; -const coderMain = path.join(__dirname, "../../enterprise/cmd/coder"); - // This is where auth cookies are stored! export const storageState = path.join(__dirname, ".auth.json"); diff --git a/site/e2e/tests/updateTemplate.enterpriseSpec.ts b/site/e2e/tests/updateTemplate.enterpriseSpec.ts index 5f5a17f0fcf4a..8712e157835ef 100644 --- a/site/e2e/tests/updateTemplate.enterpriseSpec.ts +++ b/site/e2e/tests/updateTemplate.enterpriseSpec.ts @@ -1,7 +1,9 @@ import { expect, test } from "@playwright/test"; +import { skipEnterpriseTests } from "../constants"; import { createTemplate } from "../helpers"; test("require latest version", async ({ page }) => { + test.skip(skipEnterpriseTests); const templateName = await createTemplate(page); await page.goto(`/templates/${templateName}/settings`, { diff --git a/site/e2e/tests/updateTemplate.spec.ts b/site/e2e/tests/updateTemplate.spec.ts index a1efdd3805e06..9c29399655732 100644 --- a/site/e2e/tests/updateTemplate.spec.ts +++ b/site/e2e/tests/updateTemplate.spec.ts @@ -1,7 +1,7 @@ import { test } from "@playwright/test"; import { createTemplate, updateTemplateSettings } from "../helpers"; -test("template update with new name redirects on successful submit", async ({ +test.only("template update with new name redirects on successful submit", async ({ page, }) => { const templateName = await createTemplate(page); From 3a8af898265a680119529d95463281a35fcf8f47 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Thu, 28 Mar 2024 18:19:48 +0000 Subject: [PATCH 5/8] ugh --- .github/workflows/ci.yaml | 2 +- scripts/remote_playwright.sh | 2 +- site/e2e/constants.ts | 2 +- site/e2e/playwright.config.ts | 2 +- site/e2e/tests/updateTemplate.spec.ts | 2 +- site/package.json | 2 +- site/pnpm-lock.yaml | 20 ++++++++++---------- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1d5c0667ace9d..fce4a62801b96 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -472,7 +472,7 @@ jobs: - run: pnpm playwright:install working-directory: site - - run: pnpm playwright:test --workers 1 + - run: pnpm playwright:test --forbid-only --workers 1 env: DEBUG: pw:api CODER_E2E_ENTERPRISE_LICENSE: ${{ secrets.CODER_E2E_ENTERPRISE_LICENSE }} diff --git a/scripts/remote_playwright.sh b/scripts/remote_playwright.sh index 5d7f35ea5815c..92cce9b69d331 100755 --- a/scripts/remote_playwright.sh +++ b/scripts/remote_playwright.sh @@ -3,7 +3,7 @@ set -euo pipefail workspace=${1:-} coder_repo=${2:-.} -port=${3:-3000} +port=${3:-3111} if [[ -z "${workspace}" ]]; then echo "Usage: $0 [workspace coder/coder dir] [e2e port]" diff --git a/site/e2e/constants.ts b/site/e2e/constants.ts index 00608311b9c08..bcb465b8c6415 100644 --- a/site/e2e/constants.ts +++ b/site/e2e/constants.ts @@ -34,4 +34,4 @@ export const gitAuth = { }; export const enterpriseLicense = process.env.CODER_E2E_ENTERPRISE_LICENSE ?? ""; -export const skipEnterpriseTests = Boolean(enterpriseLicense); +export const skipEnterpriseTests = !enterpriseLicense; diff --git a/site/e2e/playwright.config.ts b/site/e2e/playwright.config.ts index 4feb52eed61d1..cb3d4c5c0e9a0 100644 --- a/site/e2e/playwright.config.ts +++ b/site/e2e/playwright.config.ts @@ -29,7 +29,7 @@ export default defineConfig({ { name: "enterpriseSetup", testMatch: /enterprise.setup\.ts/, - dependencies: ["tests"], + dependencies: ["testsSetup"], use: { storageState: storageState, }, diff --git a/site/e2e/tests/updateTemplate.spec.ts b/site/e2e/tests/updateTemplate.spec.ts index 9c29399655732..a1efdd3805e06 100644 --- a/site/e2e/tests/updateTemplate.spec.ts +++ b/site/e2e/tests/updateTemplate.spec.ts @@ -1,7 +1,7 @@ import { test } from "@playwright/test"; import { createTemplate, updateTemplateSettings } from "../helpers"; -test.only("template update with new name redirects on successful submit", async ({ +test("template update with new name redirects on successful submit", async ({ page, }) => { const templateName = await createTemplate(page); diff --git a/site/package.json b/site/package.json index 27d7196cbedbe..52a379552706e 100644 --- a/site/package.json +++ b/site/package.json @@ -95,7 +95,7 @@ }, "devDependencies": { "@octokit/types": "12.3.0", - "@playwright/test": "1.39.0", + "@playwright/test": "1.42.1", "@storybook/addon-actions": "7.6.11", "@storybook/addon-essentials": "7.6.11", "@storybook/addon-interactions": "7.6.11", diff --git a/site/pnpm-lock.yaml b/site/pnpm-lock.yaml index b1757bbd83784..7b824188834c1 100644 --- a/site/pnpm-lock.yaml +++ b/site/pnpm-lock.yaml @@ -204,8 +204,8 @@ devDependencies: specifier: 12.3.0 version: 12.3.0 '@playwright/test': - specifier: 1.39.0 - version: 1.39.0 + specifier: 1.42.1 + version: 1.42.1 '@storybook/addon-actions': specifier: 7.6.11 version: 7.6.11 @@ -3064,12 +3064,12 @@ packages: dev: true optional: true - /@playwright/test@1.39.0: - resolution: {integrity: sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ==} + /@playwright/test@1.42.1: + resolution: {integrity: sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==} engines: {node: '>=16'} hasBin: true dependencies: - playwright: 1.39.0 + playwright: 1.42.1 dev: true /@popperjs/core@2.11.8: @@ -11478,18 +11478,18 @@ packages: find-up: 5.0.0 dev: true - /playwright-core@1.39.0: - resolution: {integrity: sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==} + /playwright-core@1.42.1: + resolution: {integrity: sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==} engines: {node: '>=16'} hasBin: true dev: true - /playwright@1.39.0: - resolution: {integrity: sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==} + /playwright@1.42.1: + resolution: {integrity: sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==} engines: {node: '>=16'} hasBin: true dependencies: - playwright-core: 1.39.0 + playwright-core: 1.42.1 optionalDependencies: fsevents: 2.3.2 dev: true From 13412e2e6f28e67984fc010e2c80641b83cae514 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Thu, 28 Mar 2024 19:10:55 +0000 Subject: [PATCH 6/8] yay!!!! --- .github/workflows/ci.yaml | 7 +++++ site/e2e/constants.ts | 1 - site/e2e/enterprise.setup.ts | 14 --------- site/e2e/{tests.setup.ts => global.setup.ts} | 12 ++++++++ site/e2e/helpers.ts | 8 ++++- site/e2e/playwright.config.ts | 23 ++------------- .../tests/updateTemplate.enterpriseSpec.ts | 23 --------------- site/e2e/tests/updateTemplate.spec.ts | 29 +++++++++++++++++-- 8 files changed, 55 insertions(+), 62 deletions(-) delete mode 100644 site/e2e/enterprise.setup.ts rename site/e2e/{tests.setup.ts => global.setup.ts} (62%) delete mode 100644 site/e2e/tests/updateTemplate.enterpriseSpec.ts diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index fce4a62801b96..084d4c5983407 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -472,6 +472,13 @@ jobs: - run: pnpm playwright:install working-directory: site + # Run tests that don't require an enterprise license without an enterprise license + - run: pnpm playwright:test --forbid-only --workers 1 + env: + DEBUG: pw:api + working-directory: site + + # Run all of the tests with an enterprise license - run: pnpm playwright:test --forbid-only --workers 1 env: DEBUG: pw:api diff --git a/site/e2e/constants.ts b/site/e2e/constants.ts index bcb465b8c6415..8b4fbe50d5a7d 100644 --- a/site/e2e/constants.ts +++ b/site/e2e/constants.ts @@ -34,4 +34,3 @@ export const gitAuth = { }; export const enterpriseLicense = process.env.CODER_E2E_ENTERPRISE_LICENSE ?? ""; -export const skipEnterpriseTests = !enterpriseLicense; diff --git a/site/e2e/enterprise.setup.ts b/site/e2e/enterprise.setup.ts deleted file mode 100644 index 0b75b340e92d8..0000000000000 --- a/site/e2e/enterprise.setup.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { test } from "@playwright/test"; -import { enterpriseLicense, skipEnterpriseTests } from "./constants"; - -test("setup license", async ({ page }) => { - test.skip(skipEnterpriseTests); - - await page.goto("/deployment/licenses", { waitUntil: "domcontentloaded" }); - - await page.getByText("Add a license").click(); - await page.getByRole("textbox").fill(enterpriseLicense); - await page.getByText("Upload License").click(); - - await page.getByText("You have successfully added a license").isVisible(); -}); diff --git a/site/e2e/tests.setup.ts b/site/e2e/global.setup.ts similarity index 62% rename from site/e2e/tests.setup.ts rename to site/e2e/global.setup.ts index 9336791f35cad..d8b1c15e57f36 100644 --- a/site/e2e/tests.setup.ts +++ b/site/e2e/global.setup.ts @@ -1,6 +1,7 @@ import { test, expect } from "@playwright/test"; import { Language } from "pages/CreateUserPage/CreateUserForm"; import * as constants from "./constants"; +import { requiresEnterpriseLicense } from "./helpers"; import { storageState } from "./playwright.config"; test("setup first user", async ({ page }) => { @@ -16,3 +17,14 @@ test("setup first user", async ({ page }) => { await page.getByTestId("button-select-template").isVisible(); }); + +test("setup license", async ({ page }) => { + requiresEnterpriseLicense(); + await page.goto("/deployment/licenses", { waitUntil: "domcontentloaded" }); + + await page.getByText("Add a license").click(); + await page.getByRole("textbox").fill(constants.enterpriseLicense); + await page.getByText("Upload License").click(); + + await page.getByText("You have successfully added a license").isVisible(); +}); diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index 3891c6eccac68..0f68de3e07a8e 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -1,4 +1,4 @@ -import { type BrowserContext, expect, type Page } from "@playwright/test"; +import { type BrowserContext, expect, type Page, test } from "@playwright/test"; import axios from "axios"; import { type ChildProcess, exec, spawn } from "child_process"; import { randomUUID } from "crypto"; @@ -16,6 +16,7 @@ import { agentPProfPort, coderMain, coderPort, + enterpriseLicense, prometheusPort, } from "./constants"; import { @@ -30,6 +31,11 @@ import { type RichParameter, } from "./provisionerGenerated"; +// requiresEnterpriseLicense will skip the test if we're not running with an enterprise license +export function requiresEnterpriseLicense() { + test.skip(!enterpriseLicense); +} + // createWorkspace creates a workspace for a template. // It does not wait for it to be running, but it does navigate to the page. export const createWorkspace = async ( diff --git a/site/e2e/playwright.config.ts b/site/e2e/playwright.config.ts index cb3d4c5c0e9a0..49d07c615ff4a 100644 --- a/site/e2e/playwright.config.ts +++ b/site/e2e/playwright.config.ts @@ -15,37 +15,18 @@ export default defineConfig({ projects: [ { name: "testsSetup", - testMatch: /tests.setup\.ts/, + testMatch: /global.setup\.ts/, }, { name: "tests", testMatch: /.*\.spec\.ts/, dependencies: ["testsSetup"], - use: { - storageState: storageState, - }, - timeout: 60_000, - }, - { - name: "enterpriseSetup", - testMatch: /enterprise.setup\.ts/, - dependencies: ["testsSetup"], - use: { - storageState: storageState, - }, - }, - { - name: "enterprise", - testMatch: /.*\.enterpriseSpec\.ts/, - dependencies: ["enterpriseSetup"], - use: { - storageState: storageState, - }, timeout: 60_000, }, ], reporter: [["./reporter.ts"]], use: { + storageState, baseURL: `http://localhost:${coderPort}`, video: "retain-on-failure", ...(wsEndpoint diff --git a/site/e2e/tests/updateTemplate.enterpriseSpec.ts b/site/e2e/tests/updateTemplate.enterpriseSpec.ts deleted file mode 100644 index 8712e157835ef..0000000000000 --- a/site/e2e/tests/updateTemplate.enterpriseSpec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { expect, test } from "@playwright/test"; -import { skipEnterpriseTests } from "../constants"; -import { createTemplate } from "../helpers"; - -test("require latest version", async ({ page }) => { - test.skip(skipEnterpriseTests); - const templateName = await createTemplate(page); - - await page.goto(`/templates/${templateName}/settings`, { - waitUntil: "domcontentloaded", - }); - await expect(page).toHaveURL(`/templates/${templateName}/settings`); - let checkbox = await page.waitForSelector("#require_active_version"); - await checkbox.click(); - await page.getByTestId("form-submit").click(); - - await page.goto(`/templates/${templateName}/settings`, { - waitUntil: "domcontentloaded", - }); - checkbox = await page.waitForSelector("#require_active_version"); - await checkbox.scrollIntoViewIfNeeded(); - expect(await checkbox.isChecked()).toBe(true); -}); diff --git a/site/e2e/tests/updateTemplate.spec.ts b/site/e2e/tests/updateTemplate.spec.ts index a1efdd3805e06..06cf88a096604 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 { + createTemplate, + requiresEnterpriseLicense, + updateTemplateSettings, +} from "../helpers"; test("template update with new name redirects on successful submit", async ({ page, @@ -10,3 +14,24 @@ test("template update with new name redirects on successful submit", async ({ name: "new-name", }); }); + +test("require latest version", async ({ page }) => { + requiresEnterpriseLicense(); + + const templateName = await createTemplate(page); + + await page.goto(`/templates/${templateName}/settings`, { + waitUntil: "domcontentloaded", + }); + await expect(page).toHaveURL(`/templates/${templateName}/settings`); + let checkbox = await page.waitForSelector("#require_active_version"); + await checkbox.click(); + await page.getByTestId("form-submit").click(); + + await page.goto(`/templates/${templateName}/settings`, { + waitUntil: "domcontentloaded", + }); + checkbox = await page.waitForSelector("#require_active_version"); + await checkbox.scrollIntoViewIfNeeded(); + expect(await checkbox.isChecked()).toBe(true); +}); From d4541f4677ee745683aa4fe2b9b1f2b711079e5d Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Thu, 28 Mar 2024 21:37:11 +0000 Subject: [PATCH 7/8] ok then --- site/e2e/global.setup.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/site/e2e/global.setup.ts b/site/e2e/global.setup.ts index d8b1c15e57f36..c8fffff5d88d4 100644 --- a/site/e2e/global.setup.ts +++ b/site/e2e/global.setup.ts @@ -1,12 +1,12 @@ import { test, expect } from "@playwright/test"; import { Language } from "pages/CreateUserPage/CreateUserForm"; import * as constants from "./constants"; -import { requiresEnterpriseLicense } from "./helpers"; import { storageState } from "./playwright.config"; test("setup first user", async ({ page }) => { await page.goto("/", { waitUntil: "domcontentloaded" }); + // Setup first user await page.getByLabel(Language.usernameLabel).fill(constants.username); await page.getByLabel(Language.emailLabel).fill(constants.email); await page.getByLabel(Language.passwordLabel).fill(constants.password); @@ -16,15 +16,15 @@ test("setup first user", async ({ page }) => { await page.context().storageState({ path: storageState }); await page.getByTestId("button-select-template").isVisible(); -}); -test("setup license", async ({ page }) => { - requiresEnterpriseLicense(); - await page.goto("/deployment/licenses", { waitUntil: "domcontentloaded" }); + // Setup license + if (constants.enterpriseLicense) { + await page.goto("/deployment/licenses", { waitUntil: "domcontentloaded" }); - await page.getByText("Add a license").click(); - await page.getByRole("textbox").fill(constants.enterpriseLicense); - await page.getByText("Upload License").click(); + await page.getByText("Add a license").click(); + await page.getByRole("textbox").fill(constants.enterpriseLicense); + await page.getByText("Upload License").click(); - await page.getByText("You have successfully added a license").isVisible(); + await page.getByText("You have successfully added a license").isVisible(); + } }); From a2c81b6e2d4a982202eead8d60ea684b307e0c73 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Thu, 28 Mar 2024 21:41:52 +0000 Subject: [PATCH 8/8] ah, right --- site/e2e/playwright.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/e2e/playwright.config.ts b/site/e2e/playwright.config.ts index 49d07c615ff4a..299c0963a6601 100644 --- a/site/e2e/playwright.config.ts +++ b/site/e2e/playwright.config.ts @@ -21,12 +21,12 @@ export default defineConfig({ name: "tests", testMatch: /.*\.spec\.ts/, dependencies: ["testsSetup"], + use: { storageState }, timeout: 60_000, }, ], reporter: [["./reporter.ts"]], use: { - storageState, baseURL: `http://localhost:${coderPort}`, video: "retain-on-failure", ...(wsEndpoint