diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 000000000..b538c4d7c --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,44 @@ +import { defineConfig, devices } from "@playwright/test"; + +const port = Number.parseInt(process.env.PORT ?? "3000", 10); +const baseURL = process.env.APP_URL ?? `http://localhost:${port}`; +const isCI = Boolean(process.env.CI); + +export default defineConfig({ + testDir: "./tests/e2e/specs", + fullyParallel: true, + forbidOnly: isCI, + retries: isCI ? 2 : 0, + workers: isCI ? 2 : undefined, + timeout: 60_000, + expect: { + timeout: 10_000, + }, + reporter: isCI + ? [["list"], ["github"], ["junit", { outputFile: "test-results/e2e-junit.xml" }]] + : [["list"], ["html", { open: "never" }]], + use: { + baseURL, + trace: "retain-on-failure", + screenshot: "only-on-failure", + video: "retain-on-failure", + }, + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + ], + webServer: { + command: "pnpm start", + url: `${baseURL}/api/health`, + reuseExistingServer: !isCI, + timeout: 120_000, + env: { + ...process.env, + APP_URL: baseURL, + NODE_ENV: "production", + PORT: String(port), + }, + }, +});