47 lines
1.7 KiB
TypeScript
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$/);
|
|
});
|
|
});
|