1
0
Fork 0
polaris-task-force/playwright.config.ts
Z8MB1E d16e721ccc test(e2e): seed e2e user, serialize workers, and deflake specs
The suite could not pass on the test database: global setup now seeds the shared dev/Test123 login with a superuser Roles doc and the dashboard rank, and points its own Payload connection at the test database. Playwright runs one worker with generous test and expect timeouts because first navigation to a route triggers a cold webpack compile, and gains E2E_BROWSER_PATH to swap the browser binary when the installed Vivaldi crashes under automation. The landing page gains the missing h1 the guest specs assert, login flows wait for the redirect to land, strict-mode locator collisions get exact or level-scoped matches, the session banner test re-signs the login claims with a short expiry using the runtime secret, and the reservation dialog click forces the dispatch and verifies the dialog opened (the trigger goes aria-hidden behind the modal mid-click, which stranded the retry loop).
2026-09-30 18:43:29 -04:00

87 lines
2.7 KiB
TypeScript

import { defineConfig, devices } from "@playwright/test";
/**
* Read environment variables from file.
* https://github.com/motdotla/dotenv
*/
import "dotenv/config";
import { resolveTestDatabaseUri } from "./tests/test-db";
/**
* E2E runs against the dedicated test database, never the development one.
* The webServer (dev server) inherits DATABASE_URI pointed at the test DB;
* global setup guarantees it exists, is migrated and is empty.
*/
const testDatabaseUri = resolveTestDatabaseUri();
/**
* Dev-server realities: first navigation to a route triggers a webpack
* compile that can take far longer than the defaults. Generous timeouts keep
* the suite honest on cold compiles without each spec carrying its own waits.
*/
const testTimeout = 180_000;
const expectTimeout = 30_000;
/**
* See https://playwright.dev/docs/test-configuration.
*/
export default defineConfig({
testDir: "./tests/e2e",
/* Each test may take up to testTimeout (cold dev-server compiles). */
timeout: testTimeout,
expect: {
timeout: expectTimeout,
},
/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: !!process.env.CI,
/* Retry on CI only */
retries: process.env.CI ? 2 : 0,
/* Opt out of parallel tests on CI. */
workers: 1,
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: "html",
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
/* Base URL to use in actions like `await page.goto('/')`. */
baseURL: "http://localhost:3000",
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: "on-first-retry",
},
projects: [
{
name: "vivaldi",
use: {
...devices["Desktop Chrome"],
launchOptions: {
// Default: the unit's actual browser (Vivaldi). E2E_BROWSER_PATH
// overrides the binary, e.g. when the installed Vivaldi crashes
// under automation; set it to Playwright's bundled chromium.
executablePath: process.env.E2E_BROWSER_PATH || "/usr/bin/vivaldi",
args: [
"--headless=new",
"--no-sandbox",
"--disable-gpu",
"--disable-dev-shm-usage",
"--no-first-run",
"--noerrdialogs",
"--ozone-platform=headless",
"--ozone-override-screen-size=1280,720",
"--use-angle=swiftshader-webgl",
],
},
},
},
],
webServer: {
command: "pnpm dev",
reuseExistingServer: true,
url: "http://localhost:3000",
env: {
...process.env,
DATABASE_URI: testDatabaseUri,
},
},
globalSetup: "./tests/e2e/global-setup.ts",
});