# 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: