// @ts-check // Einmalig per Login-Formular anmelden und den Session-Zustand (Cookies) als // storageState speichern — alle Tests starten damit eingeloggt. // // Steuerkram sperrt einen Account nach mehreren Fehlversuchen (Login-Throttle, // siehe tests/53_LoginThrottleTest.php). Ein falsches Passwort hier würde den // Testnutzer also sperren – deshalb bricht das Setup mit einer klaren Meldung ab, // statt es erneut zu versuchen. const { chromium } = require('@playwright/test') const { BASE_URL, E2E_USER, E2E_PASSWORD } = require('./helpers/env') module.exports = async () => { const browser = await chromium.launch() const page = await browser.newPage({ baseURL: BASE_URL }) await page.goto('/login') // Ist noch kein Benutzer angelegt, zeigt Steuerkram die Ersteinrichtung. // Dann liefe der Login ins Leere – lieber sofort verständlich abbrechen. if (await page.locator('#password2').count() > 0) { await browser.close() throw new Error( `Die Instanz unter ${BASE_URL} ist im Ersteinrichtungs-Modus (kein Benutzer vorhanden). ` + 'Bitte zuerst einen Benutzer anlegen, dann scripts/e2e-user.php ausführen.' ) } await page.fill('#username', E2E_USER) await page.fill('#password', E2E_PASSWORD) await page.click('form[action="/login"] button[type="submit"]') // Erfolgreicher Login = Redirect weg von /login (Dashboard). try { await page.waitForURL(url => !url.pathname.startsWith('/login'), { timeout: 15000 }) } catch { const fehler = await page.locator('.flash-error').first().textContent().catch(() => null) await browser.close() throw new Error( `Login als "${E2E_USER}" auf ${BASE_URL} fehlgeschlagen` + (fehler ? `: ${fehler.trim()}` : '.') + '\nTestnutzer anlegen: docker compose exec web php scripts/e2e-user.php' + '\n(Abweichende Zugangsdaten via E2E_USER / E2E_PASSWORD.)' ) } await page.context().storageState({ path: '.auth/user.json' }) await browser.close() }