Tests für die 4 ungetesteten Kernmodule der Datenpipeline (Datenabruf, Datenschreiber, LayerLoader, excel_importer) #63

Closed
opened 2026-09-18 07:27:00 +00:00 by Daniel · 0 comments
Member

Ziel

Die vier zentralen Module der Abruf-/Lade-/Schreib-Pipeline von sn_basis haben Mock-Modus-Tests, sodass eine
Codeänderung daran nicht mehr unbemerkt die Kernfunktionen brechen kann, die von allen Fachplugins über
DataGrabber genutzt werden.

Betroffen

Plugin: sn_basis
Module/Dateien:

  • modules/Datenabruf.py (WFS/ArcGIS-REST/OGR-Abruf, Raumfilter)
  • modules/Datenschreiber.py (Schreiben ins GeoPackage, Laden ins Projekt, HTML-Protokoll)
  • modules/LayerLoader.py (Layer erzeugen, CRS-Transformation, Stil, Filter, Projekt-Einbindung)
  • modules/excel_importer.py (Excel-Import für Linklisten, harte Abhängigkeit openpyxl)

Berührt Schnittstellen (docs/architektur/schnittstellen.md)? ja: Alle vier Module werden von DataGrabber
verwendet, der wiederum von allen Fachplugin-Tabs aufgerufen wird. Ein stiller Bruch hier wirkt sich auf
sn_verfahrensgebiet, sn_plan41 und künftige Fachplugins aus.

Fachlicher Hintergrund

Der neue Testkatalog-Abschnitt „Ungetestete Funktionen" (docs/tests/testkatalog.md, seit dem Test-Audit
2026-09-18) hat diese vier Module als einzige mit keiner einzigen Testdatei identifiziert — obwohl sie
zusammen die Kernpipeline bilden. Priorisierte Funktionen (Auswahl, keine vollständige Liste):

  • Datenabruf.datenabruf, _determine_spatial_filter (wählt Verfahrensgebiet/Puffer/kein Filter),
    _build_provider_url (Aufbau der Abruf-URL je Provider), _fetch_features
  • Datenschreiber.schreibe_Daten, lade_Layer, _write_layer_to_gpkg, schreibe_log, _resolve_style_path
  • LayerLoader.create_layer, _transform_geometry_to_layer_crs, _transform_extent_to_layer_crs,
    filter_by_extent, filter_by_layer, apply_style, add_to_project
  • ExcelImporter.import_xlsx (Fehlerzweige: fehlender Header, leeres Blatt, nicht lesbare Datei)

Muster für den Zuschnitt der Tests: bestehende Mock-Modus-Tests in sn_basis/tests/ (z. B.
test_dateipruefer.py, test_linkpruefer.py).

Abnahmekriterien

  • sn_basis/tests/test_datenabruf.py mit Tests für datenabruf, _determine_spatial_filter,
    _build_provider_url (mind. je ein Test pro Provider-Typ)
  • sn_basis/tests/test_datenschreiber.py mit Tests für schreibe_Daten, lade_Layer,
    _write_layer_to_gpkg, schreibe_log
  • sn_basis/tests/test_layerloader.py mit Tests für create_layer, _transform_geometry_to_layer_crs,
    _transform_extent_to_layer_crs, filter_by_extent, filter_by_layer
  • sn_basis/tests/test_excel_importer.py mit Tests für import_xlsx (Erfolg und die drei Fehlerzweige)
  • Jeder neue Test hat einen deutschen Docstring nach dem Muster """Prüft, dass …""" (ADR 0009)
  • python scripts/testkatalog.py neu erzeugt und mitcommittet
  • Mock-Test vorhanden, run_tests.py sn_basis --baseline ohne NEU ROT
  • QGIS-Test: nicht nötig — alle genannten Funktionen sind im Mock-Modus ohne echtes QGIS-Rendering
    sinnvoll prüfbar (reine Logik, String-/URL-Bau, Datei-/GeoPackage-Zugriff)

Nicht Teil dieses Issues

  • Der in derselben Analyse gefundene Verdachtsfall, dass Datenschreiber._resolve_style_path und
    functions/ly_style_wrapper.py::apply_style einen Fachplugin-Namen (sn_plan41 bzw.
    sn_verfahrensgebiet) hartkodieren, statt ihn als Parameter zu übernehmen — das ist ein eigenes Issue
    (mutmaßlicher Bug, keine Testlücke).
  • Tests für print_logic.py/print_layout.py (QGIS-Layout-lastig, eigenes Thema).
  • Vollständige Testabdeckung der vier Module — Priorität liegt auf den oben genannten Funktionen; weitere
    Lücken stehen in docs/tests/testkatalog.md, Abschnitt „Ungetestete Funktionen", Paket sn_basis.
  • openpyxl wird in zukünftigen Versionen geplant überflüssig
    docs/status/STATUS.md Punkt 11) — betrifft die Ausführbarkeit des neuen Tests, ist aber eine eigene Aufgabe.
