import { defineConfig, devices, type Project } from '@playwright/test'; // Bewusst ohne Import von support/auth-config: Ein reiner perf-Lauf (PERF_ONLY=1) darf keine lokalen // Auth-Konstanten voraussetzen. Der Standardwert ist derselbe wie env.webUrl. const webUrl = process.env.WEB_URL ?? 'http://localhost:3000'; const perfUrl = process.env.PERF_WEB_URL; /** Reiner Messlauf (Krit. 7): nur Projekt `perf`, kein lokaler Web-Server, keine lokalen Konstanten. */ const perfOnly = process.env.PERF_ONLY === '1'; /** * Projekte (Spec #1 ยง 7): * - api GoTrue ueber Kong + Mailpit-Helfer * - web gebaute Flutter-Web-App (`app/build/web`, statisch auf Port 3000) * - throttle Drosselung (Krit. 7) gegen den Extra-Container, nur mit THROTTLE_GOTRUE_URL * - spike SMTP-Spike (Issue #37), nur mit SPIKE_GOTRUE_URL, nicht blockierend * - perf Latenzmessung der Katalogsuche (KAT-01 Krit. 7), nur mit PERF_WEB_URL, nur lesend, * nie in der CI (kein Teil von e2e-run.sh); PERF_ONLY=1 startet keinen lokalen Web-Server */ const projects: Project[] = perfOnly ? [] : [ { name: 'api', testDir: './tests/api', use: {} }, { name: 'web', testDir: './tests/web', use: { ...devices['Desktop Chrome'], baseURL: webUrl, // Englische Texte (app_en.arb); die App waehlt die Sprache nach dem Browser. locale: 'en-US', // Der Flutter-Service-Worker wuerde alte Builds cachen. serviceWorkers: 'block', }, }, ]; if (perfUrl) { projects.push({ name: 'perf', testDir: './tests/perf', timeout: 900_000, retries: 0, fullyParallel: false, use: { ...devices['Desktop Chrome'], baseURL: perfUrl, locale: 'en-US', serviceWorkers: 'block' }, }); } if (!perfOnly && process.env.THROTTLE_GOTRUE_URL) { projects.push({ name: 'throttle', testDir: './tests/throttle', use: {} }); } if (!perfOnly && process.env.SPIKE_GOTRUE_URL) { projects.push({ name: 'spike', testDir: './tests/spike', use: {}, retries: 0 }); } export default defineConfig({ timeout: 60_000, expect: { timeout: 10_000 }, fullyParallel: true, forbidOnly: !!process.env.CI, retries: process.env.CI ? 1 : 0, workers: process.env.CI ? 2 : 4, reporter: process.env.CI ? [['list'], ['html', { open: 'never' }]] : [['list']], use: { trace: 'retain-on-failure' }, projects, // SPA-Fallback (`-s`), sonst liefert /auth/confirm?... 404. Entfaellt beim reinen Messlauf. webServer: perfOnly ? undefined : { command: 'npx serve -s ../app/build/web -l 3000 --no-clipboard', url: webUrl, reuseExistingServer: !process.env.CI, timeout: 30_000, }, });