From 159efc27a784cf7ed0adb16b0527422a33908830 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 21 Sep 2026 11:49:25 +0200 Subject: [PATCH] =?UTF-8?q?Testkatalog=20neu=20erzeugt=20f=C3=BCr=20Basis?= =?UTF-8?q?=20#76?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Docstring-Präzisierung von test_fehlender_layer_liefert_none übernommen. Co-Authored-By: Claude Sonnet 5 --- docs/tests/testkatalog.html | 16 ++++++------- docs/tests/testkatalog.md | 48 ++++++++++++++++++------------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/docs/tests/testkatalog.html b/docs/tests/testkatalog.html index e5da8bd..268ca49 100644 --- a/docs/tests/testkatalog.html +++ b/docs/tests/testkatalog.html @@ -123,14 +123,14 @@

Prüfstand

Testkatalog der sn_*-Plugins — was die Suite heute prüft, auf einen Blick.
-
Quelle: docs/tests/testkatalog.md
Baseline: docs/status/testbaseline.json (SHA-256 aeabc946a7f3)
Prüf-Audit: docs/status/testpruefungen.json (SHA-256 68b590c8feef)
+
Quelle: docs/tests/testkatalog.md
Baseline: docs/status/testbaseline.json (SHA-256 aeabc946a7f3)
Prüf-Audit: docs/status/testpruefungen.json (SHA-256 c85c88c5c268)
581Testfälle
538grün
35rot (Baseline)
75%mit Docstring
-
9%aktuell geprüft
+
13%aktuell geprüft
49Testdateien
35%ohne Testbezug
@@ -163,8 +163,8 @@ -
32Testdateien
329Testfälle
329grün
0rot (Baseline)
100%mit Docstring
17%geprüft
72ohne Testbezug
-

