Files
AfiS-Aktensystem/web/playwright.config.ts
T
HarlekinandClaude Opus 5 579244ded1 Callback-URL aus APP_URL ableiten
Auth.js baut die redirect_uri nicht aus dem Host-Header, sondern aus AUTH_URL.
Ohne die Variable bleibt sie fest auf http://localhost:3000 — hinter dem
Cloudflare Tunnel wäre die Anmeldung damit kaputt gewesen, und zwar mit einer
Fehlermeldung von Discord, die nicht auf die Ursache zeigt. APP_URL ist ohnehin
die kanonische öffentliche Adresse und wird jetzt durchgereicht.

Nachweis mit dem gebauten Standalone-Server: mit gesetztem APP_URL kommt
https://afis.example.de/api/auth/callback/discord heraus, ohne fällt sie auf
localhost zurück. Ein E2E-Test hält Scope identify, state, PKCE mit S256 und
den Pfad der Callback-URL fest.

Nebenbefund, eigenständig behoben: loadEnvFromRepoRoot hat gesetzte
Umgebungsvariablen mit den Werten der Entwicklungs-.env überschrieben.
process.loadEnvFile tut das von sich aus. Eine .env ist ein Rückfall für die
lokale Entwicklung, kein Vorrang vor dem, was der Aufrufer ausdrücklich
mitgibt — sonst überschreibt sie etwa die APP_URL eines Testlaufs und die
Fehlersuche führt weit weg von der Ursache.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 19:37:09 +02:00

36 lines
1.2 KiB
TypeScript

import { defineConfig, devices } from '@playwright/test'
const PORT = Number(process.env.E2E_PORT ?? 3100)
const baseURL = process.env.E2E_BASE_URL ?? `http://127.0.0.1:${PORT}`
export default defineConfig({
testDir: './e2e',
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 1 : 0,
reporter: process.env.CI ? [['github'], ['html', { open: 'never' }]] : 'list',
use: {
baseURL,
locale: 'de-DE',
timezoneId: 'Europe/Berlin',
trace: 'on-first-retry',
},
projects: [
{ name: 'chromium', use: { ...devices['Desktop Chrome'] } },
{ name: 'mobil', use: { ...devices['Pixel 7'] } },
],
webServer: process.env.E2E_BASE_URL
? undefined
: {
// Derselbe Standalone-Server, den auch das Container-Image startet.
command: `pnpm build && node .next/standalone/web/server.js`,
url: `${baseURL}/api/health`,
reuseExistingServer: !process.env.CI,
timeout: 180_000,
// APP_URL muss der Testserver kennen: Auth.js baut daraus die
// redirect_uri, und die wird geprüft. Ohne sie fiele sie auf den
// Request-Origin zurück und die Zusicherung wäre wertlos.
env: { PORT: String(PORT), HOSTNAME: '127.0.0.1', APP_URL: baseURL },
},
})