Files
familysync/apps/pwa/playwright.config.ts
T
Lucas Berger d3bc69657b feat(14-01): add desktop Playwright project (Desktop Chrome, 1280x720, no hasTouch)
- Appended 'desktop' project entry after 'pixel' in playwright.config.ts projects array
- Uses devices['Desktop Chrome'] with serviceWorkers: 'block' (D-02/Pitfall 15)
- No baseURL override — inherited from top-level use block (D-08)
- Updated file header jsdoc: three-profile matrix, added --project=desktop example
2026-06-12 08:19:04 -04:00

75 lines
2.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Playwright configuration — Phase 7 Mobile Test Harness + Phase 14 Desktop
*
* Three-profile device matrix: iPhone 14/WebKit + Pixel 7/Chromium + Desktop Chrome
* Auth: DEV_AUTH_BYPASS=true on the API (never storageState — D-01/Pitfall 14)
* SW: serviceWorkers: 'block' on all profiles (D-02/Pitfall 15)
* baseURL: env-driven PLAYWRIGHT_BASE_URL (D-08/Rule 8)
* webServer: manages Vite only — API+MariaDB+Redis stay compose-managed (D-10)
*
* Run:
* pnpm --filter @familysync/pwa test:e2e
* pnpm --filter @familysync/pwa exec playwright test --project=pixel
* pnpm --filter @familysync/pwa exec playwright test --project=desktop
*/
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
testDir: './e2e',
testMatch: '**/*.spec.ts',
fullyParallel: true,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined,
reporter: process.env.CI ? 'github' : 'list',
// Plan 02 creates this file — forward-declared, resolves at runtime
globalSetup: './e2e/global-setup.ts',
use: {
// env-driven per D-08/Rule 8 — never a hardcoded host
baseURL: process.env.PLAYWRIGHT_BASE_URL ?? 'http://localhost:5173',
trace: 'on-first-retry',
video: 'on-first-retry',
screenshot: 'only-on-failure',
},
projects: [
{
// iPhone 14: 390×844 viewport, WebKit engine, Mobile Safari UA, hasTouch: true
// Device descriptor confirmed: playwright deviceDescriptorsSource.json
name: 'iphone',
use: {
...devices['iPhone 14'],
// serviceWorkers: 'block' prevents the injectManifest sw.js (Workbox) from
// intercepting requests — satisfies D-02 / Pitfall 15
serviceWorkers: 'block',
},
},
{
// Pixel 7: 412×915 viewport, Chromium engine, Chrome Android UA, hasTouch: true
name: 'pixel',
use: {
...devices['Pixel 7'],
serviceWorkers: 'block',
},
},
{
// Desktop Chrome: 1280×720 viewport, Chromium engine, no hasTouch (D-06)
name: 'desktop',
use: {
...devices['Desktop Chrome'],
serviceWorkers: 'block',
},
},
],
// D-10: manage Vite only; API+MariaDB+Redis are compose-managed
// reuseExistingServer: reuse operator's pnpm dev locally; start fresh in CI
webServer: {
command: 'pnpm --filter @familysync/pwa dev',
url: process.env.PLAYWRIGHT_BASE_URL ?? 'http://localhost:5173',
reuseExistingServer: !process.env.CI,
timeout: 120_000,
},
});