import { test, expect } from '@playwright/test'; // Tento test záměrně NEPOUŽÍVÁ trusted-header – testuje reálný login formulář. test.use({ extraHTTPHeaders: {} }); test('uživatel se přihlásí formulářem a uvidí obsah aplikace', async ({ page }) => { // Server běží s HTTP_REMOTE_USER_ENABLED=true, takže POST /api/login vždy vyžaduje // hlavičku remote-user. Zachytíme požadavky z formuláře (mají tělo s polem login) // a přidáme hlavičku; požadavek auto-loginu (bez těla) projde bez hlavičky a selže, // čímž formulář zůstane viditelný. await page.route('**/api/login', async (route) => { const body = route.request().postData(); let login: string | undefined; try { login = body ? JSON.parse(body)?.login : undefined; } catch {} await route.continue({ headers: login ? { ...route.request().headers(), 'remote-user': login } : route.request().headers(), }); }); await page.goto('/'); // Formulář musí být viditelný – auto-login selhal (nepřišla hlavička) const loginInput = page.locator('#login-input'); await expect(loginInput).toBeVisible({ timeout: 10_000 }); // Vyplnění loginu a odeslání Enterem await loginInput.fill('testuser'); await loginInput.press('Enter'); // Po přihlášení musí zmizet login formulář await expect(loginInput).not.toBeVisible({ timeout: 10_000 }); // JWT musí být uloženo v localStorage jako 3-dílný token const token = await page.evaluate(() => localStorage.getItem('token')); expect(token).toBeTruthy(); expect((token as string).split('.')).toHaveLength(3); }); test('trusted-header přihlášení proběhne automaticky bez formuláře', async ({ page, context }) => { // Obnoví trusted header (přepíše prázdný extraHTTPHeaders z test.use výše) await context.setExtraHTTPHeaders({ 'remote-user': 'e2e-auto-user' }); await page.goto('/'); // Login formulář by se neměl nikdy zobrazit, nebo se ihned schová await page.waitForLoadState('networkidle'); const loginInput = page.locator('#login-input'); await expect(loginInput).not.toBeVisible({ timeout: 5_000 }); });