import { defineConfig, devices } from '@playwright/test'; /** * Parcours e2e (R0.12) — démarre l'API construite (dist) et Vite, puis joue * le parcours démo. Localement : PW_CHANNEL=chrome évite le téléchargement * de Chromium (utilise le Chrome installé) ; en CI, Chromium Playwright. * Prérequis : PostgreSQL/Redis joignables, `pnpm --filter @siop/api build`. */ const API_ENV = { NODE_ENV: 'test', PORT: '3000', DEMO_MODE: 'true', JWT_SECRET: process.env.JWT_SECRET ?? 'e2e-secret-0123456789abcdef', DATABASE_URL: process.env.DATABASE_URL ?? 'postgresql://siop:siop@localhost:5432/siop', REDIS_URL: process.env.REDIS_URL ?? 'redis://localhost:6379', // R5 : le service IA écoute sur 8000 (CI : embeddeur déterministe, // seuils abaissés — voir ci.yml ; localement : lancez apps/ai avant). AI_SERVICE_URL: process.env.AI_SERVICE_URL ?? 'http://localhost:8000', AI_SERVICE_TOKEN: process.env.AI_SERVICE_TOKEN ?? 'dev-only-ai-token', }; export default defineConfig({ testDir: './e2e', globalSetup: './e2e/global-setup.ts', timeout: 30_000, forbidOnly: !!process.env.CI, retries: process.env.CI ? 1 : 0, use: { baseURL: 'http://localhost:5173', trace: 'retain-on-failure', ...(process.env.PW_CHANNEL ? { channel: process.env.PW_CHANNEL } : {}), }, projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }], webServer: [ { command: 'node ../api/dist/main.js', url: 'http://localhost:3000/health', env: API_ENV, reuseExistingServer: !process.env.CI, timeout: 30_000, }, { command: 'pnpm dev', url: 'http://localhost:5173', reuseExistingServer: !process.env.CI, timeout: 60_000, }, ], });