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>
22 lines
1.2 KiB
JavaScript
22 lines
1.2 KiB
JavaScript
// @ts-check
|
|
// Verifies the language picker + German translation of the UI chrome.
|
|
const { test, expect } = require('@playwright/test');
|
|
|
|
test('defaults to English and shows the language picker', async ({ page }) => {
|
|
await page.goto('/', { waitUntil: 'domcontentloaded' });
|
|
await expect(page.locator('#app-lang-picker')).toBeVisible();
|
|
await expect(page.locator('.nav-item', { hasText: 'Clone a Voice' }).first()).toBeVisible();
|
|
});
|
|
|
|
test('German translates the navigation and section titles', async ({ page }) => {
|
|
await page.addInitScript(() => { try { localStorage.setItem('app-lang', 'de'); } catch (e) {} });
|
|
await page.goto('/', { waitUntil: 'domcontentloaded' });
|
|
await page.waitForFunction(() => typeof window.applyI18n === 'function', null, { timeout: 15_000 });
|
|
await page.waitForTimeout(1500);
|
|
await expect(page.locator('#app-lang-picker')).toHaveValue('de');
|
|
await expect(page.locator('.nav-item', { hasText: 'Stimme klonen' }).first()).toBeVisible();
|
|
await expect(page.getByText('Meine Stimmen').first()).toBeVisible();
|
|
// English source text should no longer be present in the nav
|
|
await expect(page.locator('.nav-item', { hasText: 'Get Voices Online' })).toHaveCount(0);
|
|
});
|