import { defineConfig, devices } from "@playwright/test"; import { resolve, dirname } from "node:path"; import { fileURLToPath } from "node:url"; const __dirname = dirname(fileURLToPath(import.meta.url)); const webRoot = resolve(__dirname, ".."); const DESKTOP_UA = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"; const MOBILE_UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1"; export default defineConfig({ testDir: "./specs", fullyParallel: true, forbidOnly: !!process.env.CI, retries: process.env.CI ? 1 : 0, workers: process.env.CI ? 4 : undefined, reporter: process.env.CI ? [["json"], ["html"]] : [["html"]], timeout: 30_000, expect: { timeout: 5_000 }, use: { baseURL: "http://localhost:4173", trace: "on-first-retry", screenshot: "only-on-failure", }, webServer: { command: "npx vite preview --port 4173", port: 4173, cwd: webRoot, reuseExistingServer: !process.env.CI, }, projects: [ { name: "desktop", use: { ...devices["Desktop Chrome"], viewport: { width: 1920, height: 1080 }, userAgent: DESKTOP_UA, }, }, { name: "mobile", use: { ...devices["Desktop Chrome"], viewport: { width: 390, height: 844 }, userAgent: MOBILE_UA, isMobile: true, hasTouch: true, }, }, ], });