import { defineConfig } from '@playwright/test'; // Smoke-level e2e (WP-19): one happy path, one degraded path, against the REAL // backend — proving the FE+BE seam, not replacing component/unit tests. const baseURL = process.env['E2E_BASE_URL'] ?? 'http://localhost:4200'; export default defineConfig({ testDir: './e2e', timeout: 30_000, fullyParallel: true, retries: process.env['CI'] ? 1 : 0, reporter: process.env['CI'] ? 'github' : 'list', use: { baseURL, trace: 'on-first-retry', }, projects: [{ name: 'chromium', use: { browserName: 'chromium' } }], // Playwright owns both servers' lifecycle — start, wait-for-ready, tear down — in the // one `npm run e2e` process, so `npm run e2e` is self-contained locally AND in CI. // Do NOT background them as separate CI steps: a process started with `&` in one // Actions `run:` step is killed when that step's shell exits, so a later `wait-on` // step hangs forever on servers that are already gone (the 2-hour e2e hang). // `reuseExistingServer` locally lets you run against an already-running app (incl. the // docker stack on 4200/5000); CI always starts fresh. Backend gets a longer timeout — // `dotnet run` cold-restores+builds before it listens. webServer: [ { command: 'dotnet run --project backend/src/BigRegister.Api --urls http://localhost:5000', url: 'http://localhost:5000/swagger', reuseExistingServer: !process.env['CI'], timeout: 180_000, }, { command: 'npm start', url: baseURL, reuseExistingServer: !process.env['CI'], timeout: 120_000, }, ], });