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.
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
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
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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
DataGrabbergenutzt 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ängigkeitopenpyxl)Berührt Schnittstellen (
docs/architektur/schnittstellen.md)? ja: Alle vier Module werden vonDataGrabberverwendet, 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-Audit2026-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_featuresDatenschreiber.schreibe_Daten,lade_Layer,_write_layer_to_gpkg,schreibe_log,_resolve_style_pathLayerLoader.create_layer,_transform_geometry_to_layer_crs,_transform_extent_to_layer_crs,filter_by_extent,filter_by_layer,apply_style,add_to_projectExcelImporter.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.pymit Tests fürdatenabruf,_determine_spatial_filter,_build_provider_url(mind. je ein Test pro Provider-Typ)sn_basis/tests/test_datenschreiber.pymit Tests fürschreibe_Daten,lade_Layer,_write_layer_to_gpkg,schreibe_logsn_basis/tests/test_layerloader.pymit Tests fürcreate_layer,_transform_geometry_to_layer_crs,_transform_extent_to_layer_crs,filter_by_extent,filter_by_layersn_basis/tests/test_excel_importer.pymit Tests fürimport_xlsx(Erfolg und die drei Fehlerzweige)"""Prüft, dass …"""(ADR 0009)python scripts/testkatalog.pyneu erzeugt und mitcommittetrun_tests.py sn_basis --baselineohne NEU ROTsinnvoll prüfbar (reine Logik, String-/URL-Bau, Datei-/GeoPackage-Zugriff)
Nicht Teil dieses Issues
Datenschreiber._resolve_style_pathundfunctions/ly_style_wrapper.py::apply_styleeinen Fachplugin-Namen (sn_plan41bzw.sn_verfahrensgebiet) hartkodieren, statt ihn als Parameter zu übernehmen — das ist ein eigenes Issue(mutmaßlicher Bug, keine Testlücke).
print_logic.py/print_layout.py(QGIS-Layout-lastig, eigenes Thema).Lücken stehen in
docs/tests/testkatalog.md, Abschnitt „Ungetestete Funktionen", Paketsn_basis.openpyxlwird in zukünftigen Versionen geplant überflüssigdocs/status/STATUS.mdPunkt 11) — betrifft die Ausführbarkeit des neuen Tests, ist aber eine eigene Aufgabe.