233 lines
6.5 KiB
Markdown
233 lines
6.5 KiB
Markdown
# 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:
|
|
<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()"
|
|
>
|
|
```
|
|
|
|
---
|
|
|
|
### Lösung 5: `sidebar_test.exs` - Contribution Settings Link
|
|
|
|
**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
|
|
|
|
```elixir
|
|
# 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
|
|
|