Shuffle/e2e
cschlaefke 245c059458
All checks were successful
CI / flutter (pull_request) Successful in 1m16s
CI / web-build (pull_request) Successful in 59s
CI / supabase (pull_request) Successful in 10s
CI / supabase-tests (pull_request) Successful in 36s
CI / e2e (pull_request) Successful in 2m54s
fix(e2e): zweite-IP-Drosselungstest toleriert Nachfuellrate des Limiters
Laufzeit der 30 Versuche messen und bis zu refillTolerance(elapsed) weitere
Versuche zulassen, bis 429 kommt (wie im ersten Test der Datei).

Refs #65

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 11:07:02 +01:00
..
support test(e2e): click buttons via getByRole instead of keyboard helper 2026-11-03 13:07:01 +01:00
tests fix(e2e): zweite-IP-Drosselungstest toleriert Nachfuellrate des Limiters 2026-11-04 11:07:02 +01:00
package-lock.json test(auth): address review findings for e2e 2026-11-03 10:55:27 +01:00
package.json test(auth): address review findings for e2e 2026-11-03 10:55:27 +01:00
playwright.config.ts test(auth): address review findings for e2e 2026-11-03 10:55:27 +01:00
README.md feat(auth): sign-in prompt card on the home screen for signed-out users 2026-11-04 01:03:16 +01:00
tsconfig.json test(auth): add Playwright project with api tests for KTO-01 (GoTrue, Mailpit, db helper) 2026-11-03 10:29:18 +01:00

E2E-Tests (Playwright)

Auth-Tests für KTO-01 (Spec docs/specs/1-auth-registrierung-anmeldung.md § 7, Issue #38). Jeder Test nutzt zufällige E-Mail-Adressen und filtert Mails je Adresse (Mailpit wird nie global geleert), die Tests laufen deshalb parallel.

Projekte

Projekt Ziel Voraussetzung Tests
api GoTrue über Kong (:54321) + Mailpit (:54324) + Postgres (:54322) supabase start 52
web gebaute Flutter-Web-App auf http://localhost:3000 zusätzlich flutter build web 27
throttle Extra-GoTrue-Container mit GOTRUE_RATE_LIMIT_HEADER (AUTH-CFG-13) THROTTLE_GOTRUE_URL 4
spike GoTrue mit unerreichbarem SMTP (Issue #37), nicht blockierend SPIKE_GOTRUE_URL 3

throttle und spike werden nur registriert, wenn die jeweilige Variable gesetzt ist.

Lokal ausführen

supabase start -x studio,imgproxy,vector,logflare,edge-runtime,postgres-meta,realtime,storage-api
supabase db reset

# Web-Build gegen die lokale CLI (echten Anon-Key aus `supabase status -o env` eintragen)
cd app && flutter build web --dart-define-from-file=env/ci.example.json   # SUPABASE_URL/ANON_KEY anpassen

cd ../e2e && npm ci && npx playwright install chromium
npx playwright test --project=api
npx playwright test --project=web          # startet `serve -s ../app/build/web -l 3000` selbst

# Drosselung (Krit. 7) und SMTP-Spike
./support/start-throttle-gotrue.sh start throttle     # :9998
./support/start-throttle-gotrue.sh start smtp-down    # :9997
THROTTLE_GOTRUE_URL=http://127.0.0.1:9998 SPIKE_GOTRUE_URL=http://127.0.0.1:9997 npx playwright test
./support/start-throttle-gotrue.sh stop throttle; ./support/start-throttle-gotrue.sh stop smtp-down

Umgebungsvariablen (Standard = lokale CLI-Demo-Werte, keine Secrets): SUPABASE_URL, SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY, MAILPIT_URL, E2E_DB_URL, WEB_URL, TERMS_VERSION, E2E_ALLOWED_HOSTS (zusätzlich erlaubte Hosts für SUPABASE_URL/MAILPIT_URL/E2E_DB_URL, kommagetrennt; Standard nur 127.0.0.1, localhost, [::1]).

Aufbau

  • support/auth-config.ts – Konstanten mit AUTH-CFG-nn-Bezug; tests/api/config.spec.ts prüft sie gegen supabase/config.toml und docs/auth-konfiguration.md.
  • support/gotrue.ts, support/mailpit.ts – REST-Client und Mailfänger-Helfer.
  • support/db.ts – direkter Postgres-Zugriff, nur lokal/CI (bricht bei anderem Host ab); setzt recovery_sent_at/confirmation_sent_at für Ablauftests.
  • support/web.ts – Flutter-Web-Helfer (Semantics einschalten, Felder füllen, Uhr verschieben).
  • support/start-throttle-gotrue.sh – zweiter GoTrue-Container (Profile throttle, smtp-down).

Hinweise zum Web-Projekt

  • Flutter zeichnet auf Canvas. Der Semantics-Baum wird über flt-semantics-placeholder eingeschaltet (enableSemantics).
  • Eingabefelder werden mit click + pressSequentially gefüllt; fill allein geht gelegentlich verloren.
  • Immer localhost (nicht 127.0.0.1): Die Mail-Links nutzen die Site-URL (AUTH-CFG-01), sonst liegt die Sitzung in einem anderen localStorage.
  • Gegen die gemeinsame CLI-Instanz werden nie X-Forwarded-For-Header gesendet (R13).