## Ziel Die vier zentralen Module der Abruf-/Lade-/Schreib-Pipeline von sn_basis haben Mock-Modus-Tests, sodass eine Codeänderung daran nicht mehr unbemerkt die Kernfunktionen brechen kann, die von allen Fachplugins über `DataGrabber` genutzt werden. ## Betroffen Plugin: sn_basis Module/Dateien: - `modules/Datenabruf.py` (WFS/ArcGIS-REST/OGR-Abruf, Raumfilter) - `modules/Datenschreiber.py` (Schreiben ins GeoPackage, Laden ins Projekt, HTML-Protokoll) - `modules/LayerLoader.py` (Layer erzeugen, CRS-Transformation, Stil, Filter, Projekt-Einbindung) - `modules/excel_importer.py` (Excel-Import für Linklisten, harte Abhängigkeit `openpyxl`) Berührt Schnittstellen (`docs/architektur/schnittstellen.md`)? ja: Alle vier Module werden von `DataGrabber` verwendet, der wiederum von allen Fachplugin-Tabs aufgerufen wird. Ein stiller Bruch hier wirkt sich auf sn_verfahrensgebiet, sn_plan41 und künftige Fachplugins aus. ## Fachlicher Hintergrund Der neue Testkatalog-Abschnitt „Ungetestete Funktionen" (`docs/tests/testkatalog.md`, seit dem Test-Audit 2026-09-18) hat diese vier Module als einzige mit **keiner einzigen Testdatei** identifiziert — obwohl sie zusammen die Kernpipeline bilden. Priorisierte Funktionen (Auswahl, keine vollständige Liste): - `Datenabruf.datenabruf`, `_determine_spatial_filter` (wählt Verfahrensgebiet/Puffer/kein Filter), `_build_provider_url` (Aufbau der Abruf-URL je Provider), `_fetch_features` - `Datenschreiber.schreibe_Daten`, `lade_Layer`, `_write_layer_to_gpkg`, `schreibe_log`, `_resolve_style_path` - `LayerLoader.create_layer`, `_transform_geometry_to_layer_crs`, `_transform_extent_to_layer_crs`, `filter_by_extent`, `filter_by_layer`, `apply_style`, `add_to_project` - `ExcelImporter.import_xlsx` (Fehlerzweige: fehlender Header, leeres Blatt, nicht lesbare Datei) Muster für den Zuschnitt der Tests: bestehende Mock-Modus-Tests in `sn_basis/tests/` (z. B. `test_dateipruefer.py`, `test_linkpruefer.py`). ## Abnahmekriterien - [ ] `sn_basis/tests/test_datenabruf.py` mit Tests für `datenabruf`, `_determine_spatial_filter`, `_build_provider_url` (mind. je ein Test pro Provider-Typ) - [ ] `sn_basis/tests/test_datenschreiber.py` mit Tests für `schreibe_Daten`, `lade_Layer`, `_write_layer_to_gpkg`, `schreibe_log` - [ ] `sn_basis/tests/test_layerloader.py` mit Tests für `create_layer`, `_transform_geometry_to_layer_crs`, `_transform_extent_to_layer_crs`, `filter_by_extent`, `filter_by_layer` - [ ] `sn_basis/tests/test_excel_importer.py` mit Tests für `import_xlsx` (Erfolg und die drei Fehlerzweige) - [ ] Jeder neue Test hat einen deutschen Docstring nach dem Muster `"""Prüft, dass …"""` (ADR 0009) - [ ] `python scripts/testkatalog.py` neu erzeugt und mitcommittet - [ ] Mock-Test vorhanden, `run_tests.py sn_basis --baseline` ohne NEU ROT - [ ] QGIS-Test: nicht nötig — alle genannten Funktionen sind im Mock-Modus ohne echtes QGIS-Rendering sinnvoll prüfbar (reine Logik, String-/URL-Bau, Datei-/GeoPackage-Zugriff) ## Nicht Teil dieses Issues - Der in derselben Analyse gefundene Verdachtsfall, dass `Datenschreiber._resolve_style_path` und `functions/ly_style_wrapper.py::apply_style` einen Fachplugin-Namen (`sn_plan41` bzw. `sn_verfahrensgebiet`) hartkodieren, statt ihn als Parameter zu übernehmen — das ist ein eigenes Issue (mutmaßlicher Bug, keine Testlücke). - Tests für `print_logic.py`/`print_layout.py` (QGIS-Layout-lastig, eigenes Thema). - Vollständige Testabdeckung der vier Module — Priorität liegt auf den oben genannten Funktionen; weitere Lücken stehen in `docs/tests/testkatalog.md`, Abschnitt „Ungetestete Funktionen", Paket `sn_basis`. - `openpyxl` wird in zukünftigen Versionen geplant überflüssig `docs/status/STATUS.md` Punkt 11) — betrifft die Ausführbarkeit des neuen Tests, ist aber eine eigene Aufgabe.
Daniel added the Feature label 2026-09-18 07:27:00 +00:00
Daniel self-assigned this 2026-09-18 07:27:00 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: AG_QGIS/Plugin_SN_Basis#63