firehose/app/playwright.config.ts
Firehose Bot 6b201e7e63 Set up Playwright for browser testing
- Playwright config for local browsers (Firefox by default) and Docker Chrome
- docker-compose.chrome.yml for browserless/chrome container (arm64)
- 4 connectivity smoke tests (home, contact, blog pages)
- 3 auth tests (redirect, login, logout) with auth helpers
- Custom fixtures with remote CDP connect support
- Shell scripts for start/stop/full Docker Chrome workflow
- Makefile targets: playwright, playwright-docker, playwright-full
2026-05-18 23:12:42 +01:00

58 lines
1.7 KiB
TypeScript

import { defineConfig, devices } from "@playwright/test";
// Default Playwright e2e configuration.
//
// Uses Firefox by default (Playwright Chromium crashes on macOS 15
// due to Crashpad permission restrictions).
//
// ## Usage
//
// make playwright # run with default browser (Firefox)
// PLAYWRIGHT_BROWSER=chromium make playwright
// PLAYWRIGHT_BROWSER=webkit make playwright
//
// # Run a single test file:
// PLAYWRIGHT_BROWSERS_PATH=assets/node_modules/playwright-core/.local-browsers \
// npx playwright test --config=playwright.config.ts test/e2e/smoke.spec.ts
//
// ## Docker Chrome (alternative)
//
// Use playwright.docker.config.ts instead of this config:
//
// docker compose -f docker-compose.chrome.yml up -d
// npx playwright test --config=playwright.docker.config.ts
const browserEnv = process.env.PLAYWRIGHT_BROWSER || "firefox";
const deviceFor = (name: string) => {
switch (name) {
case "chromium": return devices["Desktop Chrome"];
case "firefox": return devices["Desktop Firefox"];
case "webkit": return devices["Desktop Safari"];
default:
console.warn(`Unknown browser "${name}", falling back to Firefox`);
return devices["Desktop Firefox"];
}
};
export default defineConfig({
testDir: "./test/e2e",
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined,
reporter: "list",
use: {
baseURL: process.env.PLAYWRIGHT_BASE_URL || "http://localhost:8056",
trace: "on-first-retry",
headless: process.env.PLAYWRIGHT_HEADLESS !== "false",
},
projects: [
{
name: browserEnv,
use: { ...deviceFor(browserEnv) },
},
],
});