E2E Sub-A: Live Adapter Tests (Reachability + Type-Filter) #51

Closed
opened 2026-04-09 09:02:10 +02:00 by tobias · 1 comment
Owner

Sub-Issue von #50.

Zweck

Sub-Issue A des E2E-Test-Umbrellas. Live-Tests pro aktivem Bundesland-Adapter, gegen die echten Landtag-Backends. Marker @pytest.mark.integration.

Datei

webapp/tests/integration/test_adapters_live.py

Was getestet wird

Pro Adapter aus aktive_bundeslaender(), parametrisiert via pytest.mark.parametrize("code", [...], ids=lambda c: c):

  1. Reachabilityawait adapter.search("", limit=5) läuft erfolgreich durch (kein HTTP-500, kein Timeout, kein Login-Wall)
  2. Result-Anzahllen(results) > 0 (0 Treffer ist Indikator für Schema-Drift, siehe HE)
  3. Drucksache-ID-Format — alle Drucksache.drucksache matchen ^\d+/\d+(\(neu\))?$
  4. Type-Filter-Wirksamkeit — kein Result hat einen typ, der eindeutig kein Antrag ist (Plenarprotokoll, Kleine Anfrage, Sitzung, Ausschussvorlage, Beschlussempfehlung). Substring-Match auf "Antrag" weil TH-Format Antrag gemäß § 79 GO korrekt ist
  5. Datum-Plausibilität — wenn gesetzt, dann ≥ wahlperiode_start und ≤ heute
  6. Fraktionen-Plausibilität — falls gesetzt, müssen sie in BUNDESLAENDER[bl].landtagsfraktionen ∪ {"Landesregierung", "BSW", "FREIE WÄHLER", "SSW"} liegen
  7. PDF-Link erreichbar — HEAD-Probe gegen den ersten Result-Link, erwarte 200 oder 301/302 (markiert als @pytest.mark.slow)

Sonderfälle

  • NI als pytest.param("NI", marks=pytest.mark.xfail(reason="nilas/portal ist Login-protected, deferred"))
  • HE ist aktuell nicht im aktiven Set, kommt rein wenn #24 (Card-Parser) durch ist

Bug-Klassen

Deckt 2 (Hit-Format-Drift), 6 (TH composite type), 7 (HE Card-Layout), 8 (NI Login), 13 (Datum leer), 16 (Pagination), 18 (PDF-Link kaputt).

Akzeptanzkriterien

  • pytest -m integration tests/integration/test_adapters_live.py -v zeigt einen separaten Eintrag pro aktivem BL
  • Alle aktiven BL grün außer NI (xfail)
  • Bei einer absichtlich falschen Konfiguration (z.B. db_id falsch) schlägt der Test mit klarer Fehlermeldung fehl
  • Tests laufen < 60s total (jeder Adapter-search() ≤ 5s ausser SH und BW mit Polling)
Sub-Issue von #50. ## Zweck Sub-Issue A des E2E-Test-Umbrellas. Live-Tests pro aktivem Bundesland-Adapter, gegen die echten Landtag-Backends. Marker `@pytest.mark.integration`. ## Datei `webapp/tests/integration/test_adapters_live.py` ## Was getestet wird Pro Adapter aus `aktive_bundeslaender()`, parametrisiert via `pytest.mark.parametrize("code", [...], ids=lambda c: c)`: 1. **Reachability** — `await adapter.search("", limit=5)` läuft erfolgreich durch (kein HTTP-500, kein Timeout, kein Login-Wall) 2. **Result-Anzahl** — `len(results) > 0` (0 Treffer ist Indikator für Schema-Drift, siehe HE) 3. **Drucksache-ID-Format** — alle `Drucksache.drucksache` matchen `^\d+/\d+(\(neu\))?$` 4. **Type-Filter-Wirksamkeit** — kein Result hat einen `typ`, der eindeutig kein Antrag ist (Plenarprotokoll, Kleine Anfrage, Sitzung, Ausschussvorlage, Beschlussempfehlung). Substring-Match auf "Antrag" weil TH-Format `Antrag gemäß § 79 GO` korrekt ist 5. **Datum-Plausibilität** — wenn gesetzt, dann `≥ wahlperiode_start` und `≤ heute` 6. **Fraktionen-Plausibilität** — falls gesetzt, müssen sie in `BUNDESLAENDER[bl].landtagsfraktionen ∪ {"Landesregierung", "BSW", "FREIE WÄHLER", "SSW"}` liegen 7. **PDF-Link erreichbar** — HEAD-Probe gegen den ersten Result-Link, erwarte 200 oder 301/302 (markiert als `@pytest.mark.slow`) ## Sonderfälle - **NI** als `pytest.param("NI", marks=pytest.mark.xfail(reason="nilas/portal ist Login-protected, deferred"))` - **HE** ist aktuell nicht im aktiven Set, kommt rein wenn #24 (Card-Parser) durch ist ## Bug-Klassen Deckt 2 (Hit-Format-Drift), 6 (TH composite type), 7 (HE Card-Layout), 8 (NI Login), 13 (Datum leer), 16 (Pagination), 18 (PDF-Link kaputt). ## Akzeptanzkriterien - [ ] `pytest -m integration tests/integration/test_adapters_live.py -v` zeigt einen separaten Eintrag pro aktivem BL - [ ] Alle aktiven BL grün außer NI (xfail) - [ ] Bei einer absichtlich falschen Konfiguration (z.B. `db_id` falsch) schlägt der Test mit klarer Fehlermeldung fehl - [ ] Tests laufen `< 60s` total (jeder Adapter-search() ≤ 5s ausser SH und BW mit Polling)
Author
Owner

Sub-A erledigt — tests/integration/test_adapters_live.py mit Reachability/Type-Filter/Datum/Fraktion-Plausibilitäts-Checks pro aktivem BL. Commit 73a7f76.

Sub-A erledigt — tests/integration/test_adapters_live.py mit Reachability/Type-Filter/Datum/Fraktion-Plausibilitäts-Checks pro aktivem BL. Commit 73a7f76.
Sign in to join this conversation.
No description provided.