Steuerkram an den e2e-runner angebunden (tests/e2e/, 44 Playwright-Tests). Der erste Smoke-Lauf fand zwei Seiten mit HTTP 500: AccountController::create las $_GET['from'] ungeprüft, assets/form.php nutzte $testMode und $defaultKontoId außerhalb des Bearbeiten-Zweigs. Beides war bis zur Fehler-Härtung (#142) nur eine stille Warning. Test 67 räumt sein Belegverzeichnis jetzt mit ab - es blieb als root-eigenes Verzeichnis liegen und blockierte spätere echte Uploads mit HTTP 500. Test 77 (neu) sichert die Löschsperre von Beleg::delete() ab.
48 lines
1.9 KiB
JavaScript
48 lines
1.9 KiB
JavaScript
// @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()
|
||
}
|