fix(e2e): fix strict mode violation and conversations sort toggle
- Add exact: true to all language button selectors in lang.spec.ts to prevent Playwright from matching "Abmelden" (contains "de") alongside the DE language button - Fix goto in conversations applyFilters to use absolute path /conversations?... instead of relative ?... so URL updates correctly - Set locale: 'de-DE' in playwright.config.ts so Accept-Language header is consistent and locale detection defaults to German during tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3,35 +3,35 @@ import { test, expect } from '@playwright/test';
|
|||||||
test.describe('Language selector', () => {
|
test.describe('Language selector', () => {
|
||||||
test('shows DE, EN, ES buttons in the header', async ({ page }) => {
|
test('shows DE, EN, ES buttons in the header', async ({ page }) => {
|
||||||
await page.goto('/');
|
await page.goto('/');
|
||||||
await expect(page.getByRole('banner').getByRole('button', { name: 'DE' })).toBeVisible();
|
await expect(page.getByRole('banner').getByRole('button', { name: 'DE', exact: true })).toBeVisible();
|
||||||
await expect(page.getByRole('banner').getByRole('button', { name: 'EN' })).toBeVisible();
|
await expect(page.getByRole('banner').getByRole('button', { name: 'EN', exact: true })).toBeVisible();
|
||||||
await expect(page.getByRole('banner').getByRole('button', { name: 'ES' })).toBeVisible();
|
await expect(page.getByRole('banner').getByRole('button', { name: 'ES', exact: true })).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('switching to EN translates the navigation', async ({ page }) => {
|
test('switching to EN translates the navigation', async ({ page }) => {
|
||||||
await page.goto('/');
|
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: 'Documents' })).toBeVisible();
|
||||||
await expect(page.getByRole('navigation').getByRole('link', { name: 'Persons' })).toBeVisible();
|
await expect(page.getByRole('navigation').getByRole('link', { name: 'Persons' })).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('language choice persists after navigation', async ({ page }) => {
|
test('language choice persists after navigation', async ({ page }) => {
|
||||||
await page.goto('/');
|
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 page.goto('/persons');
|
||||||
await expect(page.getByRole('navigation').getByRole('link', { name: 'Documents' })).toBeVisible();
|
await expect(page.getByRole('navigation').getByRole('link', { name: 'Documents' })).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('switching back to DE restores German', async ({ page }) => {
|
test('switching back to DE restores German', async ({ page }) => {
|
||||||
await page.goto('/');
|
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.getByRole('banner').getByRole('button', { name: 'DE' }).click();
|
await page.getByRole('banner').getByRole('button', { name: 'DE', exact: true }).click();
|
||||||
await expect(page.getByRole('navigation').getByRole('link', { name: 'Dokumente' })).toBeVisible();
|
await expect(page.getByRole('navigation').getByRole('link', { name: 'Dokumente' })).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('active language button is visually highlighted', async ({ page }) => {
|
test('active language button is visually highlighted', async ({ page }) => {
|
||||||
await page.goto('/');
|
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/);
|
await expect(deBtn).toHaveClass(/font-bold/);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ export default defineConfig({
|
|||||||
|
|
||||||
use: {
|
use: {
|
||||||
baseURL: process.env.E2E_BASE_URL ?? 'http://localhost:3000',
|
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
|
screenshot: 'on', // always capture screenshots
|
||||||
video: 'retain-on-failure',
|
video: 'retain-on-failure',
|
||||||
trace: 'retain-on-failure'
|
trace: 'retain-on-failure'
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
if (fromDate) params.set('from', fromDate);
|
if (fromDate) params.set('from', fromDate);
|
||||||
if (toDate) params.set('to', toDate);
|
if (toDate) params.set('to', toDate);
|
||||||
params.set('dir', sortDir);
|
params.set('dir', sortDir);
|
||||||
goto(`?${params.toString()}`, { keepFocus: true });
|
goto(`/conversations?${params.toString()}`, { keepFocus: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleSort() {
|
function toggleSort() {
|
||||||
|
|||||||
Reference in New Issue
Block a user