diff --git a/docs/test-failures-analysis.md b/docs/test-failures-analysis.md new file mode 100644 index 0000000..d105b90 --- /dev/null +++ b/docs/test-failures-analysis.md @@ -0,0 +1,233 @@ +# Analyse der fehlschlagenden Tests + +## Übersicht + +**Gesamtanzahl fehlschlagender Tests:** 5 +- **show_test.exs:** 1 Fehler +- **sidebar_test.exs:** 4 Fehler + +--- + +## Kategorisierung + +### Kategorie 1: Test-Assertions passen nicht zur Implementierung (4 Tests) + +Diese Tests erwarten bestimmte Werte/Attribute, die in der aktuellen Implementierung anders sind oder fehlen. + +### Kategorie 2: Datenbank-Isolation Problem (1 Test) + +Ein Test schlägt fehl, weil die Datenbank nicht korrekt isoliert ist. + +--- + +## Detaillierte Analyse + +### 1. `show_test.exs` - Custom Fields Sichtbarkeit + +**Test:** `does not display Custom Fields section when no custom fields exist` (Zeile 112) + +**Problem:** +- Der Test erwartet, dass die "Custom Fields" Sektion NICHT angezeigt wird, wenn keine Custom Fields existieren +- Die Sektion wird aber angezeigt, weil in der Datenbank noch Custom Fields von anderen Tests vorhanden sind + +**Ursache:** +- Die LiveView lädt alle Custom Fields aus der Datenbank (Zeile 238-242 in `show.ex`) +- Die Test-Datenbank wird nicht zwischen Tests geleert +- Da `async: false` verwendet wird, sollten die Tests sequenziell laufen, aber Custom Fields bleiben in der Datenbank + +**Kategorie:** Datenbank-Isolation Problem + +--- + +### 2. `sidebar_test.exs` - Settings Link + +**Test:** `T3.1: renders flat menu items with icons and labels` (Zeile 174) + +**Problem:** +- Test erwartet `href="#"` für Settings +- Tatsächlicher Wert: `href="/settings"` + +**Ursache:** +- Die Implementierung verwendet einen echten Link `~p"/settings"` (Zeile 100 in `sidebar.ex`) +- Der Test erwartet einen Placeholder-Link `href="#"` + +**Kategorie:** Test-Assertion passt nicht zur Implementierung + +--- + +### 3. `sidebar_test.exs` - Drawer Overlay CSS-Klasse + +**Test:** `drawer overlay is present` (Zeile 747) + +**Problem:** +- Test sucht nach exakt `class="drawer-overlay"` +- Tatsächlicher Wert: `class="drawer-overlay lg:hidden focus:outline-none focus:ring-2 focus:ring-primary"` + +**Ursache:** +- Der Test verwendet eine exakte String-Suche (`~s(class="drawer-overlay")`) +- Die Implementierung hat mehrere CSS-Klassen + +**Kategorie:** Test-Assertion passt nicht zur Implementierung + +--- + +### 4. `sidebar_test.exs` - Toggle Button ARIA-Attribut + +**Test:** `T5.2: toggle button has correct ARIA attributes` (Zeile 324) + +**Problem:** +- Test erwartet `aria-controls="main-sidebar"` am Toggle-Button +- Das Attribut fehlt in der Implementierung (Zeile 45-65 in `sidebar.ex`) + +**Ursache:** +- Das `aria-controls` Attribut wurde nicht in der Implementierung hinzugefügt +- Der Test erwartet es für bessere Accessibility + +**Kategorie:** Test-Assertion passt nicht zur Implementierung (Accessibility-Feature fehlt) + +--- + +### 5. `sidebar_test.exs` - Contribution Settings Link + +**Test:** `sidebar structure is complete with all sections` (Zeile 501) + +**Problem:** +- Test erwartet Link `/contribution_settings` +- Tatsächlicher Link: `/membership_fee_settings` + +**Ursache:** +- Der Test hat eine veraltete/inkorrekte Erwartung +- Die Implementierung verwendet `/membership_fee_settings` (Zeile 96 in `sidebar.ex`) + +**Kategorie:** Test-Assertion passt nicht zur Implementierung (veralteter Test) + +--- + +## Lösungsvorschläge + +### Lösung 1: `show_test.exs` - Custom Fields Sichtbarkeit + +**Option A: Test-Datenbank bereinigen (Empfohlen)** +- Im `setup` Block alle Custom Fields löschen, bevor der Test läuft +- Oder: Explizit prüfen, dass keine Custom Fields existieren + +**Option B: Test anpassen** +- Den Test so anpassen, dass er explizit alle Custom Fields löscht +- Oder: Die LiveView-Logik ändern, um nur Custom Fields zu laden, die tatsächlich existieren + +**Empfehlung:** Option A - Im Test-Setup alle Custom Fields löschen + +```elixir +setup do + # Clean up any existing custom fields + Mv.Membership.CustomField + |> Ash.read!() + |> Enum.each(&Ash.destroy!/1) + + # Create test member + {:ok, member} = ... + %{member: member} +end +``` + +--- + +### Lösung 2: `sidebar_test.exs` - Settings Link + +**Option A: Test anpassen (Empfohlen)** +- Test ändern, um `href="/settings"` zu erwarten statt `href="#"` + +**Option B: Implementierung ändern** +- Settings-Link zu `href="#"` ändern (nicht empfohlen, da es ein echter Link sein sollte) + +**Empfehlung:** Option A - Test anpassen + +```elixir +# Zeile 190 ändern von: +assert html =~ ~s(href="#") +# zu: +assert html =~ ~s(href="/settings") +``` + +--- + +### Lösung 3: `sidebar_test.exs` - Drawer Overlay CSS-Klasse + +**Option A: Test anpassen (Empfohlen)** +- Test ändern, um nach der Klasse in der Klasse-Liste zu suchen (mit `has_class?` Helper) + +**Option B: Regex verwenden** +- Regex verwenden, um die Klasse zu finden + +**Empfehlung:** Option A - Test anpassen + +```elixir +# Zeile 752 ändern von: +assert html =~ ~s(class="drawer-overlay") +# zu: +assert has_class?(html, "drawer-overlay") +``` + +--- + +### Lösung 4: `sidebar_test.exs` - Toggle Button ARIA-Attribut + +**Option A: Implementierung anpassen (Empfohlen)** +- `aria-controls="main-sidebar"` zum Toggle-Button hinzufügen + +**Option B: Test anpassen** +- Test entfernen oder als optional markieren (nicht empfohlen für Accessibility) + +**Empfehlung:** Option A - Implementierung anpassen + +```elixir +# In sidebar.ex Zeile 45-52, aria-controls hinzufügen: +