Cast: card/list views, sort & filter, online voice picker, "Hear a line" sample button, AI character notes, import auto-save. Platform: WCAG 2.1 AA accessibility pass; German UI translation + language picker; installable PWA with offline shell; GZip + content-visibility virtualization + lazy images + Rehearser PCM memory cap (mobile stability); Playwright suite (desktop + iPhone); opt-in minified bundle build. Fixes: screenplay parser false characters; Fish-Speech inline-tag tones; narrator/voice pickers list full library; clone GUI rework; fish.audio import dedup; voice-ID rename; bulk-delete modal. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
30 lines
952 B
JavaScript
30 lines
952 B
JavaScript
// @ts-check
|
|
const { defineConfig, devices } = require('@playwright/test');
|
|
|
|
// Point at a running instance. The app's docker container serves on :7890.
|
|
const BASE_URL = process.env.BASE_URL || 'http://localhost:7890';
|
|
|
|
module.exports = defineConfig({
|
|
testDir: './tests',
|
|
timeout: 60_000,
|
|
expect: { timeout: 10_000 },
|
|
// The app talks to a single uvicorn backend — running tests concurrently overwhelms
|
|
// it and makes navigation flaky, so keep it serial.
|
|
fullyParallel: false,
|
|
workers: 1,
|
|
retries: process.env.CI ? 1 : 0,
|
|
reporter: process.env.CI ? 'github' : 'list',
|
|
use: {
|
|
baseURL: BASE_URL,
|
|
navigationTimeout: 45_000,
|
|
actionTimeout: 15_000,
|
|
trace: 'on-first-retry',
|
|
screenshot: 'only-on-failure',
|
|
},
|
|
projects: [
|
|
{ name: 'desktop', use: { ...devices['Desktop Chrome'] } },
|
|
// iPhone profile — guards the mobile-stability work
|
|
{ name: 'iphone', use: { ...devices['iPhone 13'] } },
|
|
],
|
|
});
|