From 9954d813c283fbe12c8db207efad1a223f4fd940 Mon Sep 17 00:00:00 2001 From: KingKDot Date: Wed, 15 Jul 2026 12:21:57 -0500 Subject: [PATCH] have it prepare itself --- Overlord-Server/package.json | 3 ++- Overlord-Server/test/e2e/access.spec.ts | 31 ++++++++++++++----------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/Overlord-Server/package.json b/Overlord-Server/package.json index 308ee3f..a51b148 100644 --- a/Overlord-Server/package.json +++ b/Overlord-Server/package.json @@ -5,7 +5,8 @@ "type": "module", "scripts": { "test": "bun run scripts/run-tests-isolated.ts", - "test:e2e": "playwright test", + "test:e2e": "bun run test:e2e:prepare && playwright test", + "test:e2e:prepare": "bun run build:css && bun run vendor", "test:e2e:install": "playwright install chromium", "dev": "bun --watch src/index.ts", "start": "bun run build && bun dist/index.js", diff --git a/Overlord-Server/test/e2e/access.spec.ts b/Overlord-Server/test/e2e/access.spec.ts index 53215f8..4c5d85e 100644 --- a/Overlord-Server/test/e2e/access.spec.ts +++ b/Overlord-Server/test/e2e/access.spec.ts @@ -79,11 +79,7 @@ test.describe("authentication and authorization", () => { }); test("admin page sweep loads without browser errors", async ({ page }) => { - // This test validates each page's static/HTTP initialization. Opening two - // long-lived sockets for every rapid hard navigation would only exercise the - // server's WebSocket rate limiter; socket lifecycle is covered separately. - await page.routeWebSocket(/.*/, (socket) => socket.close()); - const issues = collectBrowserIssues(page); + test.setTimeout(60_000); await login(page); const routes = [ @@ -104,13 +100,22 @@ test("admin page sweep loads without browser errors", async ({ page }) => { ["/purgatory", "#enrollment-table"], ] as const; - for (const [path, selector] of routes) { - const response = await page.goto(path); - expect(response?.status(), `${path} should return 200`).toBe(200); - await expect(page.locator("#top-nav"), `${path} should mount navigation`).toBeVisible(); - await expect(page.locator(selector).first(), `${path} should render ${selector}`).toBeVisible(); - await page.waitForTimeout(250); - } + const context = page.context(); + await page.close(); - expect(issues).toEqual([]); + for (const [path, selector] of routes) { + const routePage = await context.newPage(); + // This sweep validates static/HTTP initialization. Opening two long-lived + // sockets per page would only exercise the server's WebSocket rate limiter; + // socket lifecycle is covered by the Turbo navigation test. + await routePage.routeWebSocket(/.*/, (socket) => socket.close()); + const issues = collectBrowserIssues(routePage); + const response = await routePage.goto(path); + expect(response?.status(), `${path} should return 200`).toBe(200); + await expect(routePage.locator("#top-nav"), `${path} should mount navigation`).toBeVisible(); + await expect(routePage.locator(selector).first(), `${path} should render ${selector}`).toBeVisible(); + await routePage.waitForTimeout(250); + expect(issues, `${path} should not log browser errors`).toEqual([]); + await routePage.close(); + } });