mitgliederverwaltung/docs/test-failures-analysis.md
Simon 8a1b14fc79
Some checks failed
continuous-integration/drone/push Build is failing
fix: fix tests and remove navbar remainings
2026-01-12 15:16:31 +01:00

6.5 KiB

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


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)


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

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

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

# 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

# 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

# In sidebar.ex Zeile 45-52, aria-controls hinzufügen:
<button
  type="button"
  id="sidebar-toggle"
  class="hidden lg:flex ml-auto btn btn-ghost btn-sm btn-square"
  aria-label={gettext("Toggle sidebar")}
  aria-controls="main-sidebar"
  aria-expanded="true"
  onclick="toggleSidebar()"
>

Option A: Test anpassen (Empfohlen)

  • Test ändern, um /membership_fee_settings statt /contribution_settings zu erwarten

Option B: Link hinzufügen

  • Einen neuen Link /contribution_settings hinzufügen (nicht empfohlen, da redundant)

Empfehlung: Option A - Test anpassen

# Zeile 519 ändern von:
"/contribution_settings",
# zu:
# Entfernen oder durch "/membership_fee_settings" ersetzen
# (da "/membership_fee_settings" bereits in Zeile 518 vorhanden ist)

Zusammenfassung der empfohlenen Änderungen

  1. show_test.exs: Custom Fields im Setup löschen
  2. sidebar_test.exs (T3.1): Settings-Link Assertion anpassen
  3. sidebar_test.exs (drawer overlay): CSS-Klasse-Suche mit Helper-Funktion
  4. sidebar_test.exs (T5.2): aria-controls Attribut zur Implementierung hinzufügen
  5. sidebar_test.exs (edge cases): Falschen Link aus erwarteter Liste entfernen

Priorisierung

  1. Hoch: Lösung 1 (show_test.exs) - Datenbank-Isolation ist wichtig
  2. Mittel: Lösung 4 (ARIA-Attribut) - Accessibility-Verbesserung
  3. Niedrig: Lösungen 2, 3, 5 - Einfache Test-Anpassungen