---
name: fix-e2e
description: Iterativ alle E2E-Tests grün bekommen — mvn fail-fast, scheiternden Test flicken, neu starten
disable-model-invocation: true
---

Ziel: `mvn clean install` komplett grün bekommen, inklusive Java-Playwright-Tests (`*E2EIT`) **und** `CucumberE2EIT` (cucumber-js + Playwright).

## Ablauf

Wiederhole diese Schleife, bis der komplette Build grün durchläuft:

1. **Starten**: `mvn clean install -Dsurefire.skipAfterFailureCount=1 -Dfailsafe.skipAfterFailureCount=1` im Hintergrund (background command). Der Fail-Fast-Mechanismus sorgt dafür, dass Maven beim ersten gescheiterten IT abbricht.

2. **Fail-Fast für Cucumber sicherstellen**: `src/main/webapp/e2e/cucumber/cucumber.mjs` muss `failFast: true` gesetzt haben, damit cucumber-js ebenfalls beim ersten gescheiterten Szenario stoppt — sonst läuft die CucumberE2EIT-Klasse alle 23 Szenarien durch bevor sie failed.

3. **Beobachten**: Während der Build läuft, ist die Ausgabe wegen `tail` gepuffert. Warte auf die task-notification oder prüfe Zwischenstand via `target/failsafe-reports/` und `target/quarkus.log` (relativ zum Projekt-Root).

4. **Report**: Sobald der Build abbricht (oder fertig ist), gib dem User:
   - **Welche Tests sind durchgelaufen?** (aus den `[INFO] Tests run: N, Failures: 0, Errors: 0` Zeilen)
   - **Welcher Test ist gescheitert?** (Klassenname + Testmethode oder Cucumber-Szenarioname)
   - **Art des Fehlers**: Timeout, Assertion-Failure, Selector-Violation, etc.
   - **Fehlermeldung**: Die relevanten Zeilen aus dem Stacktrace

5. **Flicken**: Analysiere den Fehler und flicke **ausschliesslich** den gescheiterten Test (bzw. die Step-Definition / den zugehörigen Production-Code).
   - Bei Playwright-Timeout: Locator prüfen (exact-match, role-based, stable selectors), auf Race-Conditions mit Angular-Bootstrap achten (LayoutComponent lazy-loaded, `sync.initialDataReady` hat Safety-Net-Fallback).
   - Bei Assertion-Failure: Erwartungswert prüfen, ggf. auf die tatsächliche UI-Struktur anpassen (z.B. Snackbar vs. Listen-Element).
   - Bei Strict-Mode Violations: Locator engeren Scope geben, `{ exact: true }` nutzen, oder `.first()` / `.nth(n)`.
   - **Nicht** andere (grüne) Tests mitändern — nur den einen, der gerade failed.

6. **Neu starten**: Zurück zu Schritt 1. Wenn derselbe Test wieder failed mit demselben Fehler → tiefer analysieren (Seite per `browser_navigate` MCP anschauen, IDB-State dumpen, HTTP-Log prüfen). Wenn ein neuer Test failed → normaler nächster Iterationsschritt.

## Nützliche Debug-Shortcuts

- **Cucumber einzeln gegen laufenden Quarkus**: Starte Quarkus standalone (`java -jar target/quarkus-app/quarkus-run.jar -Dquarkus.profile=e2e -Dquarkus.oidc.enabled=false -Dlismi.e2e.auto-auth.enabled=true -Dquarkus.datasource.jdbc.url=jdbc:postgresql://localhost:<podman-pg-port>/quarkus -Dquarkus.datasource.username=quarkus -Dquarkus.datasource.password=quarkus`) und lasse dann `PLAYWRIGHT_BASE_URL=http://localhost:8080 TS_NODE_PROJECT=e2e/cucumber/tsconfig.json npx cucumber-js --config e2e/cucumber/cucumber.mjs ../../../src/test/resources/features/<feature>.feature` direkt — viel schneller als `mvn verify`.
- **Live-Inspection via Playwright MCP**: `mcp__plugin_playwright_playwright__browser_navigate` + `browser_evaluate` gegen den laufenden Quarkus zeigt den tatsächlichen DOM-Zustand.
- **Screenshots aus Cucumber-Report extrahieren**: Die PNG-Attachments (base64 beginnend mit `iVBOR`) in `src/main/webapp/e2e-reports/cucumber-report.html` per Python dekodieren und als Bild ansehen.

## Commit & Abschluss

Nur dann einen Commit erstellen, wenn der komplette `mvn clean install` ohne `-Dfailsafe.skipAfterFailureCount` grün durchläuft. Commit-Message: `fix(e2e): <kurze Beschreibung> (#<issue>)`. Nicht pushen ohne explizite User-Freigabe.
