Shuffle/e2e/tests/web/krit05-sitzung.spec.ts
cschlaefke d390b60bd6 test(auth): add web E2E tests for KTO-01 criteria 1-10 against the Flutter web build
Refs #38

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-03 10:42:28 +01:00

47 lines
1.7 KiB
TypeScript

import { expect, test } from '@playwright/test';
import { GoTrueClient, randomEmail, randomPassword } from '../../support/gotrue';
import { enableSemantics, expectSignedIn, expectSignedInViaLoginRedirect, login, readAuthStorage } from '../../support/web';
const gotrue = new GoTrueClient();
test.describe('KTO-01 Kriterium 5 (web): Sitzung bleibt bestehen', () => {
test('KTO-01 Kriterium 5: Login, Reload und neuer Browser-Kontext mit gleichem Storage bleiben angemeldet', async ({
page,
browser,
}) => {
const email = randomEmail();
const password = randomPassword();
await gotrue.createConfirmedUser(email, password);
await login(page, email, password);
await expectSignedIn(page);
const stored = await readAuthStorage(page);
expect(Object.keys(stored).length, 'Sitzung liegt im localStorage').toBeGreaterThan(0);
// Reload: weiterhin angemeldet (/login leitet auf die Startseite).
await page.reload();
await expectSignedInViaLoginRedirect(page);
// Neuer Browser-Kontext mit gleichem Storage (z. B. Browser neu gestartet).
const state = await page.context().storageState();
const restored = await browser.newContext({
storageState: state,
locale: 'en-US',
serviceWorkers: 'block',
baseURL: 'http://localhost:3000',
});
try {
const other = await restored.newPage();
await other.goto('/login');
await enableSemantics(other);
await expect(other).toHaveURL(/\/$/);
} finally {
await restored.close();
}
});
test('KTO-01 Kriterium 5: ohne Sitzung bleibt /login erreichbar (Gegenprobe)', async ({ page }) => {
await page.goto('/login');
await expect(page).toHaveURL(/\/login$/);
});
});