Tests für sn_basis/ui/base_dockwidget.py::closeEvent (Issue #65).

CloseEventTests 5
flowchart TD
+  
32Testdateien
329Testfälle
329grün
0rot (Baseline)
100%mit Docstring
22%geprüft
72ohne Testbezug
+

Tests für sn_basis/ui/base_dockwidget.py::closeEvent (Issue #65).

CloseEventTests 5
flowchart TD
   root(["test_base_dockwidget.py"])
   class root rootnode
   root --> g1["CloseEventTests (5)"]
@@ -183,7 +183,7 @@
   classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
   classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
   classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
-  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
CloseEventTests
test_ruft_cleanup_aller_tabs_auf
Prüft, dass closeEvent cleanup() auf allen Tabs des Dock-Widgets aufruft.grünnie geprüft
CloseEventTests
test_ignoriert_tabs_ohne_cleanup
Prüft, dass ein Tab ohne cleanup()-Methode nicht zu einem Fehler führt.grünnie geprüft
CloseEventTests
test_fehler_in_cleanup_wird_abgefangen_und_andere_tabs_laufen_weiter
Prüft, dass ein Fehler in cleanup() eines Tabs nicht die übrigen Tabs verhindert.grünnie geprüft
CloseEventTests
test_setzt_toolbar_action_zurueck
Prüft, dass closeEvent die verknüpfte Toolbar-Action auf 'nicht gedrückt' zurücksetzt.grünnie geprüft
CloseEventTests
test_ohne_action_wird_nichts_zurueckgesetzt
Prüft, dass closeEvent ohne verknüpfte Toolbar-Action keine Ausnahme wirft.grünnie geprüft

— (Docstring fehlt)

Keine Testfälle: Die Datei enthält keine unittest.TestCase-Klasse – sie ist eine reine Hilfsdatei, die beim Testlauf nur importiert wird.

— (Docstring fehlt)

TestDataGrabber 8
flowchart TD
+  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
CloseEventTests
test_ruft_cleanup_aller_tabs_auf
Prüft, dass closeEvent cleanup() auf allen Tabs des Dock-Widgets aufruft.grüngeprüft am 2026-09-21
CloseEventTests
test_ignoriert_tabs_ohne_cleanup
Prüft, dass ein Tab ohne cleanup()-Methode nicht zu einem Fehler führt.grüngeprüft am 2026-09-21
CloseEventTests
test_fehler_in_cleanup_wird_abgefangen_und_andere_tabs_laufen_weiter
Prüft, dass ein Fehler in cleanup() eines Tabs nicht die übrigen Tabs verhindert.grüngeprüft am 2026-09-21
CloseEventTests
test_setzt_toolbar_action_zurueck
Prüft, dass closeEvent die verknüpfte Toolbar-Action auf 'nicht gedrückt' zurücksetzt.grüngeprüft am 2026-09-21
CloseEventTests
test_ohne_action_wird_nichts_zurueckgesetzt
Prüft, dass closeEvent ohne verknüpfte Toolbar-Action keine Ausnahme wirft.grüngeprüft am 2026-09-21

— (Docstring fehlt)

Keine Testfälle: Die Datei enthält keine unittest.TestCase-Klasse – sie ist eine reine Hilfsdatei, die beim Testlauf nur importiert wird.

— (Docstring fehlt)

TestDataGrabber 8
flowchart TD
   root(["test_datagrabber.py"])
   class root rootnode
   root --> g1["TestDataGrabber (8)"]
@@ -208,7 +208,7 @@
   classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
   classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
   classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
-  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestDataGrabber
test_analyze_source_type_detects_excel
Prüft, dass eine erreichbare .xlsx-Datei als Quelltyp 'excel' erkannt wird.grüngeprüft am 2026-09-16
TestDataGrabber
test_analyze_source_type_returns_unknown_filetype
Prüft, dass eine erreichbare Datei mit unbekannter Endung als 'unbekannter_dateityp' eingestuft wird.grüngeprüft am 2026-09-16
TestDataGrabber
test_analyze_source_type_detects_service_when_file_check_fails
Prüft, dass eine Quelle als 'dienst' erkannt wird, wenn die Dateiprüfung fehlschlägt, die URL aber erreichbar ist.grüngeprüft am 2026-09-16
TestDataGrabber
test_analyze_source_type_returns_unbekannte_quelle_on_full_failure
Prüft, dass eine Quelle als 'unbekannte_quelle' eingestuft wird, wenn weder Datei- noch Linkprüfung erfolgreich sind.grüngeprüft am 2026-09-16
TestDataGrabber
test_run_returns_success_summary_with_valid_rows
Prüft, dass run() bei erfolgreichem Excel-Import eine Erfolgsmeldung mit den geladenen Zeilen liefert.grüngeprüft am 2026-09-16
TestDataGrabber
test_run_returns_failure_summary_without_rows
Prüft, dass run() bei nicht erkennbarer Quelle eine Fehlermeldung ohne Zeilen liefert.grüngeprüft am 2026-09-16
TestDataGrabber
test_aggregate_results_mit_zeilen_liefert_erfolgsergebnis
Prüft, dass _aggregate_results bei vorhandenen Zeilen ein Erfolgsergebnis mit Zeilenzahl liefert.grünnie geprüft
TestDataGrabber
test_aggregate_results_ohne_zeilen_liefert_keine_validen_eintraege
Prüft, dass _aggregate_results ohne Zeilen ok=False mit Aktion 'keine_validen_eintraege' liefert.grünnie geprüft

— (Docstring fehlt)

TestDateipruefer 17
flowchart TD
+  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestDataGrabber
test_analyze_source_type_detects_excel
Prüft, dass eine erreichbare .xlsx-Datei als Quelltyp 'excel' erkannt wird.grüngeprüft am 2026-09-16
TestDataGrabber
test_analyze_source_type_returns_unknown_filetype
Prüft, dass eine erreichbare Datei mit unbekannter Endung als 'unbekannter_dateityp' eingestuft wird.grüngeprüft am 2026-09-16
TestDataGrabber
test_analyze_source_type_detects_service_when_file_check_fails
Prüft, dass eine Quelle als 'dienst' erkannt wird, wenn die Dateiprüfung fehlschlägt, die URL aber erreichbar ist.grüngeprüft am 2026-09-16
TestDataGrabber
test_analyze_source_type_returns_unbekannte_quelle_on_full_failure
Prüft, dass eine Quelle als 'unbekannte_quelle' eingestuft wird, wenn weder Datei- noch Linkprüfung erfolgreich sind.grüngeprüft am 2026-09-16
TestDataGrabber
test_run_returns_success_summary_with_valid_rows
Prüft, dass run() bei erfolgreichem Excel-Import eine Erfolgsmeldung mit den geladenen Zeilen liefert.grüngeprüft am 2026-09-16
TestDataGrabber
test_run_returns_failure_summary_without_rows
Prüft, dass run() bei nicht erkennbarer Quelle eine Fehlermeldung ohne Zeilen liefert.grüngeprüft am 2026-09-16
TestDataGrabber
test_aggregate_results_mit_zeilen_liefert_erfolgsergebnis
Prüft, dass _aggregate_results bei vorhandenen Zeilen ein Erfolgsergebnis mit Zeilenzahl liefert.grüngeprüft am 2026-09-21
TestDataGrabber
test_aggregate_results_ohne_zeilen_liefert_keine_validen_eintraege
Prüft, dass _aggregate_results ohne Zeilen ok=False mit Aktion 'keine_validen_eintraege' liefert.grüngeprüft am 2026-09-21

— (Docstring fehlt)

TestDateipruefer 17
flowchart TD
   root(["test_dateipruefer.py"])
   class root rootnode
   root --> g1["TestDateipruefer (17)"]
@@ -251,7 +251,7 @@
   classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
   classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
   classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
-  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestDateipruefer
test_leereingabe_erlaubt
Prüft, dass eine leere Pfadangabe bei leereingabe_erlaubt=True als 'leereingabe_erlaubt' ohne Kontext gemeldet wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_leereingabe_nicht_erlaubt
Prüft, dass eine leere Pfadangabe ohne leereingabe_erlaubt als 'leereingabe_nicht_erlaubt' abgelehnt wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_standarddatei_vorschlagen
Prüft, dass bei leerer Pfadangabe mit gesetzter Standarddatei 'standarddatei_vorschlagen' mit dem Standardpfad als Kontext geliefert wird.grünnie geprüft
TestDateipruefer
test_temporaer_erlaubt
Prüft, dass eine leere Pfadangabe bei temporaer_erlaubt=True als 'temporaer_erlaubt' ohne Kontext gemeldet wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_datei_nicht_gefunden
Prüft, dass ein nicht existierender Dateipfad als 'datei_nicht_gefunden' mit dem Pfad als Kontext abgelehnt wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_datei_ok
Prüft, dass ein existierender Dateipfad als 'ok' mit dem Pfad als Kontext bestätigt wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_erkenne_dateityp_unterscheidet_excel_datenbank_und_unbekannt
Prüft, dass erkenne_dateityp .xlsx als 'excel', .gpkg/.sqlite als 'datenbank' und Rest als 'unbekannt' erkennt.grünnie geprüft
TestDateipruefer
test_pfad_verbindet_relativen_pfad_mit_basispfad
Prüft, dass _pfad einen relativen Pfad mit dem Basisverzeichnis verbindet.grünnie geprüft
TestDateipruefer
test_pfad_laesst_absoluten_pfad_unveraendert
Prüft, dass _pfad einen bereits absoluten Pfad nicht mit dem Basisverzeichnis verbindet.grünnie geprüft
TestDateipruefer
test_ist_gueltiger_gpkg_pfad_akzeptiert_vorhandenes_verzeichnis
Prüft, dass ein .gpkg-Pfad mit vorhandenem Zielverzeichnis als gültig gilt.grünnie geprüft
TestDateipruefer
test_ist_gueltiger_gpkg_pfad_lehnt_falsche_endung_ab
Prüft, dass ein Pfad ohne .gpkg-Endung als ungültig gilt, auch bei vorhandenem Verzeichnis.grünnie geprüft
TestDateipruefer
test_ist_gueltiger_gpkg_pfad_lehnt_fehlendes_verzeichnis_ab
Prüft, dass ein .gpkg-Pfad in einem nicht vorhandenen Verzeichnis als ungültig gilt.grünnie geprüft
TestDateipruefer
test_ist_leer_erkennt_none_und_nicht_string_als_leer
Prüft, dass _ist_leer sowohl None als auch einen Nicht-String-Wert als leer meldet.grünnie geprüft
TestDateipruefer
test_ist_leer_erkennt_reinen_whitespace_als_leer
Prüft, dass _ist_leer eine Eingabe aus reinen Leerzeichen als leer meldet.grünnie geprüft
TestDateipruefer
test_ist_leer_meldet_pfad_mit_sichtbaren_zeichen_nicht_als_leer
Prüft, dass _ist_leer einen Pfad mit sichtbaren Zeichen nicht als leer meldet.grünnie geprüft
TestDateipruefer
test_leere_eingabe_bevorzugt_leereingabe_erlaubt_vor_standarddatei
Prüft, dass bei leerer Eingabe leereingabe_erlaubt Vorrang vor einer gesetzten Standarddatei hat.grünnie geprüft
TestDateipruefer
test_leere_eingabe_bevorzugt_standarddatei_vor_temporaer_erlaubt
Prüft, dass bei leerer Eingabe eine gesetzte Standarddatei Vorrang vor temporaer_erlaubt hat.grünnie geprüft

Tests für sn_basis/modules/Datenabruf.py (Datenabruf-Kernpipeline, Issue #63).

DetermineSpatialFilterTests 7BuildProviderUrlTests 9FetchFeaturesTests 5DatenabrufOrchestrierungTests 3
flowchart TD
+  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestDateipruefer
test_leereingabe_erlaubt
Prüft, dass eine leere Pfadangabe bei leereingabe_erlaubt=True als 'leereingabe_erlaubt' ohne Kontext gemeldet wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_leereingabe_nicht_erlaubt
Prüft, dass eine leere Pfadangabe ohne leereingabe_erlaubt als 'leereingabe_nicht_erlaubt' abgelehnt wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_standarddatei_vorschlagen
Prüft, dass bei leerer Pfadangabe mit gesetzter Standarddatei 'standarddatei_vorschlagen' mit dem Standardpfad als Kontext geliefert wird.grüngeprüft am 2026-09-21
TestDateipruefer
test_temporaer_erlaubt
Prüft, dass eine leere Pfadangabe bei temporaer_erlaubt=True als 'temporaer_erlaubt' ohne Kontext gemeldet wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_datei_nicht_gefunden
Prüft, dass ein nicht existierender Dateipfad als 'datei_nicht_gefunden' mit dem Pfad als Kontext abgelehnt wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_datei_ok
Prüft, dass ein existierender Dateipfad als 'ok' mit dem Pfad als Kontext bestätigt wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_erkenne_dateityp_unterscheidet_excel_datenbank_und_unbekannt
Prüft, dass erkenne_dateityp .xlsx als 'excel', .gpkg/.sqlite als 'datenbank' und Rest als 'unbekannt' erkennt.grüngeprüft am 2026-09-21
TestDateipruefer
test_pfad_verbindet_relativen_pfad_mit_basispfad
Prüft, dass _pfad einen relativen Pfad mit dem Basisverzeichnis verbindet.grüngeprüft am 2026-09-21
TestDateipruefer
test_pfad_laesst_absoluten_pfad_unveraendert
Prüft, dass _pfad einen bereits absoluten Pfad nicht mit dem Basisverzeichnis verbindet.grüngeprüft am 2026-09-21
TestDateipruefer
test_ist_gueltiger_gpkg_pfad_akzeptiert_vorhandenes_verzeichnis
Prüft, dass ein .gpkg-Pfad mit vorhandenem Zielverzeichnis als gültig gilt.grüngeprüft am 2026-09-21
TestDateipruefer
test_ist_gueltiger_gpkg_pfad_lehnt_falsche_endung_ab
Prüft, dass ein Pfad ohne .gpkg-Endung als ungültig gilt, auch bei vorhandenem Verzeichnis.grüngeprüft am 2026-09-21
TestDateipruefer
test_ist_gueltiger_gpkg_pfad_lehnt_fehlendes_verzeichnis_ab
Prüft, dass ein .gpkg-Pfad in einem nicht vorhandenen Verzeichnis als ungültig gilt.grüngeprüft am 2026-09-21
TestDateipruefer
test_ist_leer_erkennt_none_und_nicht_string_als_leer
Prüft, dass _ist_leer sowohl None als auch einen Nicht-String-Wert als leer meldet.grüngeprüft am 2026-09-21
TestDateipruefer
test_ist_leer_erkennt_reinen_whitespace_als_leer
Prüft, dass _ist_leer eine Eingabe aus reinen Leerzeichen als leer meldet.grüngeprüft am 2026-09-21
TestDateipruefer
test_ist_leer_meldet_pfad_mit_sichtbaren_zeichen_nicht_als_leer
Prüft, dass _ist_leer einen Pfad mit sichtbaren Zeichen nicht als leer meldet.grüngeprüft am 2026-09-21
TestDateipruefer
test_leere_eingabe_bevorzugt_leereingabe_erlaubt_vor_standarddatei
Prüft, dass bei leerer Eingabe leereingabe_erlaubt Vorrang vor einer gesetzten Standarddatei hat.grüngeprüft am 2026-09-21
TestDateipruefer
test_leere_eingabe_bevorzugt_standarddatei_vor_temporaer_erlaubt
Prüft, dass bei leerer Eingabe eine gesetzte Standarddatei Vorrang vor temporaer_erlaubt hat.grüngeprüft am 2026-09-21

Tests für sn_basis/modules/Datenabruf.py (Datenabruf-Kernpipeline, Issue #63).

DetermineSpatialFilterTests 7BuildProviderUrlTests 9FetchFeaturesTests 5DatenabrufOrchestrierungTests 3
flowchart TD
   root(["test_datenabruf.py"])
   class root rootnode
   root --> g1["DetermineSpatialFilterTests (7)"]
@@ -314,7 +314,7 @@
   classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
   classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
   classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
-  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
DetermineSpatialFilterTests
test_raumfilter_ohne_liefert_none
Prüft, dass Raumfilter 'ohne' unabhängig vom Layer immer None liefert.grünnie geprüft
DetermineSpatialFilterTests
test_fehlender_layer_liefert_none
Prüft, dass ohne Verfahrensgebiet-Layer kein Raumfilter gebaut wird.grünnie geprüft
DetermineSpatialFilterTests
test_unbekannter_raumfilter_liefert_none
Prüft, dass ein unbekannter Raumfilter-Wert None liefert, statt einen Fehler zu werfen.grünnie geprüft
DetermineSpatialFilterTests
test_verfahrensgebiet_liefert_extent_und_crs
Prüft, dass Raumfilter 'Verfahrensgebiet' Extent und CRS des Verfahrensgebiet-Layers liefert.grünnie geprüft
DetermineSpatialFilterTests
test_verfahrensgebiet_ohne_extent_liefert_none
Prüft, dass ein Verfahrensgebiet-Layer ohne ermittelbaren Extent None liefert.grünnie geprüft
DetermineSpatialFilterTests
test_pufferlayer_liefert_extent_des_pufferlayers
Prüft, dass Raumfilter 'Pufferlayer' Extent und CRS des erzeugten Pufferlayers liefert.grünnie geprüft
DetermineSpatialFilterTests
test_pufferlayer_ohne_puffer_liefert_none
Prüft, dass 'Pufferlayer' None liefert, wenn kein Pufferlayer erzeugt werden konnte.grünnie geprüft
BuildProviderUrlTests
test_wms_liefert_link_unveraendert
Prüft, dass bei Provider WMS der Link unverändert durchgereicht wird, auch mit Raumfilter.grünnie geprüft
BuildProviderUrlTests
test_url_praefix_wird_entfernt
Prüft, dass ein vorangestelltes 'url=' aus dem Link entfernt wird.grünnie geprüft
BuildProviderUrlTests
test_wfs_baut_standardparameter_und_bbox_mit_crs
Prüft, dass WFS-Abrufe Standardparameter, umbenanntes TYPENAMES und BBOX mit CRS-URN erhalten.grünnie geprüft
BuildProviderUrlTests
test_wfs_repariert_doppeltes_fragezeichen
Prüft, dass ein zweites '?' im WFS-Link zu '&' korrigiert wird, statt eine ungültige URL zu erzeugen.grünnie geprüft
BuildProviderUrlTests
test_wfs_ohne_raumfilter_setzt_keine_bbox
Prüft, dass WFS ohne Raumfilter (bbox_geom=None) keinen BBOX-Parameter setzt.grünnie geprüft
BuildProviderUrlTests
test_rest_provider_haengt_query_endpunkt_an
Prüft, dass REST/ArcGIS-Links ohne '/query'-Endpunkt automatisch ergänzt werden.grünnie geprüft
BuildProviderUrlTests
test_rest_provider_mit_bbox_baut_geometry_envelope_und_srid
Prüft, dass REST-Abrufe mit Raumfilter eine Geometry-Envelope und inSR/outSR aus dem CRS setzen.grünnie geprüft
BuildProviderUrlTests
test_default_provider_haengt_generischen_bbox_parameter_an
Prüft, dass ein unbekannter Provider mit Raumfilter einen generischen bbox-Parameter erhält.grünnie geprüft
BuildProviderUrlTests
test_default_provider_ohne_raumfilter_laesst_query_unveraendert
Prüft, dass ein unbekannter Provider ohne Raumfilter keinen bbox-Parameter ergänzt.grünnie geprüft
FetchFeaturesTests
test_wms_liefert_keine_features_ohne_fehler
Prüft, dass bei Provider WMS kein Featureabruf stattfindet und kein Fehler gemeldet wird.grünnie geprüft
FetchFeaturesTests
test_abbruch_vor_abruf_liefert_fehlermeldung
Prüft, dass ein bereits gesetzter Abbruch vor dem eigentlichen Abruf erkannt wird.grünnie geprüft
FetchFeaturesTests
test_json_featurecollection_wird_geparst
Prüft, dass eine JSON-FeatureCollection-Antwort in eine Feature-Liste umgewandelt wird.grünnie geprüft
FetchFeaturesTests
test_netzwerkfehler_wird_als_fehlermeldung_gemeldet
Prüft, dass ein fehlgeschlagener HTTP-Abruf eine Fehlermeldung statt einer Ausnahme liefert.grünnie geprüft
FetchFeaturesTests
test_wfs_xml_liefert_anzahl_aus_numberofmatched
Prüft, dass eine WFS-XML-Antwort ohne JSON die Trefferzahl aus numberOfMatched übernimmt.grünnie geprüft
DatenabrufOrchestrierungTests
test_fehlende_pflichtfelder_werden_als_ungueltig_gemeldet
Prüft, dass eine Zeile ohne Link/Provider mit Aktion 'pflichtfelder_fehlen' gemeldet und übersprungen wird.grünnie geprüft
DatenabrufOrchestrierungTests
test_wms_zeile_ohne_features_landet_in_ausserhalb
Prüft, dass eine erfolgreich abgerufene WMS-Zeile mit 0 Features als 'ausserhalb' gezählt wird.grünnie geprüft
DatenabrufOrchestrierungTests
test_abbruch_ueber_progress_stoppt_weitere_zeilen
Prüft, dass ein Abbruch über das Progress-Objekt die Verarbeitung weiterer Zeilen stoppt.grünnie geprüft

Tests für sn_basis/modules/Datenschreiber.py (Schreib-/Ladepipeline, Issue #63).

WriteLayerToGpkgTests 2ResolveStylePathTests 3SchreibeDatenTests 4LadeLayerTests 3SchreibeLogTests 2StoreStyleInGpkgTests 4
flowchart TD
+  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
DetermineSpatialFilterTests
test_raumfilter_ohne_liefert_none
Prüft, dass Raumfilter 'ohne' unabhängig vom Layer immer None liefert.grünnie geprüft
DetermineSpatialFilterTests
test_fehlender_layer_liefert_none
Prüft, dass ohne Verfahrensgebiet-Layer kein Raumfilter gebaut wird (Verfahrensgebiet als Raumfilter gewählt, aber kein Verfahrensgebiet-Layer vorhanden).grünnie geprüft
DetermineSpatialFilterTests
test_unbekannter_raumfilter_liefert_none
Prüft, dass ein unbekannter Raumfilter-Wert None liefert, statt einen Fehler zu werfen.grünnie geprüft
DetermineSpatialFilterTests
test_verfahrensgebiet_liefert_extent_und_crs
Prüft, dass Raumfilter 'Verfahrensgebiet' Extent und CRS des Verfahrensgebiet-Layers liefert.grünnie geprüft
DetermineSpatialFilterTests
test_verfahrensgebiet_ohne_extent_liefert_none
Prüft, dass ein Verfahrensgebiet-Layer ohne ermittelbaren Extent None liefert.grünnie geprüft
DetermineSpatialFilterTests
test_pufferlayer_liefert_extent_des_pufferlayers
Prüft, dass Raumfilter 'Pufferlayer' Extent und CRS des erzeugten Pufferlayers liefert.grünnie geprüft
DetermineSpatialFilterTests
test_pufferlayer_ohne_puffer_liefert_none
Prüft, dass 'Pufferlayer' None liefert, wenn kein Pufferlayer erzeugt werden konnte.grünnie geprüft
BuildProviderUrlTests
test_wms_liefert_link_unveraendert
Prüft, dass bei Provider WMS der Link unverändert durchgereicht wird, auch mit Raumfilter.grünnie geprüft
BuildProviderUrlTests
test_url_praefix_wird_entfernt
Prüft, dass ein vorangestelltes 'url=' aus dem Link entfernt wird.grünnie geprüft
BuildProviderUrlTests
test_wfs_baut_standardparameter_und_bbox_mit_crs
Prüft, dass WFS-Abrufe Standardparameter, umbenanntes TYPENAMES und BBOX mit CRS-URN erhalten.grünnie geprüft
BuildProviderUrlTests
test_wfs_repariert_doppeltes_fragezeichen
Prüft, dass ein zweites '?' im WFS-Link zu '&' korrigiert wird, statt eine ungültige URL zu erzeugen.grünnie geprüft
BuildProviderUrlTests
test_wfs_ohne_raumfilter_setzt_keine_bbox
Prüft, dass WFS ohne Raumfilter (bbox_geom=None) keinen BBOX-Parameter setzt.grünnie geprüft
BuildProviderUrlTests
test_rest_provider_haengt_query_endpunkt_an
Prüft, dass REST/ArcGIS-Links ohne '/query'-Endpunkt automatisch ergänzt werden.grünnie geprüft
BuildProviderUrlTests
test_rest_provider_mit_bbox_baut_geometry_envelope_und_srid
Prüft, dass REST-Abrufe mit Raumfilter eine Geometry-Envelope und inSR/outSR aus dem CRS setzen.grünnie geprüft
BuildProviderUrlTests
test_default_provider_haengt_generischen_bbox_parameter_an
Prüft, dass ein unbekannter Provider mit Raumfilter einen generischen bbox-Parameter erhält.grünnie geprüft
BuildProviderUrlTests
test_default_provider_ohne_raumfilter_laesst_query_unveraendert
Prüft, dass ein unbekannter Provider ohne Raumfilter keinen bbox-Parameter ergänzt.grünnie geprüft
FetchFeaturesTests
test_wms_liefert_keine_features_ohne_fehler
Prüft, dass bei Provider WMS kein Featureabruf stattfindet und kein Fehler gemeldet wird.grünnie geprüft
FetchFeaturesTests
test_abbruch_vor_abruf_liefert_fehlermeldung
Prüft, dass ein bereits gesetzter Abbruch vor dem eigentlichen Abruf erkannt wird.grünnie geprüft
FetchFeaturesTests
test_json_featurecollection_wird_geparst
Prüft, dass eine JSON-FeatureCollection-Antwort in eine Feature-Liste umgewandelt wird.grünnie geprüft
FetchFeaturesTests
test_netzwerkfehler_wird_als_fehlermeldung_gemeldet
Prüft, dass ein fehlgeschlagener HTTP-Abruf eine Fehlermeldung statt einer Ausnahme liefert.grünnie geprüft
FetchFeaturesTests
test_wfs_xml_liefert_anzahl_aus_numberofmatched
Prüft, dass eine WFS-XML-Antwort ohne JSON die Trefferzahl aus numberOfMatched übernimmt.grünnie geprüft
DatenabrufOrchestrierungTests
test_fehlende_pflichtfelder_werden_als_ungueltig_gemeldet
Prüft, dass eine Zeile ohne Link/Provider mit Aktion 'pflichtfelder_fehlen' gemeldet und übersprungen wird.grünnie geprüft
DatenabrufOrchestrierungTests
test_wms_zeile_ohne_features_landet_in_ausserhalb
Prüft, dass eine erfolgreich abgerufene WMS-Zeile mit 0 Features als 'ausserhalb' gezählt wird.grünnie geprüft
DatenabrufOrchestrierungTests
test_abbruch_ueber_progress_stoppt_weitere_zeilen
Prüft, dass ein Abbruch über das Progress-Objekt die Verarbeitung weiterer Zeilen stoppt.grünnie geprüft

Tests für sn_basis/modules/Datenschreiber.py (Schreib-/Ladepipeline, Issue #63).

WriteLayerToGpkgTests 2ResolveStylePathTests 3SchreibeDatenTests 4LadeLayerTests 3SchreibeLogTests 2StoreStyleInGpkgTests 4
flowchart TD
   root(["test_datenschreiber.py"])
   class root rootnode
   root --> g1["WriteLayerToGpkgTests (2)"]
diff --git a/docs/tests/testkatalog.md b/docs/tests/testkatalog.md
index d2269b8..7693dcb 100644
--- a/docs/tests/testkatalog.md
+++ b/docs/tests/testkatalog.md
@@ -8,21 +8,21 @@ für die fachliche Frage, ob die Abdeckung sinnvoll ist. Die Angaben stammen aus
 selbst (Docstrings) und aus der Testbaseline.
 
 Stand der Baseline: `docs/status/testbaseline.json` (SHA-256 `aeabc946a7f3`)
-Stand des Prüf-Audits: `docs/status/testpruefungen.json` (SHA-256 `68b590c8feef`)
+Stand des Prüf-Audits: `docs/status/testpruefungen.json` (SHA-256 `c85c88c5c268`)
 
 Gesamt: 3 Pakete, 49 Testdateien, 581 Testfälle – 538 grün, 35 rot (Baseline), 8 übersprungen.
 Mit Beschreibung (Docstring): 436 von 581 (75 %).
-Fachlich geprüft: 55 von 581 (9 %) aktuell, 0 veraltet seit Codeänderung, 526 nie geprüft.
+Fachlich geprüft: 74 von 581 (13 %) aktuell, 0 veraltet seit Codeänderung, 507 nie geprüft.
 Strukturelle Lücken (heuristisch, Namensabgleich): 145 von 413 (35 %) Funktionen/Methoden ohne erkennbaren Testbezug – Abschnitt „Ungetestete Funktionen“.
 
 ## Zusammenfassung
 
 | Paket | Testdateien | Testfälle | grün | rot (Baseline) | übersprungen | mit Beschreibung | fachlich geprüft | ohne Testbezug |
 | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
-| `sn_basis` | 32 | 329 | 329 | 0 | 0 | 329 von 329 (100 %) | 55 von 329 (17 %) | 72 von 229 (31 %) |
+| `sn_basis` | 32 | 329 | 329 | 0 | 0 | 329 von 329 (100 %) | 74 von 329 (22 %) | 72 von 229 (31 %) |
 | `sn_verfahrensgebiet` | 12 | 208 | 166 | 34 | 8 | 106 von 208 (51 %) | 0 von 208 (0 %) | 34 von 104 (33 %) |
 | `sn_plan41` | 5 | 44 | 43 | 1 | 0 | 1 von 44 (2 %) | 0 von 44 (0 %) | 39 von 80 (49 %) |
-| **Summe** | **49** | **581** | **538** | **35** | **8** | **436 von 581 (75 %)** | **55 von 581 (9 %)** | **145 von 413 (35 %)** |
+| **Summe** | **49** | **581** | **538** | **35** | **8** | **436 von 581 (75 %)** | **74 von 581 (13 %)** | **145 von 413 (35 %)** |
 
 ### Legende
 
@@ -48,11 +48,11 @@ Testgruppen:
 
 | Testfall | prüft | Status | geprüft |
 | --- | --- | --- | --- |
-| `CloseEventTests.test_ruft_cleanup_aller_tabs_auf` | Prüft, dass closeEvent cleanup() auf allen Tabs des Dock-Widgets aufruft. | grün | nie geprüft |
-| `CloseEventTests.test_ignoriert_tabs_ohne_cleanup` | Prüft, dass ein Tab ohne cleanup()-Methode nicht zu einem Fehler führt. | grün | nie geprüft |
-| `CloseEventTests.test_fehler_in_cleanup_wird_abgefangen_und_andere_tabs_laufen_weiter` | Prüft, dass ein Fehler in cleanup() eines Tabs nicht die übrigen Tabs verhindert. | grün | nie geprüft |
-| `CloseEventTests.test_setzt_toolbar_action_zurueck` | Prüft, dass closeEvent die verknüpfte Toolbar-Action auf 'nicht gedrückt' zurücksetzt. | grün | nie geprüft |
-| `CloseEventTests.test_ohne_action_wird_nichts_zurueckgesetzt` | Prüft, dass closeEvent ohne verknüpfte Toolbar-Action keine Ausnahme wirft. | grün | nie geprüft |
+| `CloseEventTests.test_ruft_cleanup_aller_tabs_auf` | Prüft, dass closeEvent cleanup() auf allen Tabs des Dock-Widgets aufruft. | grün | geprüft am 2026-09-21 |
+| `CloseEventTests.test_ignoriert_tabs_ohne_cleanup` | Prüft, dass ein Tab ohne cleanup()-Methode nicht zu einem Fehler führt. | grün | geprüft am 2026-09-21 |
+| `CloseEventTests.test_fehler_in_cleanup_wird_abgefangen_und_andere_tabs_laufen_weiter` | Prüft, dass ein Fehler in cleanup() eines Tabs nicht die übrigen Tabs verhindert. | grün | geprüft am 2026-09-21 |
+| `CloseEventTests.test_setzt_toolbar_action_zurueck` | Prüft, dass closeEvent die verknüpfte Toolbar-Action auf 'nicht gedrückt' zurücksetzt. | grün | geprüft am 2026-09-21 |
+| `CloseEventTests.test_ohne_action_wird_nichts_zurueckgesetzt` | Prüft, dass closeEvent ohne verknüpfte Toolbar-Action keine Ausnahme wirft. | grün | geprüft am 2026-09-21 |
 
 ### `Plugin_SN_Basis/tests/test_bootstrap.py`
 
@@ -76,8 +76,8 @@ Testgruppen:
 | `TestDataGrabber.test_analyze_source_type_returns_unbekannte_quelle_on_full_failure` | Prüft, dass eine Quelle als 'unbekannte_quelle' eingestuft wird, wenn weder Datei- noch Linkprüfung erfolgreich sind. | grün | geprüft am 2026-09-16 |
 | `TestDataGrabber.test_run_returns_success_summary_with_valid_rows` | Prüft, dass run() bei erfolgreichem Excel-Import eine Erfolgsmeldung mit den geladenen Zeilen liefert. | grün | geprüft am 2026-09-16 |
 | `TestDataGrabber.test_run_returns_failure_summary_without_rows` | Prüft, dass run() bei nicht erkennbarer Quelle eine Fehlermeldung ohne Zeilen liefert. | grün | geprüft am 2026-09-16 |
-| `TestDataGrabber.test_aggregate_results_mit_zeilen_liefert_erfolgsergebnis` | Prüft, dass _aggregate_results bei vorhandenen Zeilen ein Erfolgsergebnis mit Zeilenzahl liefert. | grün | nie geprüft |
-| `TestDataGrabber.test_aggregate_results_ohne_zeilen_liefert_keine_validen_eintraege` | Prüft, dass _aggregate_results ohne Zeilen ok=False mit Aktion 'keine_validen_eintraege' liefert. | grün | nie geprüft |
+| `TestDataGrabber.test_aggregate_results_mit_zeilen_liefert_erfolgsergebnis` | Prüft, dass _aggregate_results bei vorhandenen Zeilen ein Erfolgsergebnis mit Zeilenzahl liefert. | grün | geprüft am 2026-09-21 |
+| `TestDataGrabber.test_aggregate_results_ohne_zeilen_liefert_keine_validen_eintraege` | Prüft, dass _aggregate_results ohne Zeilen ok=False mit Aktion 'keine_validen_eintraege' liefert. | grün | geprüft am 2026-09-21 |
 
 ### `Plugin_SN_Basis/tests/test_dateipruefer.py`
 
@@ -91,21 +91,21 @@ Testgruppen:
 | --- | --- | --- | --- |
 | `TestDateipruefer.test_leereingabe_erlaubt` | Prüft, dass eine leere Pfadangabe bei leereingabe_erlaubt=True als 'leereingabe_erlaubt' ohne Kontext gemeldet wird. | grün | geprüft am 2026-09-17 |
 | `TestDateipruefer.test_leereingabe_nicht_erlaubt` | Prüft, dass eine leere Pfadangabe ohne leereingabe_erlaubt als 'leereingabe_nicht_erlaubt' abgelehnt wird. | grün | geprüft am 2026-09-17 |
-| `TestDateipruefer.test_standarddatei_vorschlagen` | Prüft, dass bei leerer Pfadangabe mit gesetzter Standarddatei 'standarddatei_vorschlagen' mit dem Standardpfad als Kontext geliefert wird. | grün | nie geprüft |
+| `TestDateipruefer.test_standarddatei_vorschlagen` | Prüft, dass bei leerer Pfadangabe mit gesetzter Standarddatei 'standarddatei_vorschlagen' mit dem Standardpfad als Kontext geliefert wird. | grün | geprüft am 2026-09-21 |
 | `TestDateipruefer.test_temporaer_erlaubt` | Prüft, dass eine leere Pfadangabe bei temporaer_erlaubt=True als 'temporaer_erlaubt' ohne Kontext gemeldet wird. | grün | geprüft am 2026-09-17 |
 | `TestDateipruefer.test_datei_nicht_gefunden` | Prüft, dass ein nicht existierender Dateipfad als 'datei_nicht_gefunden' mit dem Pfad als Kontext abgelehnt wird. | grün | geprüft am 2026-09-17 |
 | `TestDateipruefer.test_datei_ok` | Prüft, dass ein existierender Dateipfad als 'ok' mit dem Pfad als Kontext bestätigt wird. | grün | geprüft am 2026-09-17 |
-| `TestDateipruefer.test_erkenne_dateityp_unterscheidet_excel_datenbank_und_unbekannt` | Prüft, dass erkenne_dateityp .xlsx als 'excel', .gpkg/.sqlite als 'datenbank' und Rest als 'unbekannt' erkennt. | grün | nie geprüft |
-| `TestDateipruefer.test_pfad_verbindet_relativen_pfad_mit_basispfad` | Prüft, dass _pfad einen relativen Pfad mit dem Basisverzeichnis verbindet. | grün | nie geprüft |
-| `TestDateipruefer.test_pfad_laesst_absoluten_pfad_unveraendert` | Prüft, dass _pfad einen bereits absoluten Pfad nicht mit dem Basisverzeichnis verbindet. | grün | nie geprüft |
-| `TestDateipruefer.test_ist_gueltiger_gpkg_pfad_akzeptiert_vorhandenes_verzeichnis` | Prüft, dass ein .gpkg-Pfad mit vorhandenem Zielverzeichnis als gültig gilt. | grün | nie geprüft |
-| `TestDateipruefer.test_ist_gueltiger_gpkg_pfad_lehnt_falsche_endung_ab` | Prüft, dass ein Pfad ohne .gpkg-Endung als ungültig gilt, auch bei vorhandenem Verzeichnis. | grün | nie geprüft |
-| `TestDateipruefer.test_ist_gueltiger_gpkg_pfad_lehnt_fehlendes_verzeichnis_ab` | Prüft, dass ein .gpkg-Pfad in einem nicht vorhandenen Verzeichnis als ungültig gilt. | grün | nie geprüft |
-| `TestDateipruefer.test_ist_leer_erkennt_none_und_nicht_string_als_leer` | Prüft, dass _ist_leer sowohl None als auch einen Nicht-String-Wert als leer meldet. | grün | nie geprüft |
-| `TestDateipruefer.test_ist_leer_erkennt_reinen_whitespace_als_leer` | Prüft, dass _ist_leer eine Eingabe aus reinen Leerzeichen als leer meldet. | grün | nie geprüft |
-| `TestDateipruefer.test_ist_leer_meldet_pfad_mit_sichtbaren_zeichen_nicht_als_leer` | Prüft, dass _ist_leer einen Pfad mit sichtbaren Zeichen nicht als leer meldet. | grün | nie geprüft |
-| `TestDateipruefer.test_leere_eingabe_bevorzugt_leereingabe_erlaubt_vor_standarddatei` | Prüft, dass bei leerer Eingabe leereingabe_erlaubt Vorrang vor einer gesetzten Standarddatei hat. | grün | nie geprüft |
-| `TestDateipruefer.test_leere_eingabe_bevorzugt_standarddatei_vor_temporaer_erlaubt` | Prüft, dass bei leerer Eingabe eine gesetzte Standarddatei Vorrang vor temporaer_erlaubt hat. | grün | nie geprüft |
+| `TestDateipruefer.test_erkenne_dateityp_unterscheidet_excel_datenbank_und_unbekannt` | Prüft, dass erkenne_dateityp .xlsx als 'excel', .gpkg/.sqlite als 'datenbank' und Rest als 'unbekannt' erkennt. | grün | geprüft am 2026-09-21 |
+| `TestDateipruefer.test_pfad_verbindet_relativen_pfad_mit_basispfad` | Prüft, dass _pfad einen relativen Pfad mit dem Basisverzeichnis verbindet. | grün | geprüft am 2026-09-21 |
+| `TestDateipruefer.test_pfad_laesst_absoluten_pfad_unveraendert` | Prüft, dass _pfad einen bereits absoluten Pfad nicht mit dem Basisverzeichnis verbindet. | grün | geprüft am 2026-09-21 |
+| `TestDateipruefer.test_ist_gueltiger_gpkg_pfad_akzeptiert_vorhandenes_verzeichnis` | Prüft, dass ein .gpkg-Pfad mit vorhandenem Zielverzeichnis als gültig gilt. | grün | geprüft am 2026-09-21 |
+| `TestDateipruefer.test_ist_gueltiger_gpkg_pfad_lehnt_falsche_endung_ab` | Prüft, dass ein Pfad ohne .gpkg-Endung als ungültig gilt, auch bei vorhandenem Verzeichnis. | grün | geprüft am 2026-09-21 |
+| `TestDateipruefer.test_ist_gueltiger_gpkg_pfad_lehnt_fehlendes_verzeichnis_ab` | Prüft, dass ein .gpkg-Pfad in einem nicht vorhandenen Verzeichnis als ungültig gilt. | grün | geprüft am 2026-09-21 |
+| `TestDateipruefer.test_ist_leer_erkennt_none_und_nicht_string_als_leer` | Prüft, dass _ist_leer sowohl None als auch einen Nicht-String-Wert als leer meldet. | grün | geprüft am 2026-09-21 |
+| `TestDateipruefer.test_ist_leer_erkennt_reinen_whitespace_als_leer` | Prüft, dass _ist_leer eine Eingabe aus reinen Leerzeichen als leer meldet. | grün | geprüft am 2026-09-21 |
+| `TestDateipruefer.test_ist_leer_meldet_pfad_mit_sichtbaren_zeichen_nicht_als_leer` | Prüft, dass _ist_leer einen Pfad mit sichtbaren Zeichen nicht als leer meldet. | grün | geprüft am 2026-09-21 |
+| `TestDateipruefer.test_leere_eingabe_bevorzugt_leereingabe_erlaubt_vor_standarddatei` | Prüft, dass bei leerer Eingabe leereingabe_erlaubt Vorrang vor einer gesetzten Standarddatei hat. | grün | geprüft am 2026-09-21 |
+| `TestDateipruefer.test_leere_eingabe_bevorzugt_standarddatei_vor_temporaer_erlaubt` | Prüft, dass bei leerer Eingabe eine gesetzte Standarddatei Vorrang vor temporaer_erlaubt hat. | grün | geprüft am 2026-09-21 |
 
 ### `Plugin_SN_Basis/tests/test_datenabruf.py`
 
@@ -121,7 +121,7 @@ Testgruppen:
 | Testfall | prüft | Status | geprüft |
 | --- | --- | --- | --- |
 | `DetermineSpatialFilterTests.test_raumfilter_ohne_liefert_none` | Prüft, dass Raumfilter 'ohne' unabhängig vom Layer immer None liefert. | grün | nie geprüft |
-| `DetermineSpatialFilterTests.test_fehlender_layer_liefert_none` | Prüft, dass ohne Verfahrensgebiet-Layer kein Raumfilter gebaut wird. | grün | nie geprüft |
+| `DetermineSpatialFilterTests.test_fehlender_layer_liefert_none` | Prüft, dass ohne Verfahrensgebiet-Layer kein Raumfilter gebaut wird (Verfahrensgebiet als Raumfilter gewählt, aber kein Verfahrensgebiet-Layer vorhanden). | grün | nie geprüft |
 | `DetermineSpatialFilterTests.test_unbekannter_raumfilter_liefert_none` | Prüft, dass ein unbekannter Raumfilter-Wert None liefert, statt einen Fehler zu werfen. | grün | nie geprüft |
 | `DetermineSpatialFilterTests.test_verfahrensgebiet_liefert_extent_und_crs` | Prüft, dass Raumfilter 'Verfahrensgebiet' Extent und CRS des Verfahrensgebiet-Layers liefert. | grün | nie geprüft |
 | `DetermineSpatialFilterTests.test_verfahrensgebiet_ohne_extent_liefert_none` | Prüft, dass ein Verfahrensgebiet-Layer ohne ermittelbaren Extent None liefert. | grün | nie geprüft |