Dispatcharr-Pfad absichern statt nur von Hand prüfen #22

Closed
opened 2026-08-26 19:18:17 +02:00 by benjamin · 1 comment
Owner

Die Unit-Tests decken Parser, Filter und Regeln ab. Der ganze Backend-Pfad — Anmeldung, Senderabruf, Favoriten, Ausgabeprofile — hat null automatisierte Abdeckung.

Wie sich das gerächt hat

Beim ersten Lauf gegen die echte Instanz kamen sofort drei Sachen hoch, die 20 Demo-Sender nie gezeigt hätten (siehe de6d3a9):

  • Der Favoritenzähler stand auf 0, obwohl das Backend zwei kannte — die Ansicht war nicht reaktiv
  • Der Paarungs-Extraktor machte aus „VfB Stuttgart - Saison 25-26" eine Begegnung
  • Der Tagesplan zeigte dieselbe Sendung dreimal

Alle drei per Auge gefunden. Das heißt: da ist wahrscheinlich mehr.

Was gebaut wird

Mindestens das Kleine, gern das Große:

  • Klein: aufgeschriebener manueller Ablauf unter tests/, den man vor einem Release durchgeht — anmelden, Senderliste, Favorit setzen und wieder weg, Profil wechseln, abmelden
  • Groß: DispatcharrRepository gegen aufgezeichnete Antworten testen (echte JSON-Antworten als Fixtures, keine Live-Instanz im Test)

Der Smoke-Test hilft hier nicht: er deinstalliert die App und damit die Anmeldung.

Die Unit-Tests decken Parser, Filter und Regeln ab. Der ganze Backend-Pfad — Anmeldung, Senderabruf, Favoriten, Ausgabeprofile — hat null automatisierte Abdeckung. **Wie sich das gerächt hat** Beim ersten Lauf gegen die echte Instanz kamen sofort drei Sachen hoch, die 20 Demo-Sender nie gezeigt hätten (siehe `de6d3a9`): - Der Favoritenzähler stand auf 0, obwohl das Backend zwei kannte — die Ansicht war nicht reaktiv - Der Paarungs-Extraktor machte aus „VfB Stuttgart - Saison 25-26" eine Begegnung - Der Tagesplan zeigte dieselbe Sendung dreimal Alle drei per Auge gefunden. Das heißt: da ist wahrscheinlich mehr. **Was gebaut wird** Mindestens das Kleine, gern das Große: - **Klein:** aufgeschriebener manueller Ablauf unter `tests/`, den man vor einem Release durchgeht — anmelden, Senderliste, Favorit setzen und wieder weg, Profil wechseln, abmelden - **Groß:** `DispatcharrRepository` gegen aufgezeichnete Antworten testen (echte JSON-Antworten als Fixtures, keine Live-Instanz im Test) Der Smoke-Test hilft hier nicht: er deinstalliert die App und damit die Anmeldung.
benjamin added this to the 1.0 milestone 2026-08-26 19:18:17 +02:00
Author
Owner

Beides erledigt in d269618.

Groß: Das Parsen ist aus DispatcharrRepository heraus in DispatcharrJson gewandert und hat jetzt zwölf Tests — gebaut aus den Formen, die eure Instanz tatsächlich liefert:

  • Seitenweise Antworten (results + next) und blanke Arrays
  • Sender ohne uuid (der Proxy löst über uuid auf, Zahlen-IDs geben 404) und hidden_from_output
  • effective_name/effective_logo_id/effective_tvg_id mit Rückfall auf die einfachen Felder
  • Unbekannte Gruppen-ID → leere Gruppe statt Absturz
  • Favoriten ohne den Schlüssel channels (Nutzer, der nie etwas markiert hat)
  • Inaktive Ausgabeprofile werden nicht angeboten
  • EPG-Grid in allen drei Hüllen, die der Fork mal ausgeliefert hat (data, results, blankes Array), plus kaputte Zeiten und leere tvg_id

Androids Stub-org.json wirft in Unit-Tests bei jedem Aufruf, deshalb liegt die echte Implementierung jetzt im Test-Classpath (org.json:json:20240303).

Gesamtzahl Tests: 69, alle grün. Danach gegen die echte Instanz gegengeprüft: 505 Sender, 3 Favoriten, Vereinsmenü — unverändert.

Klein: tests/dispatcharr-checkliste.md — der Ablauf für alles, was kein Test erreicht: Anmeldung, Favoriten-Rundlauf, Vereinsmenüs, Profile, Abmelden.

Beides erledigt in `d269618`. **Groß:** Das Parsen ist aus `DispatcharrRepository` heraus in `DispatcharrJson` gewandert und hat jetzt zwölf Tests — gebaut aus den Formen, die eure Instanz tatsächlich liefert: - Seitenweise Antworten (`results` + `next`) und blanke Arrays - Sender ohne `uuid` (der Proxy löst über uuid auf, Zahlen-IDs geben 404) und `hidden_from_output` - `effective_name`/`effective_logo_id`/`effective_tvg_id` mit Rückfall auf die einfachen Felder - Unbekannte Gruppen-ID → leere Gruppe statt Absturz - Favoriten ohne den Schlüssel `channels` (Nutzer, der nie etwas markiert hat) - Inaktive Ausgabeprofile werden nicht angeboten - EPG-Grid in allen drei Hüllen, die der Fork mal ausgeliefert hat (`data`, `results`, blankes Array), plus kaputte Zeiten und leere `tvg_id` Androids Stub-`org.json` wirft in Unit-Tests bei jedem Aufruf, deshalb liegt die echte Implementierung jetzt im Test-Classpath (`org.json:json:20240303`). Gesamtzahl Tests: 69, alle grün. Danach gegen die echte Instanz gegengeprüft: 505 Sender, 3 Favoriten, Vereinsmenü — unverändert. **Klein:** `tests/dispatcharr-checkliste.md` — der Ablauf für alles, was kein Test erreicht: Anmeldung, Favoriten-Rundlauf, Vereinsmenüs, Profile, Abmelden.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: be-nj/castarr#22