feat: způsob přihlášení a správa obchodů podle konfigurace serveru
CI / Generate TypeScript types (push) Successful in 12s
CI / Server unit tests (push) Successful in 26s
CI / Build server (push) Successful in 32s
CI / Build client (push) Successful in 41s
CI / Playwright E2E tests (push) Successful in 1m47s
CI / Build and push Docker image (push) Successful in 49s
CI / Notify (push) Successful in 2s
CI / Generate TypeScript types (push) Successful in 12s
CI / Server unit tests (push) Successful in 26s
CI / Build server (push) Successful in 32s
CI / Build client (push) Successful in 41s
CI / Playwright E2E tests (push) Successful in 1m47s
CI / Build and push Docker image (push) Successful in 49s
CI / Notify (push) Successful in 2s
This commit is contained in:
+15
-20
@@ -1,36 +1,31 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
|
||||
// Tento test záměrně NEPOUŽÍVÁ trusted-header – testuje reálný login formulář.
|
||||
// Tento soubor záměrně NEPOUŽÍVÁ výchozí trusted-header — testuje chování přihlašovací stránky.
|
||||
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ý.
|
||||
test('při přihlášení přes proxy se formulář nezobrazí — bez hlavičky hláška, opakování s hlavičkou přihlásí', async ({ page }) => {
|
||||
// Server běží s HTTP_REMOTE_USER_ENABLED=true (přihlašuje proxy), takže formulář se jménem
|
||||
// nemá smysl. Bez hlavičky remote-user se zobrazí hláška s tlačítkem „Zkusit znovu".
|
||||
let sendHeader = false;
|
||||
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 }
|
||||
headers: sendHeader
|
||||
? { ...route.request().headers(), 'remote-user': 'testuser' }
|
||||
: 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 });
|
||||
const retry = page.getByRole('button', { name: 'Zkusit znovu' });
|
||||
await expect(retry).toBeVisible({ timeout: 10_000 });
|
||||
await expect(page.getByText('Přihlášení probíhá přes firemní přihlášení (proxy)')).toBeVisible();
|
||||
await expect(page.locator('#login-input')).toHaveCount(0);
|
||||
|
||||
// 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 });
|
||||
// Proxy teď identitu pošle — opakování přihlásí
|
||||
sendHeader = true;
|
||||
await retry.click();
|
||||
await expect(retry).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'));
|
||||
|
||||
Reference in New Issue
Block a user