diff --git a/frontend/e2e/lang.spec.ts b/frontend/e2e/lang.spec.ts index 0e3edf9f..04294a98 100644 --- a/frontend/e2e/lang.spec.ts +++ b/frontend/e2e/lang.spec.ts @@ -3,35 +3,35 @@ import { test, expect } from '@playwright/test'; test.describe('Language selector', () => { test('shows DE, EN, ES buttons in the header', async ({ page }) => { await page.goto('/'); - await expect(page.getByRole('banner').getByRole('button', { name: 'DE' })).toBeVisible(); - await expect(page.getByRole('banner').getByRole('button', { name: 'EN' })).toBeVisible(); - await expect(page.getByRole('banner').getByRole('button', { name: 'ES' })).toBeVisible(); + await expect(page.getByRole('banner').getByRole('button', { name: 'DE', exact: true })).toBeVisible(); + await expect(page.getByRole('banner').getByRole('button', { name: 'EN', exact: true })).toBeVisible(); + await expect(page.getByRole('banner').getByRole('button', { name: 'ES', exact: true })).toBeVisible(); }); test('switching to EN translates the navigation', async ({ page }) => { await page.goto('/'); - await page.getByRole('banner').getByRole('button', { name: 'EN' }).click(); + await page.getByRole('banner').getByRole('button', { name: 'EN', exact: true }).click(); await expect(page.getByRole('navigation').getByRole('link', { name: 'Documents' })).toBeVisible(); await expect(page.getByRole('navigation').getByRole('link', { name: 'Persons' })).toBeVisible(); }); test('language choice persists after navigation', async ({ page }) => { await page.goto('/'); - await page.getByRole('banner').getByRole('button', { name: 'EN' }).click(); + await page.getByRole('banner').getByRole('button', { name: 'EN', exact: true }).click(); await page.goto('/persons'); await expect(page.getByRole('navigation').getByRole('link', { name: 'Documents' })).toBeVisible(); }); test('switching back to DE restores German', async ({ page }) => { await page.goto('/'); - await page.getByRole('banner').getByRole('button', { name: 'EN' }).click(); - await page.getByRole('banner').getByRole('button', { name: 'DE' }).click(); + await page.getByRole('banner').getByRole('button', { name: 'EN', exact: true }).click(); + await page.getByRole('banner').getByRole('button', { name: 'DE', exact: true }).click(); await expect(page.getByRole('navigation').getByRole('link', { name: 'Dokumente' })).toBeVisible(); }); test('active language button is visually highlighted', async ({ page }) => { await page.goto('/'); - const deBtn = page.getByRole('banner').getByRole('button', { name: 'DE' }); + const deBtn = page.getByRole('banner').getByRole('button', { name: 'DE', exact: true }); await expect(deBtn).toHaveClass(/font-bold/); }); }); diff --git a/frontend/playwright.config.ts b/frontend/playwright.config.ts index c065bb3a..20bd2fcb 100644 --- a/frontend/playwright.config.ts +++ b/frontend/playwright.config.ts @@ -22,6 +22,7 @@ export default defineConfig({ use: { baseURL: process.env.E2E_BASE_URL ?? 'http://localhost:3000', + locale: 'de-DE', // ensures Accept-Language: de is sent so locale detection defaults to German screenshot: 'on', // always capture screenshots video: 'retain-on-failure', trace: 'retain-on-failure' diff --git a/frontend/src/routes/conversations/+page.svelte b/frontend/src/routes/conversations/+page.svelte index 3b8d234b..a22c2881 100644 --- a/frontend/src/routes/conversations/+page.svelte +++ b/frontend/src/routes/conversations/+page.svelte @@ -28,7 +28,7 @@ if (fromDate) params.set('from', fromDate); if (toDate) params.set('to', toDate); params.set('dir', sortDir); - goto(`?${params.toString()}`, { keepFocus: true }); + goto(`/conversations?${params.toString()}`, { keepFocus: true }); } function toggleSort() {