— (Docstring fehlt)
Keine Testfälle: Die Datei enthält keine unittest.TestCase-Klasse – sie ist eine reine Hilfsdatei, die beim Testlauf nur importiert wird.
diff --git a/docs/architektur/modulkarte.md b/docs/architektur/modulkarte.md index ec64b16..58f69d4 100644 --- a/docs/architektur/modulkarte.md +++ b/docs/architektur/modulkarte.md @@ -63,7 +63,7 @@ Legende: ⚠ = über 600 Zeilen, nie komplett laden, per `grep -n "def "` navigi | Pfad | Zweck | |---|---| -| `tests/` | 19 Testdateien, `unittest`, Mock-Modus; `run_tests.py` (farbiger Runner), `test_qgis.bat` (Coverage in OSGeo4W) | +| `tests/` | 29 Testdateien, `unittest`, Mock-Modus; `run_tests.py` (farbiger Runner), `test_qgis.bat` (Coverage in OSGeo4W) | | `styles/` | QML-Stile (Verfahrensgebiet, LSG, Denkmalschutz, Flurstücksbeschriftung) | | `data/landkreise.json` | Landkreise mit Kennzahl | | `assets/plan-qgis340ExitCrashFix.prompt.md` | KI-Planungsnotiz zum Exit-Crash (historisch) | diff --git a/docs/tests/testkatalog.html b/docs/tests/testkatalog.html index f802bdf..6c22c40 100644 --- a/docs/tests/testkatalog.html +++ b/docs/tests/testkatalog.html @@ -121,22 +121,22 @@ Testkatalog der sn_*-Plugins — was die Suite heute prüft, auf einen Blick.
Plattform-Plugin · Ordner Plugin_SN_Basis · 19 Testdateien · 166 Testfälle
+Plattform-Plugin · Ordner Plugin_SN_Basis · 29 Testdateien · 249 Testfälle
— (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)
flowchart TD ++ classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;Tests für sn_basis/ui/base_dockwidget.py::closeEvent (Issue #65).
CloseEventTests 5flowchart TD + root(["test_base_dockwidget.py"]) + class root rootnode + root --> g1["CloseEventTests (5)"] + class g1 groupnode + g1 --> t1("ruft_cleanup_aller_tabs_auf") + g1 --> t2("ignoriert_tabs_ohne_cleanup") + g1 --> t3("fehler_in_cleanup_wird_abgefangen_und_andere_tabs_laufen_weiter") + g1 --> t4("setzt_toolbar_action_zurueck") + g1 --> t5("ohne_action_wird_nichts_zurueckgesetzt") + class t1 ok + class t2 ok + class t3 ok + class t4 ok + class t5 ok + classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600; + 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;
Testfall prüft Status geprüft CloseEventTests
test_ruft_cleanup_aller_tabs_aufPrüft, dass closeEvent cleanup() auf allen Tabs des Dock-Widgets aufruft. grün nie geprüft CloseEventTests
test_ignoriert_tabs_ohne_cleanupPrü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_weiterPrüft, dass ein Fehler in cleanup() eines Tabs nicht die übrigen Tabs verhindert. grün nie geprüft CloseEventTests
test_setzt_toolbar_action_zurueckPrü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_zurueckgesetztPrüft, dass closeEvent ohne verknüpfte Toolbar-Action keine Ausnahme wirft. grün nie 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 6flowchart TD root(["test_datagrabber.py"]) class root rootnode root --> g1["TestDataGrabber (6)"] @@ -180,10 +199,10 @@ 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;
Testfall prüft Status geprüft TestDataGrabber
test_analyze_source_type_detects_excelPrüft, dass eine erreichbare .xlsx-Datei als Quelltyp 'excel' erkannt wird. grün geprüft am 2026-09-16 TestDataGrabber
test_analyze_source_type_returns_unknown_filetypePrüft, dass eine erreichbare Datei mit unbekannter Endung als 'unbekannter_dateityp' eingestuft wird. grün geprüft am 2026-09-16 TestDataGrabber
test_analyze_source_type_detects_service_when_file_check_failsPrüft, dass eine Quelle als 'dienst' erkannt wird, wenn die Dateiprüfung fehlschlägt, die URL aber erreichbar ist. grün geprüft am 2026-09-16 TestDataGrabber
test_analyze_source_type_returns_unbekannte_quelle_on_full_failurePrü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_rowsPrü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_rowsPrüft, dass run() bei nicht erkennbarer Quelle eine Fehlermeldung ohne Zeilen liefert. grün geprüft am 2026-09-16 — (Docstring fehlt)
TestDateipruefer 6flowchart TD + classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
Testfall prüft Status geprüft TestDataGrabber
test_analyze_source_type_detects_excelPrüft, dass eine erreichbare .xlsx-Datei als Quelltyp 'excel' erkannt wird. grün geprüft am 2026-09-16 TestDataGrabber
test_analyze_source_type_returns_unknown_filetypePrüft, dass eine erreichbare Datei mit unbekannter Endung als 'unbekannter_dateityp' eingestuft wird. grün geprüft am 2026-09-16 TestDataGrabber
test_analyze_source_type_detects_service_when_file_check_failsPrüft, dass eine Quelle als 'dienst' erkannt wird, wenn die Dateiprüfung fehlschlägt, die URL aber erreichbar ist. grün geprüft am 2026-09-16 TestDataGrabber
test_analyze_source_type_returns_unbekannte_quelle_on_full_failurePrü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_rowsPrü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_rowsPrüft, dass run() bei nicht erkennbarer Quelle eine Fehlermeldung ohne Zeilen liefert. grün geprüft am 2026-09-16 — (Docstring fehlt)
TestDateipruefer 12flowchart TD root(["test_dateipruefer.py"]) class root rootnode - root --> g1["TestDateipruefer (6)"] + root --> g1["TestDateipruefer (12)"] class g1 groupnode g1 --> t1("leereingabe_erlaubt") g1 --> t2("leereingabe_nicht_erlaubt") @@ -191,17 +210,29 @@ g1 --> t4("temporaer_erlaubt") g1 --> t5("datei_nicht_gefunden") g1 --> t6("datei_ok") + g1 --> t7("erkenne_dateityp_unterscheidet_excel_datenbank_und_unbekannt") + g1 --> t8("pfad_verbindet_relativen_pfad_mit_basispfad") + g1 --> t9("pfad_laesst_absoluten_pfad_unveraendert") + g1 --> t10("ist_gueltiger_gpkg_pfad_akzeptiert_vorhandenes_verzeichnis") + g1 --> t11("ist_gueltiger_gpkg_pfad_lehnt_falsche_endung_ab") + g1 --> t12("ist_gueltiger_gpkg_pfad_lehnt_fehlendes_verzeichnis_ab") class t1 ok class t2 ok class t3 ok class t4 ok class t5 ok class t6 ok + class t7 ok + class t8 ok + class t9 ok + class t10 ok + class t11 ok + class t12 ok classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600; 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;
Testfall prüft Status geprüft TestDateipruefer
test_leereingabe_erlaubtPrü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_erlaubtPrü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_vorschlagenPrüft, dass bei leerer Pfadangabe mit gesetzter Standarddatei 'standarddatei_vorschlagen' mit dem Standardpfad als Kontext geliefert wird. grün nie geprüft TestDateipruefer
test_temporaer_erlaubtPrü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_gefundenPrü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_okPrüft, dass ein existierender Dateipfad als 'ok' mit dem Pfad als Kontext bestätigt wird. grün geprüft am 2026-09-17 Tests für sn_basis/modules/Datenabruf.py (Datenabruf-Kernpipeline, Issue #63).
DetermineSpatialFilterTests 7BuildProviderUrlTests 9FetchFeaturesTests 5DatenabrufOrchestrierungTests 3flowchart TD + classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
Testfall prüft Status geprüft TestDateipruefer
test_leereingabe_erlaubtPrü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_erlaubtPrü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_vorschlagenPrüft, dass bei leerer Pfadangabe mit gesetzter Standarddatei 'standarddatei_vorschlagen' mit dem Standardpfad als Kontext geliefert wird. grün nie geprüft TestDateipruefer
test_temporaer_erlaubtPrü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_gefundenPrü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_okPrü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_unbekanntPrü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_basispfadPrüft, dass _pfad einen relativen Pfad mit dem Basisverzeichnis verbindet. grün nie geprüft TestDateipruefer
test_pfad_laesst_absoluten_pfad_unveraendertPrü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_verzeichnisPrü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_abPrü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_abPrüft, dass ein .gpkg-Pfad in einem nicht vorhandenen Verzeichnis als ungültig gilt. grün nie geprüft Tests für sn_basis/modules/Datenabruf.py (Datenabruf-Kernpipeline, Issue #63).
DetermineSpatialFilterTests 7BuildProviderUrlTests 9FetchFeaturesTests 5DatenabrufOrchestrierungTests 3flowchart TD root(["test_datenabruf.py"]) class root rootnode root --> g1["DetermineSpatialFilterTests (7)"] @@ -309,7 +340,28 @@ 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;
Testfall prüft Status geprüft WriteLayerToGpkgTests
test_ungueltiger_layer_liefert_fehlermeldungPrüft, dass ein ungültiger Layer eine Fehlermeldung statt eines Absturzes liefert. grün nie geprüft WriteLayerToGpkgTests
test_gueltiger_layer_wird_ohne_fehler_geschriebenPrüft, dass ein gültiger Layer im Mock-Modus ohne Fehlermeldung geschrieben wird. grün nie geprüft ResolveStylePathTests
test_leerer_stilpfad_liefert_nonePrüft, dass ein leerer oder fehlender Stilpfad None liefert. grün nie geprüft ResolveStylePathTests
test_absoluter_vorhandener_stilpfad_wird_aufgeloestPrüft, dass ein absoluter, vorhandener Stilpfad normalisiert und unverändert erkannt wird. grün nie geprüft ResolveStylePathTests
test_nicht_vorhandener_stilpfad_liefert_nonePrüft, dass ein nicht vorhandener Stilpfad None liefert, statt einen ungültigen Pfad zurückzugeben. grün nie geprüft SchreibeDatenTests
test_ohne_speicherort_wirft_valueerrorPrüft, dass schreibe_Daten ohne Speicherort einen ValueError wirft. grün nie geprüft SchreibeDatenTests
test_eintrag_ohne_gueltigen_layer_wird_uebersprungenPrüft, dass ein Eintrag ohne gültigen Layer übersprungen wird und ein Fehlerergebnis meldet. grün nie geprüft SchreibeDatenTests
test_erfolgreicher_eintrag_liefert_layer_path_und_themaPrüft, dass ein gültiger Layer einen Layer-Path mit GPKG-Pfad und Layername liefert. grün nie geprüft SchreibeDatenTests
test_ohne_thema_wird_ident_als_layername_verwendetPrüft, dass ohne passendes Thema in processed_results der ident als Layername verwendet wird. grün nie geprüft LadeLayerTests
test_ohne_layer_path_wird_uebersprungenPrüft, dass ein Eintrag ohne layer_path übersprungen wird, ohne einen Fehler zu melden. grün nie geprüft LadeLayerTests
test_gueltiger_layer_wird_dem_projekt_hinzugefuegtPrüft, dass ein gültig ladbarer Layer ohne Fehlermeldung verarbeitet wird. grün nie geprüft LadeLayerTests
test_ungueltiger_layer_meldet_layer_nicht_gefundenPrüft, dass ein ungültig ladbarer Layer als 'layer_nicht_gefunden' gemeldet wird. grün nie geprüft SchreibeLogTests
test_ohne_speicherort_wirft_valueerrorPrüft, dass schreibe_log ohne Speicherort einen ValueError wirft. grün nie geprüft SchreibeLogTests
test_schreibt_json_datei_mit_ergebnissen_und_gibt_pfad_zurueckPrüft, dass schreibe_log eine lesbare JSON-Log-Datei erzeugt und deren Pfad zurückgibt. grün nie geprüft Tests für sn_basis/modules/excel_importer.py (Excel-Import für Linklisten, Issue #63).
ImportXlsxTests 5ExcelImporterKonstruktorTests 2flowchart TD + classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
Testfall prüft Status geprüft WriteLayerToGpkgTests
test_ungueltiger_layer_liefert_fehlermeldungPrüft, dass ein ungültiger Layer eine Fehlermeldung statt eines Absturzes liefert. grün nie geprüft WriteLayerToGpkgTests
test_gueltiger_layer_wird_ohne_fehler_geschriebenPrüft, dass ein gültiger Layer im Mock-Modus ohne Fehlermeldung geschrieben wird. grün nie geprüft ResolveStylePathTests
test_leerer_stilpfad_liefert_nonePrüft, dass ein leerer oder fehlender Stilpfad None liefert. grün nie geprüft ResolveStylePathTests
test_absoluter_vorhandener_stilpfad_wird_aufgeloestPrüft, dass ein absoluter, vorhandener Stilpfad normalisiert und unverändert erkannt wird. grün nie geprüft ResolveStylePathTests
test_nicht_vorhandener_stilpfad_liefert_nonePrüft, dass ein nicht vorhandener Stilpfad None liefert, statt einen ungültigen Pfad zurückzugeben. grün nie geprüft SchreibeDatenTests
test_ohne_speicherort_wirft_valueerrorPrüft, dass schreibe_Daten ohne Speicherort einen ValueError wirft. grün nie geprüft SchreibeDatenTests
test_eintrag_ohne_gueltigen_layer_wird_uebersprungenPrüft, dass ein Eintrag ohne gültigen Layer übersprungen wird und ein Fehlerergebnis meldet. grün nie geprüft SchreibeDatenTests
test_erfolgreicher_eintrag_liefert_layer_path_und_themaPrüft, dass ein gültiger Layer einen Layer-Path mit GPKG-Pfad und Layername liefert. grün nie geprüft SchreibeDatenTests
test_ohne_thema_wird_ident_als_layername_verwendetPrüft, dass ohne passendes Thema in processed_results der ident als Layername verwendet wird. grün nie geprüft LadeLayerTests
test_ohne_layer_path_wird_uebersprungenPrüft, dass ein Eintrag ohne layer_path übersprungen wird, ohne einen Fehler zu melden. grün nie geprüft LadeLayerTests
test_gueltiger_layer_wird_dem_projekt_hinzugefuegtPrüft, dass ein gültig ladbarer Layer ohne Fehlermeldung verarbeitet wird. grün nie geprüft LadeLayerTests
test_ungueltiger_layer_meldet_layer_nicht_gefundenPrüft, dass ein ungültig ladbarer Layer als 'layer_nicht_gefunden' gemeldet wird. grün nie geprüft SchreibeLogTests
test_ohne_speicherort_wirft_valueerrorPrüft, dass schreibe_log ohne Speicherort einen ValueError wirft. grün nie geprüft SchreibeLogTests
test_schreibt_json_datei_mit_ergebnissen_und_gibt_pfad_zurueckPrüft, dass schreibe_log eine lesbare JSON-Log-Datei erzeugt und deren Pfad zurückgibt. grün nie geprüft Tests für sn_basis/ui/dockmanager.py (nur ein Dock gleichzeitig sichtbar, Issue #65).
DockManagerShowTests 6flowchart TD + root(["test_dockmanager.py"]) + class root rootnode + root --> g1["DockManagerShowTests (6)"] + class g1 groupnode + g1 --> t1("none_dock_meldet_fehler_und_zeigt_nichts_an") + g1 --> t2("setzt_objectname_wenn_leer") + g1 --> t3("entfernt_andere_sn_docks_aber_nicht_sich_selbst") + g1 --> t4("zeigt_neues_dock_mit_default_area_an") + g1 --> t5("fehler_beim_entfernen_wird_als_warnung_gemeldet") + g1 --> t6("fehler_beim_anzeigen_wird_gemeldet") + class t1 ok + class t2 ok + class t3 ok + class t4 ok + class t5 ok + class t6 ok + classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600; + 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;
Testfall prüft Status geprüft DockManagerShowTests
test_none_dock_meldet_fehler_und_zeigt_nichts_anPrüft, dass ein fehlendes Dock-Widget (None) einen Fehler meldet und nichts anzeigt. grün nie geprüft DockManagerShowTests
test_setzt_objectname_wenn_leerPrüft, dass ein Dock ohne Namen einen technischen Namen mit dem Präfix 'sn_dock_' erhält. grün nie geprüft DockManagerShowTests
test_entfernt_andere_sn_docks_aber_nicht_sich_selbstPrüft, dass andere sn_basis-Docks entfernt werden, das neue Dock und fremde Widgets aber unangetastet bleiben. grün nie geprüft DockManagerShowTests
test_zeigt_neues_dock_mit_default_area_anPrüft, dass ein neues Dock mit der Standard-Area (DockAreaRight) angezeigt wird. grün nie geprüft DockManagerShowTests
test_fehler_beim_entfernen_wird_als_warnung_gemeldetPrüft, dass ein Fehler beim Entfernen alter Docks nur gewarnt und das neue Dock trotzdem angezeigt wird. grün nie geprüft DockManagerShowTests
test_fehler_beim_anzeigen_wird_gemeldetPrüft, dass ein Fehler beim Anzeigen des Docks als Fehler gemeldet wird. grün nie geprüft Tests für sn_basis/modules/excel_importer.py (Excel-Import für Linklisten, Issue #63).
ImportXlsxTests 5ExcelImporterKonstruktorTests 2flowchart TD root(["test_excel_importer.py"]) class root rootnode root --> g1["ImportXlsxTests (5)"] @@ -353,7 +405,20 @@ 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;
Testfall prüft Status geprüft TestGetLaenderkennung
test_bekannter_praefix_gibt_kennung_zurueckPrüft, dass der Präfix 'sn' die ALKIS-Länderkennung '14' für Sachsen liefert. grün geprüft am 2026-09-17 TestGetLaenderkennung
test_praefix_gross_klein_unabhaengigPrüft, dass die Präfixsuche groß-/kleinschreibungsunabhängig ist. grün geprüft am 2026-09-17 TestGetLaenderkennung
test_unbekannter_praefix_wirft_keyerrorPrüft, dass ein unbekannter Präfix einen KeyError auslöst. grün geprüft am 2026-09-17 TestGetLaenderkennung
test_ohne_argument_wird_aus_aufrufendem_modul_abgeleitetPrüft, dass ohne Argument der Präfix aus dem Modulnamen des Aufrufers abgeleitet wird. grün geprüft am 2026-09-17 TestGetLaenderkennung
test_mapping_enthaelt_sachsenPrüft, dass die Mapping-Tabelle LAENDERKENNUNGEN einen Eintrag für Sachsen ('sn' -> '14') enthält. grün geprüft am 2026-09-17 Tests für sn_basis/modules/LayerLoader.py (Layer erzeugen/filtern/laden, Issue #63).
CreateLayerTests 7TransformGeometryTests 3TransformExtentTests 2FilterByExtentTests 6FilterByLayerTests 4AddToProjectTests 3flowchart TD + classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
Testfall prüft Status geprüft TestGetLaenderkennung
test_bekannter_praefix_gibt_kennung_zurueckPrüft, dass der Präfix 'sn' die ALKIS-Länderkennung '14' für Sachsen liefert. grün geprüft am 2026-09-17 TestGetLaenderkennung
test_praefix_gross_klein_unabhaengigPrüft, dass die Präfixsuche groß-/kleinschreibungsunabhängig ist. grün geprüft am 2026-09-17 TestGetLaenderkennung
test_unbekannter_praefix_wirft_keyerrorPrüft, dass ein unbekannter Präfix einen KeyError auslöst. grün geprüft am 2026-09-17 TestGetLaenderkennung
test_ohne_argument_wird_aus_aufrufendem_modul_abgeleitetPrüft, dass ohne Argument der Präfix aus dem Modulnamen des Aufrufers abgeleitet wird. grün geprüft am 2026-09-17 TestGetLaenderkennung
test_mapping_enthaelt_sachsenPrüft, dass die Mapping-Tabelle LAENDERKENNUNGEN einen Eintrag für Sachsen ('sn' -> '14') enthält. grün geprüft am 2026-09-17 Tests für sn_basis/functions/landkreise.py::_lade_landkreise (Issue #65).
LadeLandkreiseTests 2flowchart TD + root(["test_landkreise.py"]) + class root rootnode + root --> g1["LadeLandkreiseTests (2)"] + class g1 groupnode + g1 --> t1("laedt_die_echte_landkreisliste_nicht_leer") + g1 --> t2("fehlende_datei_liefert_leere_liste") + class t1 ok + class t2 ok + classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600; + 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;
Testfall prüft Status geprüft LadeLandkreiseTests
test_laedt_die_echte_landkreisliste_nicht_leerPrüft, dass _lade_landkreise die echte landkreise.json als nicht-leere Liste von (Kennzahl, Name)-Tupeln liefert. grün nie geprüft LadeLandkreiseTests
test_fehlende_datei_liefert_leere_listePrüft, dass eine nicht lesbare Datenquelle eine leere Liste liefert, statt eine Ausnahme zu werfen. grün nie geprüft Tests für sn_basis/modules/LayerLoader.py (Layer erzeugen/filtern/laden, Issue #63).
CreateLayerTests 7TransformGeometryTests 3TransformExtentTests 2FilterByExtentTests 6FilterByLayerTests 4AddToProjectTests 3flowchart TD root(["test_layerloader.py"]) class root rootnode root --> g1["CreateLayerTests (7)"] @@ -472,7 +537,70 @@ 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;
Testfall prüft Status geprüft TestLinkpruefer
test_leere_eingabePrüft, dass eine leere Eingabe ohne Netzwerk-/Dateizugriff als 'leer' abgelehnt wird. grün geprüft am 2026-09-17 TestLinkpruefer
test_remote_link_okPrüft, dass eine erreichbare Remote-URL (HTTP HEAD ohne Fehler) als 'ok' bestätigt wird. grün geprüft am 2026-09-17 TestLinkpruefer
test_remote_link_errorPrüft, dass eine Remote-URL mit Fehlerantwort als 'url_nicht_erreichbar' abgelehnt wird. grün geprüft am 2026-09-17 TestLinkpruefer
test_remote_link_network_errorPrüft, dass eine ausbleibende Netzwerkantwort (None) als 'netzwerkfehler' gemeldet wird. grün geprüft am 2026-09-17 TestLinkpruefer
test_local_link_not_foundPrüft, dass ein nicht existierender lokaler Pfad als 'pfad_nicht_gefunden' abgelehnt wird. grün geprüft am 2026-09-17 TestLinkpruefer
test_local_link_okPrüft, dass ein existierender lokaler Pfad als 'ok' bestätigt wird. grün geprüft am 2026-09-17 — (Docstring fehlt)
TestPrintLayout 5flowchart TD + classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
Testfall prüft Status geprüft TestLinkpruefer
test_leere_eingabePrüft, dass eine leere Eingabe ohne Netzwerk-/Dateizugriff als 'leer' abgelehnt wird. grün geprüft am 2026-09-17 TestLinkpruefer
test_remote_link_okPrüft, dass eine erreichbare Remote-URL (HTTP HEAD ohne Fehler) als 'ok' bestätigt wird. grün geprüft am 2026-09-17 TestLinkpruefer
test_remote_link_errorPrüft, dass eine Remote-URL mit Fehlerantwort als 'url_nicht_erreichbar' abgelehnt wird. grün geprüft am 2026-09-17 TestLinkpruefer
test_remote_link_network_errorPrüft, dass eine ausbleibende Netzwerkantwort (None) als 'netzwerkfehler' gemeldet wird. grün geprüft am 2026-09-17 TestLinkpruefer
test_local_link_not_foundPrüft, dass ein nicht existierender lokaler Pfad als 'pfad_nicht_gefunden' abgelehnt wird. grün geprüft am 2026-09-17 TestLinkpruefer
test_local_link_okPrüft, dass ein existierender lokaler Pfad als 'ok' bestätigt wird. grün geprüft am 2026-09-17 Tests für sn_basis/functions/ly_existence_wrapper.py::layer_is_valid/layer_is_usable (Issue #65).
LayerIsValidTests 5LayerIsUsableTests 3flowchart TD + root(["test_ly_existence_wrapper.py"]) + class root rootnode + root --> g1["LayerIsValidTests (5)"] + class g1 groupnode + g1 --> t1("none_ist_nicht_gueltig") + g1 --> t2("objekt_ohne_isvalid_ist_nicht_gueltig") + g1 --> t3("gueltiger_layer_liefert_true") + g1 --> t4("ungueltiger_layer_liefert_false") + g1 --> t5("ausnahme_bei_isvalid_liefert_false") + root --> g2["LayerIsUsableTests (3)"] + class g2 groupnode + g2 --> t6("none_ist_nicht_nutzbar") + g2 --> t7("gueltiger_layer_ist_nutzbar") + g2 --> t8("ungueltiger_layer_ist_nicht_nutzbar") + class t1 ok + class t2 ok + class t3 ok + class t4 ok + class t5 ok + class t6 ok + class t7 ok + class t8 ok + classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600; + 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;
Testfall prüft Status geprüft LayerIsValidTests
test_none_ist_nicht_gueltigPrüft, dass layer_is_valid für None False liefert. grün nie geprüft LayerIsValidTests
test_objekt_ohne_isvalid_ist_nicht_gueltigPrüft, dass ein Objekt ohne isValid()-Methode als ungültig gilt. grün nie geprüft LayerIsValidTests
test_gueltiger_layer_liefert_truePrüft, dass ein Layer mit isValid()==True als gültig erkannt wird. grün nie geprüft LayerIsValidTests
test_ungueltiger_layer_liefert_falsePrüft, dass ein Layer mit isValid()==False als ungültig erkannt wird. grün nie geprüft LayerIsValidTests
test_ausnahme_bei_isvalid_liefert_falsePrüft, dass eine Ausnahme in isValid() abgefangen wird und False liefert. grün nie geprüft LayerIsUsableTests
test_none_ist_nicht_nutzbarPrüft, dass layer_is_usable für None False liefert. grün nie geprüft LayerIsUsableTests
test_gueltiger_layer_ist_nutzbarPrüft, dass ein vorhandener, gültiger Layer als nutzbar gilt. grün nie geprüft LayerIsUsableTests
test_ungueltiger_layer_ist_nicht_nutzbarPrüft, dass ein vorhandener, aber ungültiger Layer als nicht nutzbar gilt. grün nie geprüft Tests für sn_basis/functions/ly_style_wrapper.py::apply_style_from_path (Issue #65).
ApplyStyleFromPathTests 4flowchart TD + root(["test_ly_style_wrapper.py"]) + class root rootnode + root --> g1["ApplyStyleFromPathTests (4)"] + class g1 groupnode + g1 --> t1("fehlender_layer_liefert_false") + g1 --> t2("erfolgreiches_laden_liefert_true_und_triggert_repaint") + g1 --> t3("fehlgeschlagenes_laden_liefert_false_ohne_repaint") + g1 --> t4("ausnahme_beim_laden_wird_abgefangen") + class t1 ok + class t2 ok + class t3 ok + class t4 ok + classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600; + 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;
Testfall prüft Status geprüft ApplyStyleFromPathTests
test_fehlender_layer_liefert_falsePrüft, dass ein fehlender Layer (None) False liefert, ohne einen Stil zu laden. grün nie geprüft ApplyStyleFromPathTests
test_erfolgreiches_laden_liefert_true_und_triggert_repaintPrüft, dass ein erfolgreich geladener Stil True liefert und den Layer neu zeichnet. grün nie geprüft ApplyStyleFromPathTests
test_fehlgeschlagenes_laden_liefert_false_ohne_repaintPrüft, dass ein fehlgeschlagenes Laden False liefert, ohne den Layer neu zu zeichnen. grün nie geprüft ApplyStyleFromPathTests
test_ausnahme_beim_laden_wird_abgefangenPrüft, dass eine Ausnahme beim Laden des Stils abgefangen wird und False liefert. grün nie geprüft Tests für sn_basis/functions/message_wrapper.py (Issue #65).
GetMessageBarTests 2PushMessageTests 2flowchart TD + root(["test_message_wrapper.py"]) + class root rootnode + root --> g1["GetMessageBarTests (2)"] + class g1 groupnode + g1 --> t1("liefert_objekt_mit_pushmessage_methode") + g1 --> t2("faellt_bei_fehlerhaftem_iface_auf_mock_bar_zurueck") + root --> g2["PushMessageTests (2)"] + class g2 groupnode + g2 --> t3("liefert_dict_mit_titel_text_level_und_dauer") + g2 --> t4("fehler_in_der_message_bar_wird_abgefangen") + class t1 ok + class t2 ok + class t3 ok + class t4 ok + classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600; + 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;
Testfall prüft Status geprüft GetMessageBarTests
test_liefert_objekt_mit_pushmessage_methodePrüft, dass _get_message_bar ein Objekt mit aufrufbarer pushMessage()-Methode liefert. grün nie geprüft GetMessageBarTests
test_faellt_bei_fehlerhaftem_iface_auf_mock_bar_zurueckPrüft, dass ein Fehler beim Zugriff auf iface.messageBar() auf eine funktionierende Mock-MessageBar zurückfällt. grün nie geprüft PushMessageTests
test_liefert_dict_mit_titel_text_level_und_dauerPrüft, dass push_message im Mock-Modus ein Dict mit den übergebenen Werten liefert. grün nie geprüft PushMessageTests
test_fehler_in_der_message_bar_wird_abgefangenPrüft, dass eine fehlschlagende MessageBar push_message nicht zum Absturz bringt, sondern None liefert. grün nie geprüft — (Docstring fehlt)
TestPrintLayout 5flowchart TD root(["test_print_layout.py"]) class root rootnode root --> g1["TestPrintLayout (5)"] @@ -534,10 +662,29 @@ 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;
Testfall prüft Status geprüft TestPrintLogic
test_get_baufreigabe_page_dimensions_prefers_a4_for_small_extentPrüft, dass für einen kleinen Kartenausschnitt (Baufreigabe) das Format DIN A4 ohne Fallback gewählt wird. grün nie geprüft TestPrintLogic
test_get_baufreigabe_page_dimensions_escalates_to_a3Prüft, dass ein größerer Kartenausschnitt (Baufreigabe) auf DIN A3 eskaliert wird. grün nie geprüft TestPrintLogic
test_get_baufreigabe_page_dimensions_respects_a4_as_maximum_with_fallbackPrüft, dass bei auf DIN A4 begrenztem Höchstformat ein eigentlich A3-großer Ausschnitt mit Fallback-Kennzeichnung auf A4 reduziert wird. grün nie geprüft TestPrintLogic
test_get_baufreigabe_page_dimensions_falls_back_to_a3_for_oversize_extentPrüft, dass ein Ausschnitt, der auch DIN A3 übersteigt, mit Fallback-Kennzeichnung auf DIN A3 begrenzt wird. grün nie geprüft TestPrintLogic
test_select_standard_page_layout_uses_a4_as_minimum_sheetPrüft, dass für einen kleinen Ausschnitt trotz Höchstgrenze DIN A3 mindestens DIN A4 als Blattgröße gewählt wird. grün nie geprüft TestPrintLogic
test_select_standard_page_layout_limits_hauptkarte_to_a3Prüft, dass ein die Fläche voll ausnutzender Ausschnitt auf DIN A3 als größtes zulässiges Format begrenzt wird. grün nie geprüft TestPrintLogic
test_select_standard_page_layout_returns_none_if_a3_is_too_smallPrüft, dass kein Layout gewählt wird (None), wenn der Ausschnitt selbst DIN A3 als Höchstformat übersteigt. grün nie geprüft TestPrintLogic
test_get_standard_layout_dimensions_uses_a4_and_forces_fit_for_small_extentPrüft, dass für einen kleinen Ausschnitt DIN A4 gewählt und das Einpassen (force_fit) erzwungen wird. grün nie geprüft TestPrintLogic
test_get_standard_layout_dimensions_caps_endlosrolle_width_at_2000_mmPrüft, dass bei aktiviertem Formfaktor (Endlosrolle) die Seitenbreite auf die maximale Rollenbreite (2000 mm) begrenzt wird. grün nie geprüft TestPrintLogic
test_apply_standard_minimum_a4_fallback_for_small_pagePrüft, dass eine zu kleine Seite auf die A4-Mindestgröße angehoben und als erzwungen (forced) markiert wird. grün nie geprüft TestPrintLogic
test_apply_standard_minimum_a4_fallback_keeps_large_pagePrüft, dass eine bereits ausreichend große Seite (A3) unverändert bleibt und nicht als erzwungen markiert wird. grün nie geprüft TestPrintLogic
test_does_plot_fit_page_true_for_standard_a4Prüft, dass ein Kartenobjekt, das in eine DIN A4-Seite passt, als passend erkannt wird. grün nie geprüft TestPrintLogic
test_does_plot_fit_page_false_if_objects_exceed_pagePrüft, dass ein Kartenobjekt, das die Seitenbreite überschreitet, als nicht passend erkannt wird. grün nie geprüft TestPrintLogic
test_set_druckbereich_accepts_wie_kartenfensterPrüft, dass die Auswahl 'wie Kartenfenster' als Projektvariable 'druckbereich' gespeichert wird. grün nie geprüft TestPrintLogic
test_get_canvas_extent_returns_valid_extentPrüft, dass der aktuelle Kartenausschnitt des Kartenfensters unverändert zurückgegeben wird. grün nie geprüft TestPrintLogic
test_resolve_extent_uses_canvas_extent_without_bufferPrüft, dass bei Druckbereich 'wie Kartenfenster' der Kartenausschnitt ohne Puffer und ohne verknüpften Layer übernommen wird. grün nie geprüft TestPrintLogic
test_resolve_extent_uses_rectangle_extent_without_bufferPrüft, dass bei Druckbereich 'Rechteck' der gezeichnete Ausschnitt ohne Puffer und ohne verknüpften Layer übernommen wird. grün nie geprüft — (Docstring fehlt)
TestPruefmanager 14flowchart TD + classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
Testfall prüft Status geprüft TestPrintLogic
test_get_baufreigabe_page_dimensions_prefers_a4_for_small_extentPrüft, dass für einen kleinen Kartenausschnitt (Baufreigabe) das Format DIN A4 ohne Fallback gewählt wird. grün nie geprüft TestPrintLogic
test_get_baufreigabe_page_dimensions_escalates_to_a3Prüft, dass ein größerer Kartenausschnitt (Baufreigabe) auf DIN A3 eskaliert wird. grün nie geprüft TestPrintLogic
test_get_baufreigabe_page_dimensions_respects_a4_as_maximum_with_fallbackPrüft, dass bei auf DIN A4 begrenztem Höchstformat ein eigentlich A3-großer Ausschnitt mit Fallback-Kennzeichnung auf A4 reduziert wird. grün nie geprüft TestPrintLogic
test_get_baufreigabe_page_dimensions_falls_back_to_a3_for_oversize_extentPrüft, dass ein Ausschnitt, der auch DIN A3 übersteigt, mit Fallback-Kennzeichnung auf DIN A3 begrenzt wird. grün nie geprüft TestPrintLogic
test_select_standard_page_layout_uses_a4_as_minimum_sheetPrüft, dass für einen kleinen Ausschnitt trotz Höchstgrenze DIN A3 mindestens DIN A4 als Blattgröße gewählt wird. grün nie geprüft TestPrintLogic
test_select_standard_page_layout_limits_hauptkarte_to_a3Prüft, dass ein die Fläche voll ausnutzender Ausschnitt auf DIN A3 als größtes zulässiges Format begrenzt wird. grün nie geprüft TestPrintLogic
test_select_standard_page_layout_returns_none_if_a3_is_too_smallPrüft, dass kein Layout gewählt wird (None), wenn der Ausschnitt selbst DIN A3 als Höchstformat übersteigt. grün nie geprüft TestPrintLogic
test_get_standard_layout_dimensions_uses_a4_and_forces_fit_for_small_extentPrüft, dass für einen kleinen Ausschnitt DIN A4 gewählt und das Einpassen (force_fit) erzwungen wird. grün nie geprüft TestPrintLogic
test_get_standard_layout_dimensions_caps_endlosrolle_width_at_2000_mmPrüft, dass bei aktiviertem Formfaktor (Endlosrolle) die Seitenbreite auf die maximale Rollenbreite (2000 mm) begrenzt wird. grün nie geprüft TestPrintLogic
test_apply_standard_minimum_a4_fallback_for_small_pagePrüft, dass eine zu kleine Seite auf die A4-Mindestgröße angehoben und als erzwungen (forced) markiert wird. grün nie geprüft TestPrintLogic
test_apply_standard_minimum_a4_fallback_keeps_large_pagePrüft, dass eine bereits ausreichend große Seite (A3) unverändert bleibt und nicht als erzwungen markiert wird. grün nie geprüft TestPrintLogic
test_does_plot_fit_page_true_for_standard_a4Prüft, dass ein Kartenobjekt, das in eine DIN A4-Seite passt, als passend erkannt wird. grün nie geprüft TestPrintLogic
test_does_plot_fit_page_false_if_objects_exceed_pagePrüft, dass ein Kartenobjekt, das die Seitenbreite überschreitet, als nicht passend erkannt wird. grün nie geprüft TestPrintLogic
test_set_druckbereich_accepts_wie_kartenfensterPrüft, dass die Auswahl 'wie Kartenfenster' als Projektvariable 'druckbereich' gespeichert wird. grün nie geprüft TestPrintLogic
test_get_canvas_extent_returns_valid_extentPrüft, dass der aktuelle Kartenausschnitt des Kartenfensters unverändert zurückgegeben wird. grün nie geprüft TestPrintLogic
test_resolve_extent_uses_canvas_extent_without_bufferPrüft, dass bei Druckbereich 'wie Kartenfenster' der Kartenausschnitt ohne Puffer und ohne verknüpften Layer übernommen wird. grün nie geprüft TestPrintLogic
test_resolve_extent_uses_rectangle_extent_without_bufferPrüft, dass bei Druckbereich 'Rechteck' der gezeichnete Ausschnitt ohne Puffer und ohne verknüpften Layer übernommen wird. grün nie geprüft Tests für sn_basis/modules/pruef_ergebnis.py::ist_verfahrens_db_aktion/erlaubte_persistierung (Issue #65).
IstVerfahrensDbAktionTests 2ErlaubtePersistierungTests 2flowchart TD + root(["test_pruef_ergebnis.py"]) + class root rootnode + root --> g1["IstVerfahrensDbAktionTests (2)"] + class g1 groupnode + g1 --> t1("liefert_true_fuer_alle_verfahrens_db_aktionen") + g1 --> t2("liefert_false_fuer_andere_aktionen") + root --> g2["ErlaubtePersistierungTests (2)"] + class g2 groupnode + g2 --> t3("liefert_true_fuer_erzeugen_ueberschreiben_anhaengen") + g2 --> t4("liefert_false_fuer_ueberspringen_und_reines_existieren") + class t1 ok + class t2 ok + class t3 ok + class t4 ok + classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600; + 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;
Testfall prüft Status geprüft IstVerfahrensDbAktionTests
test_liefert_true_fuer_alle_verfahrens_db_aktionenPrüft, dass ist_verfahrens_db_aktion für alle vier Verfahrens-DB-Aktionscodes True liefert. grün nie geprüft IstVerfahrensDbAktionTests
test_liefert_false_fuer_andere_aktionenPrüft, dass ist_verfahrens_db_aktion für Nicht-Verfahrens-DB-Aktionen und ohne Aktion False liefert. grün nie geprüft ErlaubtePersistierungTests
test_liefert_true_fuer_erzeugen_ueberschreiben_anhaengenPrüft, dass erlaubte_persistierung für Erzeugen/Überschreiben/Anhängen True liefert. grün nie geprüft ErlaubtePersistierungTests
test_liefert_false_fuer_ueberspringen_und_reines_existierenPrüft, dass erlaubte_persistierung bei Überspringen und reinem 'datei_existiert' False liefert. grün nie geprüft — (Docstring fehlt)
TestPruefmanager 24flowchart TD root(["test_pruefmanager.py"]) class root rootnode - root --> g1["TestPruefmanager (14)"] + root --> g1["TestPruefmanager (24)"] class g1 groupnode g1 --> t1("ok") g1 --> t2("leereingabe_erlaubt_ja") @@ -553,6 +700,16 @@ g1 --> t12("datei_existiert_append") g1 --> t13("datei_existiert_cancel") g1 --> t14("datei_existiert_in_non_qgis_mode_returns_input") + g1 --> t15("verfahrensgebiet_layer_existiert_ergaenzen") + g1 --> t16("verfahrensgebiet_layer_existiert_abbrechen") + g1 --> t17("verfahrensgebiet_layer_existiert_in_non_qgis_mode_returns_input") + g1 --> t18("report_error_kritische_aktion_ruft_error_auf") + g1 --> t19("report_error_warn_aktion_ruft_warning_auf") + g1 --> t20("report_error_unbekannte_aktion_faellt_auf_warning_zurueck") + g1 --> t21("frage_ja_nein_im_qgis_modus_fragt_nutzer") + g1 --> t22("frage_ja_nein_ausserhalb_qgis_liefert_default_ohne_rueckfrage") + g1 --> t23("frage_text_im_qgis_modus_fragt_nutzer") + g1 --> t24("frage_text_ausserhalb_qgis_liefert_default_ohne_rueckfrage") class t1 ok class t2 ok class t3 ok @@ -567,11 +724,71 @@ class t12 ok class t13 ok class t14 ok + class t15 ok + class t16 ok + class t17 ok + class t18 ok + class t19 ok + class t20 ok + class t21 ok + class t22 ok + class t23 ok + class t24 ok classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600; 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;
Testfall prüft Status geprüft TestPruefmanager
test_okPrüft, dass ein bereits erfolgreiches Prüfergebnis ohne Nutzerinteraktion als 'ok' durchgereicht wird. grün geprüft am 2026-09-17 TestPruefmanager
test_leereingabe_erlaubt_jaPrüft, dass bei erlaubter leerer Eingabe eine Ja-Antwort des Nutzers die Entscheidung 'ok' liefert. grün geprüft am 2026-09-17 TestPruefmanager
test_leereingabe_erlaubt_neinPrüft, dass bei erlaubter leerer Eingabe eine Nein-Antwort die Aktion 'leereingabe_erlaubt' als abgelehnt bestehen lässt. grün geprüft am 2026-09-17 TestPruefmanager
test_standarddatei_vorschlagen_jaPrüft, dass eine Ja-Antwort auf den Vorschlag der Standarddatei die Entscheidung 'ok' mit dem Standardpfad als Kontext liefert. grün geprüft am 2026-09-17 TestPruefmanager
test_standarddatei_vorschlagen_neinPrüft, dass eine Nein-Antwort auf den Vorschlag der Standarddatei die Aktion 'standarddatei_vorschlagen' als abgelehnt bestehen lässt. grün geprüft am 2026-09-17 TestPruefmanager
test_temporaer_erlaubt_jaPrüft, dass eine Ja-Antwort auf die Rückfrage nach einer temporären Datei die Aktion 'temporaer_erzeugen' auslöst. grün geprüft am 2026-09-17 TestPruefmanager
test_temporaer_erlaubt_neinPrüft, dass eine Nein-Antwort auf die Rückfrage nach einer temporären Datei die Aktion 'temporaer_erlaubt' als abgelehnt bestehen lässt. grün geprüft am 2026-09-17 TestPruefmanager
test_layer_unsichtbar_jaPrüft, dass eine Ja-Antwort bei unsichtbarem Layer den Layer sichtbar schaltet und die Entscheidung 'ok' liefert. grün geprüft am 2026-09-17 TestPruefmanager
test_layer_unsichtbar_neinPrüft, dass eine Nein-Antwort bei unsichtbarem Layer die Aktion 'layer_unsichtbar' als abgelehnt bestehen lässt. grün geprüft am 2026-09-17 TestPruefmanager
test_unbekannte_aktionPrüft, dass eine unbekannte Aktion eine Warnung auslöst und unverarbeitet als Fehlschlag zurückgegeben wird. grün geprüft am 2026-09-17 TestPruefmanager
test_datei_existiert_overwritePrüft, dass die Nutzerwahl 'überschreiben' bei bestehender Datei zur Aktion 'datei_existiert_ueberschreiben' führt. grün geprüft am 2026-09-17 TestPruefmanager
test_datei_existiert_appendPrüft, dass die Nutzerwahl 'anhängen' bei bestehender Datei zur Aktion 'datei_existiert_anhaengen' führt. grün geprüft am 2026-09-17 TestPruefmanager
test_datei_existiert_cancelPrüft, dass die Nutzerwahl 'abbrechen' bei bestehender Datei zur Aktion 'datei_existiert_ueberspringen' führt. grün geprüft am 2026-09-17 TestPruefmanager
test_datei_existiert_in_non_qgis_mode_returns_inputPrüft, dass außerhalb des QGIS-Modus bei bestehender Datei keine Rückfrage erfolgt, sondern die ursprüngliche Aktion unentschieden zurückgegeben wird. grün geprüft am 2026-09-17 — (Docstring fehlt)
TestSettingsLogic 4flowchart TD + classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
Testfall prüft Status geprüft TestPruefmanager
test_okPrüft, dass ein bereits erfolgreiches Prüfergebnis ohne Nutzerinteraktion als 'ok' durchgereicht wird. grün geprüft am 2026-09-17 TestPruefmanager
test_leereingabe_erlaubt_jaPrüft, dass bei erlaubter leerer Eingabe eine Ja-Antwort des Nutzers die Entscheidung 'ok' liefert. grün geprüft am 2026-09-17 TestPruefmanager
test_leereingabe_erlaubt_neinPrüft, dass bei erlaubter leerer Eingabe eine Nein-Antwort die Aktion 'leereingabe_erlaubt' als abgelehnt bestehen lässt. grün geprüft am 2026-09-17 TestPruefmanager
test_standarddatei_vorschlagen_jaPrüft, dass eine Ja-Antwort auf den Vorschlag der Standarddatei die Entscheidung 'ok' mit dem Standardpfad als Kontext liefert. grün geprüft am 2026-09-17 TestPruefmanager
test_standarddatei_vorschlagen_neinPrüft, dass eine Nein-Antwort auf den Vorschlag der Standarddatei die Aktion 'standarddatei_vorschlagen' als abgelehnt bestehen lässt. grün geprüft am 2026-09-17 TestPruefmanager
test_temporaer_erlaubt_jaPrüft, dass eine Ja-Antwort auf die Rückfrage nach einer temporären Datei die Aktion 'temporaer_erzeugen' auslöst. grün geprüft am 2026-09-17 TestPruefmanager
test_temporaer_erlaubt_neinPrüft, dass eine Nein-Antwort auf die Rückfrage nach einer temporären Datei die Aktion 'temporaer_erlaubt' als abgelehnt bestehen lässt. grün geprüft am 2026-09-17 TestPruefmanager
test_layer_unsichtbar_jaPrüft, dass eine Ja-Antwort bei unsichtbarem Layer den Layer sichtbar schaltet und die Entscheidung 'ok' liefert. grün geprüft am 2026-09-17 TestPruefmanager
test_layer_unsichtbar_neinPrüft, dass eine Nein-Antwort bei unsichtbarem Layer die Aktion 'layer_unsichtbar' als abgelehnt bestehen lässt. grün geprüft am 2026-09-17 TestPruefmanager
test_unbekannte_aktionPrüft, dass eine unbekannte Aktion eine Warnung auslöst und unverarbeitet als Fehlschlag zurückgegeben wird. grün geprüft am 2026-09-17 TestPruefmanager
test_datei_existiert_overwritePrüft, dass die Nutzerwahl 'überschreiben' bei bestehender Datei zur Aktion 'datei_existiert_ueberschreiben' führt. grün geprüft am 2026-09-17 TestPruefmanager
test_datei_existiert_appendPrüft, dass die Nutzerwahl 'anhängen' bei bestehender Datei zur Aktion 'datei_existiert_anhaengen' führt. grün geprüft am 2026-09-17 TestPruefmanager
test_datei_existiert_cancelPrüft, dass die Nutzerwahl 'abbrechen' bei bestehender Datei zur Aktion 'datei_existiert_ueberspringen' führt. grün geprüft am 2026-09-17 TestPruefmanager
test_datei_existiert_in_non_qgis_mode_returns_inputPrüft, dass außerhalb des QGIS-Modus bei bestehender Datei keine Rückfrage erfolgt, sondern die ursprüngliche Aktion unentschieden zurückgegeben wird. grün geprüft am 2026-09-17 TestPruefmanager
test_verfahrensgebiet_layer_existiert_ergaenzenPrüft, dass die Nutzerwahl 'ergänzen' bei bestehendem Verfahrensgebiet zur Aktion 'verfahrensgebiet_ergaenzen' führt. grün nie geprüft TestPruefmanager
test_verfahrensgebiet_layer_existiert_abbrechenPrüft, dass die Nutzerwahl 'abbrechen' bei bestehendem Verfahrensgebiet ok=False mit Aktion 'verfahrensgebiet_abbrechen' liefert. grün nie geprüft TestPruefmanager
test_verfahrensgebiet_layer_existiert_in_non_qgis_mode_returns_inputPrüft, dass außerhalb des QGIS-Modus bei bestehendem Verfahrensgebiet keine Rückfrage erfolgt. grün nie geprüft TestPruefmanager
test_report_error_kritische_aktion_ruft_error_aufPrüft, dass eine kritische Aktion (z. B. 'netzwerkfehler') über error() gemeldet wird, nicht über warning(). grün nie geprüft TestPruefmanager
test_report_error_warn_aktion_ruft_warning_aufPrüft, dass eine Warn-Aktion (z. B. 'datei_nicht_gefunden') über warning() gemeldet wird, nicht über error(). grün nie geprüft TestPruefmanager
test_report_error_unbekannte_aktion_faellt_auf_warning_zurueckPrüft, dass eine nicht eingestufte Aktion als Fallback über warning() gemeldet wird. grün nie geprüft TestPruefmanager
test_frage_ja_nein_im_qgis_modus_fragt_nutzerPrüft, dass frage_ja_nein im QGIS-Modus den Nutzer fragt und dessen Antwort liefert. grün nie geprüft TestPruefmanager
test_frage_ja_nein_ausserhalb_qgis_liefert_default_ohne_rueckfragePrüft, dass frage_ja_nein außerhalb des QGIS-Modus den Default-Wert liefert, ohne den Nutzer zu fragen. grün nie geprüft TestPruefmanager
test_frage_text_im_qgis_modus_fragt_nutzerPrüft, dass frage_text im QGIS-Modus den Nutzer fragt und Text plus OK-Status liefert. grün nie geprüft TestPruefmanager
test_frage_text_ausserhalb_qgis_liefert_default_ohne_rueckfragePrüft, dass frage_text außerhalb des QGIS-Modus den Standardtext mit OK=True liefert, ohne den Nutzer zu fragen. grün nie geprüft Tests für sn_basis/functions/qgiscore_wrapper.py::polygon_zu_linie/layer_exists_in_gpkg (Issue #65).
PolygonZuLinieTests 7LayerExistsInGpkgTests 4flowchart TD + root(["test_qgiscore_wrapper_helpers.py"]) + class root rootnode + root --> g1["PolygonZuLinieTests (7)"] + class g1 groupnode + g1 --> t1("none_liefert_none") + g1 --> t2("leere_geometrie_liefert_none") + g1 --> t3("stufe1_nutzt_boundary_wenn_vorhanden") + g1 --> t4("stufe2_extrahiert_ringe_bei_einfachem_polygon") + g1 --> t5("stufe2_extrahiert_alle_ringe_bei_multipolygon") + g1 --> t6("stufe3_fallback_wenn_keine_ringe_extrahierbar") + g1 --> t7("alle_stufen_scheitern_liefert_none") + root --> g2["LayerExistsInGpkgTests (4)"] + class g2 groupnode + g2 --> t8("fehlende_datei_liefert_false") + g2 --> t9("leerer_pfad_oder_layername_liefert_false") + g2 --> t10("vorhandener_layer_liefert_true") + g2 --> t11("fehlender_layer_liefert_false") + class t1 ok + class t2 ok + class t3 ok + class t4 ok + class t5 ok + class t6 ok + class t7 ok + class t8 ok + class t9 ok + class t10 ok + class t11 ok + classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600; + 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;
Testfall prüft Status geprüft PolygonZuLinieTests
test_none_liefert_nonePrüft, dass polygon_zu_linie für None-Eingabe None liefert. grün nie geprüft PolygonZuLinieTests
test_leere_geometrie_liefert_nonePrüft, dass eine leere Geometrie None liefert. grün nie geprüft PolygonZuLinieTests
test_stufe1_nutzt_boundary_wenn_vorhandenPrüft, dass eine Geometrie mit boundary() (QGIS 3.x-Pfad) deren Ergebnis direkt liefert. grün nie geprüft PolygonZuLinieTests
test_stufe2_extrahiert_ringe_bei_einfachem_polygonPrüft, dass ohne boundary() die Ringe eines einfachen Polygons manuell extrahiert werden. grün nie geprüft PolygonZuLinieTests
test_stufe2_extrahiert_alle_ringe_bei_multipolygonPrüft, dass bei einem MultiPolygon die Ringe aller Teilpolygone extrahiert werden. grün nie geprüft PolygonZuLinieTests
test_stufe3_fallback_wenn_keine_ringe_extrahierbarPrüft, dass bei fehlgeschlagener Ringextraktion auf convertToType zurückgefallen wird. grün nie geprüft PolygonZuLinieTests
test_alle_stufen_scheitern_liefert_nonePrüft, dass polygon_zu_linie None liefert, wenn Ringextraktion und convertToType beide scheitern. grün nie geprüft LayerExistsInGpkgTests
test_fehlende_datei_liefert_falsePrüft, dass eine nicht vorhandene GPKG-Datei False liefert. grün nie geprüft LayerExistsInGpkgTests
test_leerer_pfad_oder_layername_liefert_falsePrüft, dass ein leerer Pfad oder Layername False liefert. grün nie geprüft LayerExistsInGpkgTests
test_vorhandener_layer_liefert_truePrüft, dass ein in gpkg_contents eingetragener Layername als vorhanden erkannt wird. grün nie geprüft LayerExistsInGpkgTests
test_fehlender_layer_liefert_falsePrüft, dass ein nicht in gpkg_contents eingetragener Layername als nicht vorhanden gilt. grün nie geprüft Tests für sn_basis/functions/qgisui_wrapper.py::add_layer_to_project (Issue #65).
AddLayerToProjectTests 4flowchart TD + root(["test_qgisui_wrapper_helpers.py"]) + class root rootnode + root --> g1["AddLayerToProjectTests (4)"] + class g1 groupnode + g1 --> t1("none_layer_liefert_false") + g1 --> t2("mock_modus_liefert_true_ohne_projektzugriff") + g1 --> t3("mit_qgis_fuegt_layer_dem_projekt_hinzu") + g1 --> t4("mit_qgis_fehler_liefert_false") + class t1 ok + class t2 ok + class t3 ok + class t4 ok + classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600; + 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;
Testfall prüft Status geprüft AddLayerToProjectTests
test_none_layer_liefert_falsePrüft, dass add_layer_to_project für einen fehlenden Layer (None) False liefert. grün nie geprüft AddLayerToProjectTests
test_mock_modus_liefert_true_ohne_projektzugriffPrüft, dass im Mock-Modus (ohne QGIS) ein gültiger Layer True liefert, ohne das Projekt anzufassen. grün nie geprüft AddLayerToProjectTests
test_mit_qgis_fuegt_layer_dem_projekt_hinzuPrüft, dass bei verfügbarem QGIS der Layer über QgsProject.instance().addMapLayer hinzugefügt wird. grün nie geprüft AddLayerToProjectTests
test_mit_qgis_fehler_liefert_falsePrüft, dass ein Fehler beim Hinzufügen zum Projekt abgefangen wird und False liefert. grün nie geprüft — (Docstring fehlt)
TestSettingsLogic 4flowchart TD root(["test_settings_logic.py"]) class root rootnode root --> g1["TestSettingsLogic (4)"] @@ -588,7 +805,30 @@ 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;
Testfall prüft Status geprüft TestSettingsLogic
test_loadPrüft, dass load() jede bekannte Projektvariable genau einmal über get_variable() liest. grün geprüft am 2026-09-17 TestSettingsLogic
test_savePrüft, dass save() nur bekannte Variablen-Keys speichert und unbekannte Keys ignoriert. grün geprüft am 2026-09-17 TestSettingsLogic
test_load_handles_partial_values_with_empty_fallbackPrüft, dass load() für jede Variable den (auch leeren) Wert von get_variable() unverändert übernimmt, selbst wenn nicht alle Variablen im Mock konfiguriert sind. grün geprüft am 2026-09-17 TestSettingsLogic
test_save_empty_string_value_is_persistedPrüft, dass save() einen leeren String als gültigen Wert speichert, statt ihn wie einen fehlenden Key zu behandeln. grün geprüft am 2026-09-17 — (Docstring fehlt)
TestStilpruefer 4flowchart TD + classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
Testfall prüft Status geprüft TestSettingsLogic
test_loadPrüft, dass load() jede bekannte Projektvariable genau einmal über get_variable() liest. grün geprüft am 2026-09-17 TestSettingsLogic
test_savePrüft, dass save() nur bekannte Variablen-Keys speichert und unbekannte Keys ignoriert. grün geprüft am 2026-09-17 TestSettingsLogic
test_load_handles_partial_values_with_empty_fallbackPrüft, dass load() für jede Variable den (auch leeren) Wert von get_variable() unverändert übernimmt, selbst wenn nicht alle Variablen im Mock konfiguriert sind. grün geprüft am 2026-09-17 TestSettingsLogic
test_save_empty_string_value_is_persistedPrüft, dass save() einen leeren String als gültigen Wert speichert, statt ihn wie einen fehlenden Key zu behandeln. grün geprüft am 2026-09-17 Tests für sn_basis/ui/tabs/settings_tab.py::save_data/load_data (Issue #65).
SaveDataTests 2LoadDataTests 4flowchart TD + root(["test_settings_tab.py"]) + class root rootnode + root --> g1["SaveDataTests (2)"] + class g1 groupnode + g1 --> t1("sammelt_text_und_combobox_werte_inklusive_landkreiskennzahl") + g1 --> t2("ohne_landkreis_dropdown_wird_keine_kennzahl_ergaenzt") + root --> g2["LoadDataTests (4)"] + class g2 groupnode + g2 --> t3("befuellt_textfelder_aus_gespeicherten_daten") + g2 --> t4("ohne_gespeicherten_wert_bleibt_textfeld_leer") + g2 --> t5("waehlt_combobox_eintrag_bei_bekanntem_namen") + g2 --> t6("unbekannter_gespeicherter_name_waehlt_ersten_eintrag") + class t1 ok + class t2 ok + class t3 ok + class t4 ok + class t5 ok + class t6 ok + classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600; + 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;
Testfall prüft Status geprüft SaveDataTests
test_sammelt_text_und_combobox_werte_inklusive_landkreiskennzahlPrüft, dass save_data Text- und Dropdown-Werte sammelt und die Landkreiskennzahl separat ergänzt. grün nie geprüft SaveDataTests
test_ohne_landkreis_dropdown_wird_keine_kennzahl_ergaenztPrüft, dass ohne Landkreis-Dropdown im Formular keine 'landkreis_kennzahl' ergänzt wird. grün nie geprüft LoadDataTests
test_befuellt_textfelder_aus_gespeicherten_datenPrüft, dass load_data ein Textfeld mit dem gespeicherten Wert befüllt. grün nie geprüft LoadDataTests
test_ohne_gespeicherten_wert_bleibt_textfeld_leerPrüft, dass load_data ohne gespeicherten Wert das Textfeld auf einen leeren Text setzt. grün nie geprüft LoadDataTests
test_waehlt_combobox_eintrag_bei_bekanntem_namenPrüft, dass load_data im Landkreis-Dropdown den gespeicherten Landkreisnamen auswählt. grün nie geprüft LoadDataTests
test_unbekannter_gespeicherter_name_waehlt_ersten_eintragPrüft, dass load_data bei einem nicht mehr vorhandenen Landkreisnamen auf den ersten Eintrag zurückfällt. grün nie geprüft — (Docstring fehlt)
TestStilpruefer 4flowchart TD root(["test_stilpruefer.py"]) class root rootnode root --> g1["TestStilpruefer (4)"] @@ -605,18 +845,34 @@ 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;
Testfall prüft Status geprüft TestStilpruefer
test_keine_datei_angegebenPrüft, dass eine leere Pfadangabe als 'ok' ohne Kontext akzeptiert wird (Stil ist optional). grün geprüft am 2026-09-17 TestStilpruefer
test_datei_existiert_mit_qmlPrüft, dass eine existierende .qml-Datei als 'stil_anwendbar' bestätigt wird. grün geprüft am 2026-09-17 TestStilpruefer
test_datei_existiert_falsche_endungPrüft, dass eine existierende Datei ohne .qml-Endung als 'falsche_endung' abgelehnt wird. grün geprüft am 2026-09-17 TestStilpruefer
test_datei_existiert_nichtPrüft, dass ein nicht existierender .qml-Pfad als 'datei_nicht_gefunden' abgelehnt wird. grün geprüft am 2026-09-17 Unit-Tests für sn_basis.functions.sys_wrapper.get_plugin_root().
TestGetPluginRoot 1flowchart TD + classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
Testfall prüft Status geprüft TestStilpruefer
test_keine_datei_angegebenPrüft, dass eine leere Pfadangabe als 'ok' ohne Kontext akzeptiert wird (Stil ist optional). grün geprüft am 2026-09-17 TestStilpruefer
test_datei_existiert_mit_qmlPrüft, dass eine existierende .qml-Datei als 'stil_anwendbar' bestätigt wird. grün geprüft am 2026-09-17 TestStilpruefer
test_datei_existiert_falsche_endungPrüft, dass eine existierende Datei ohne .qml-Endung als 'falsche_endung' abgelehnt wird. grün geprüft am 2026-09-17 TestStilpruefer
test_datei_existiert_nichtPrüft, dass ein nicht existierender .qml-Pfad als 'datei_nicht_gefunden' abgelehnt wird. grün geprüft am 2026-09-17 Unit-Tests für sn_basis.functions.sys_wrapper.get_plugin_root().
TestGetPluginRoot 1JoinPathTests 1EnsureDirTests 2GetattrSafeTests 2flowchart TD root(["test_sys_wrapper.py"]) class root rootnode root --> g1["TestGetPluginRoot (1)"] class g1 groupnode g1 --> t1("get_plugin_root_folgt_keiner_verzeichnisverknuepfung") + root --> g2["JoinPathTests (1)"] + class g2 groupnode + g2 --> t2("verbindet_mehrere_pfadbestandteile") + root --> g3["EnsureDirTests (2)"] + class g3 groupnode + g3 --> t3("legt_fehlendes_verzeichnis_inklusive_eltern_an") + g3 --> t4("vorhandenes_verzeichnis_wirft_keinen_fehler") + root --> g4["GetattrSafeTests (2)"] + class g4 groupnode + g4 --> t5("liefert_vorhandenes_attribut") + g4 --> t6("liefert_default_bei_fehlendem_attribut") class t1 ok + class t2 ok + class t3 ok + class t4 ok + class t5 ok + class t6 ok classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600; 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;
Testfall prüft Status geprüft TestGetPluginRoot
test_get_plugin_root_folgt_keiner_verzeichnisverknuepfungPrüft, dass get_plugin_root() bei einem über eine Verzeichnisverknüpfung (wie von link_qgis_profile.py angelegt) erreichten Modul den verlinkten Pfad liefert, statt zum echten Zielverzeichnis aufzulösen (Verfahrensgebiet #50). grün geprüft am 2026-09-17 Unit-Tests für `sn_basis.functions.text_wrapper`.
TestSanitizeBezeichner 7flowchart TD + classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
Testfall prüft Status geprüft TestGetPluginRoot
test_get_plugin_root_folgt_keiner_verzeichnisverknuepfungPrüft, dass get_plugin_root() bei einem über eine Verzeichnisverknüpfung (wie von link_qgis_profile.py angelegt) erreichten Modul den verlinkten Pfad liefert, statt zum echten Zielverzeichnis aufzulösen (Verfahrensgebiet #50). grün geprüft am 2026-09-17 JoinPathTests
test_verbindet_mehrere_pfadbestandteilePrüft, dass join_path mehrere Bestandteile OS-sicher zu einem Path zusammenfügt. grün nie geprüft EnsureDirTests
test_legt_fehlendes_verzeichnis_inklusive_eltern_anPrüft, dass ensure_dir ein fehlendes Verzeichnis samt Elternverzeichnissen anlegt. grün nie geprüft EnsureDirTests
test_vorhandenes_verzeichnis_wirft_keinen_fehlerPrüft, dass ensure_dir bei einem bereits vorhandenen Verzeichnis keinen Fehler wirft. grün nie geprüft GetattrSafeTests
test_liefert_vorhandenes_attributPrüft, dass getattr_safe ein vorhandenes Attribut liefert. grün nie geprüft GetattrSafeTests
test_liefert_default_bei_fehlendem_attributPrüft, dass getattr_safe bei fehlendem Attribut den Default-Wert liefert. grün nie geprüft Unit-Tests für `sn_basis.functions.text_wrapper`.
TestSanitizeBezeichner 7flowchart TD root(["test_text_wrapper.py"]) class root rootnode root --> g1["TestSanitizeBezeichner (7)"] @@ -660,7 +916,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;
Testfall prüft Status geprüft TestVariableWrapper
test_set_variable_project_noop_write_is_skippedPrüft, dass set_variable() im Projekt-Scope nicht schreibt, wenn der neue Wert dem bestehenden entspricht. grün nie geprüft TestVariableWrapper
test_set_variable_project_changed_value_is_writtenPrüft, dass set_variable() im Projekt-Scope bei geändertem Wert mit dem Präfix 'sn_' geschrieben wird. grün nie geprüft TestVariableWrapper
test_set_variable_global_writes_prefixed_namePrüft, dass set_variable() im globalen Scope den Variablennamen mit 'sn_' vorangestellt schreibt. grün nie geprüft TestVariableWrapper
test_get_variable_global_returns_empty_string_fallbackPrüft, dass get_variable() im globalen Scope für eine nicht gesetzte Variable einen leeren String liefert. grün nie geprüft TestVariableWrapper
test_get_variable_invalid_scope_raisesPrüft, dass get_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst. grün nie geprüft TestVariableWrapper
test_set_variable_invalid_scope_raisesPrüft, dass set_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst. grün nie geprüft — (Docstring fehlt)
TestVerfahrensgebietManager 5flowchart TD + classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
Testfall prüft Status geprüft TestVariableWrapper
test_set_variable_project_noop_write_is_skippedPrüft, dass set_variable() im Projekt-Scope nicht schreibt, wenn der neue Wert dem bestehenden entspricht. grün nie geprüft TestVariableWrapper
test_set_variable_project_changed_value_is_writtenPrüft, dass set_variable() im Projekt-Scope bei geändertem Wert mit dem Präfix 'sn_' geschrieben wird. grün nie geprüft TestVariableWrapper
test_set_variable_global_writes_prefixed_namePrüft, dass set_variable() im globalen Scope den Variablennamen mit 'sn_' vorangestellt schreibt. grün nie geprüft TestVariableWrapper
test_get_variable_global_returns_empty_string_fallbackPrüft, dass get_variable() im globalen Scope für eine nicht gesetzte Variable einen leeren String liefert. grün nie geprüft TestVariableWrapper
test_get_variable_invalid_scope_raisesPrüft, dass get_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst. grün nie geprüft TestVariableWrapper
test_set_variable_invalid_scope_raisesPrüft, dass set_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst. grün nie geprüft Tests für sn_basis/functions/verfahrensgebiet_manager.py (zentrale Layer-Verfolgung, Issue #65).
TestVerfahrensgebietManager 5OnHandlerTests 5ListenerSetupTests 3flowchart TD root(["test_verfahrensgebiet_manager.py"]) class root rootnode root --> g1["TestVerfahrensgebietManager (5)"] @@ -670,41 +926,50 @@ g1 --> t3("set_verfahrensgebiet_layer_id_writes_project_variable") g1 --> t4("update_without_layer_does_not_write_when_already_empty") g1 --> t5("update_with_layer_writes_variable") + root --> g2["OnHandlerTests (5)"] + class g2 groupnode + g2 --> t6("on_project_changed_ohne_layer_setzt_variable_leer") + g2 --> t7("on_project_changed_mit_layer_setzt_variable") + g2 --> t8("on_layers_added_findet_neuen_layer") + g2 --> t9("on_layer_removed_bei_aktuellem_layer_sucht_neu") + g2 --> t10("on_layer_removed_bei_anderem_layer_aendert_nichts") + root --> g3["ListenerSetupTests (3)"] + class g3 groupnode + g3 --> t11("setup_ohne_qgis_tut_nichts") + g3 --> t12("setup_verbindet_signale_und_ist_idempotent") + g3 --> t13("teardown_trennt_alle_signale_und_ist_idempotent") class t1 ok class t2 ok class t3 ok class t4 ok class t5 ok + class t6 ok + class t7 ok + class t8 ok + class t9 ok + class t10 ok + class t11 ok + class t12 ok + class t13 ok classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600; 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;
Testfall prüft Status geprüft TestVerfahrensgebietManager
test_get_verfahrensgebiet_layer_id_returns_valuePrüft, dass get_verfahrensgebiet_layer_id() die in der Projektvariable gespeicherte Layer-ID liefert. grün nie geprüft TestVerfahrensgebietManager
test_get_verfahrensgebiet_layer_id_returns_none_for_empty_valuePrüft, dass get_verfahrensgebiet_layer_id() bei leerer Projektvariable None statt eines leeren Strings liefert. grün nie geprüft TestVerfahrensgebietManager
test_set_verfahrensgebiet_layer_id_writes_project_variablePrüft, dass set_verfahrensgebiet_layer_id() die Layer-ID als Projektvariable 'verfahrensgebiet_layer' speichert. grün nie geprüft TestVerfahrensgebietManager
test_update_without_layer_does_not_write_when_already_emptyPrüft, dass ohne gefundenen Verfahrensgebiet-Layer keine Schreibaktion erfolgt, wenn die Variable bereits leer ist. grün nie geprüft TestVerfahrensgebietManager
test_update_with_layer_writes_variablePrüft, dass ein gefundener Verfahrensgebiet-Layer seine ID als Projektvariable speichert. grün nie geprüft
| Testfall | prüft | Status | geprüft |
|---|---|---|---|
| TestVerfahrensgebietManager test_get_verfahrensgebiet_layer_id_returns_value | Prüft, dass get_verfahrensgebiet_layer_id() die in der Projektvariable gespeicherte Layer-ID liefert. | grün | nie geprüft |
| TestVerfahrensgebietManager test_get_verfahrensgebiet_layer_id_returns_none_for_empty_value | Prüft, dass get_verfahrensgebiet_layer_id() bei leerer Projektvariable None statt eines leeren Strings liefert. | grün | nie geprüft |
| TestVerfahrensgebietManager test_set_verfahrensgebiet_layer_id_writes_project_variable | Prüft, dass set_verfahrensgebiet_layer_id() die Layer-ID als Projektvariable 'verfahrensgebiet_layer' speichert. | grün | nie geprüft |
| TestVerfahrensgebietManager test_update_without_layer_does_not_write_when_already_empty | Prüft, dass ohne gefundenen Verfahrensgebiet-Layer keine Schreibaktion erfolgt, wenn die Variable bereits leer ist. | grün | nie geprüft |
| TestVerfahrensgebietManager test_update_with_layer_writes_variable | Prüft, dass ein gefundener Verfahrensgebiet-Layer seine ID als Projektvariable speichert. | grün | nie geprüft |
| OnHandlerTests test_on_project_changed_ohne_layer_setzt_variable_leer | Prüft, dass _on_project_changed die Variable leert, wenn kein Verfahrensgebiet-Layer existiert. | grün | nie geprüft |
| OnHandlerTests test_on_project_changed_mit_layer_setzt_variable | Prüft, dass _on_project_changed die Layer-ID eines gefundenen Verfahrensgebiet-Layers übernimmt. | grün | nie geprüft |
| OnHandlerTests test_on_layers_added_findet_neuen_layer | Prüft, dass _on_layers_added nach neu hinzugefügten Layern sucht und die Variable aktualisiert. | grün | nie geprüft |
| OnHandlerTests test_on_layer_removed_bei_aktuellem_layer_sucht_neu | Prüft, dass das Entfernen des aktuell aktiven Verfahrensgebiet-Layers eine Neusuche auslöst. | grün | nie geprüft |
| OnHandlerTests test_on_layer_removed_bei_anderem_layer_aendert_nichts | Prüft, dass das Entfernen eines anderen Layers keine Neusuche auslöst. | grün | nie geprüft |
| ListenerSetupTests test_setup_ohne_qgis_tut_nichts | Prüft, dass setup_verfahrensgebiet_listener ohne QGIS keine Signale registriert. | grün | nie geprüft |
| ListenerSetupTests test_setup_verbindet_signale_und_ist_idempotent | Prüft, dass setup_verfahrensgebiet_listener die Projektsignale verbindet und ein zweiter Aufruf nichts doppelt registriert. | grün | nie geprüft |
| ListenerSetupTests test_teardown_trennt_alle_signale_und_ist_idempotent | Prüft, dass teardown_verfahrensgebiet_listener alle Signale trennt und mehrfacher Aufruf nicht fehlschlägt. | grün | nie geprüft |
Heuristik: Name kommt in keiner Testdatei des Pakets vor. Details siehe docs/tests/testkatalog.md.
| Datei | Funktion/Methode | Zeile |
|---|---|---|
| functions/dialog_wrapper.py | show_info_dialog | 42 |
| functions/dialog_wrapper.py | ask_text | 56 |
| functions/dialog_wrapper.py | ask_ergaenzen_entfernen_ersetzen_abbrechen | 131 |
| functions/dialog_wrapper.py | ask_detailpruefung_oder_vg_laden | 185 |
| functions/dialog_wrapper.py | ask_detailpruefung_oder_abbrechen | 235 |
| functions/dialog_wrapper.py | ProgressDialog.set_total | 328 |
| functions/dialog_wrapper.py | ProgressDialog.set_value | 336 |
| functions/dialog_wrapper.py | ProgressDialog.set_label | 348 |
| functions/dialog_wrapper.py | ProgressDialog.is_canceled | 357 |
| functions/dialog_wrapper.py | ProgressDialog.close | 366 |
| functions/dialog_wrapper.py | ProgressDialog.raise_to_front | 373 |
| functions/dialog_wrapper.py | create_progress_dialog | 390 |
| functions/landkreise.py | _lade_landkreise | 20 |
| functions/ly_existence_wrapper.py | layer_is_valid | 10 |
| functions/ly_existence_wrapper.py | layer_is_usable | 27 |
| functions/ly_style_wrapper.py | apply_style_from_path | 8 |
| functions/ly_style_wrapper.py | apply_style | 27 |
| functions/message_wrapper.py | _get_message_bar | 15 |
| functions/message_wrapper.py | push_message | 42 |
| functions/message_wrapper.py | info | 67 |
| functions/message_wrapper.py | error | 77 |
| functions/message_wrapper.py | success | 82 |
| functions/os_wrapper.py | normalize_path | 43 |
| functions/os_wrapper.py | get_home_dir | 53 |
| functions/os_wrapper.py | basename | 68 |
| functions/os_wrapper.py | is_case_sensitive_fs | 80 |
| functions/os_wrapper.py | path_suffix | 96 |
| functions/qgiscore_wrapper.py | layer_exists_in_gpkg | 1019 |
| functions/qgiscore_wrapper.py | polygon_zu_linie | 1058 |
| functions/qgisui_wrapper.py | get_main_window | 131 |
| functions/qgisui_wrapper.py | add_dock_widget | 149 |
| functions/qgisui_wrapper.py | remove_dock_widget | 156 |
| functions/qgisui_wrapper.py | find_dock_widgets | 163 |
| functions/qgisui_wrapper.py | add_menu | 178 |
| functions/qgisui_wrapper.py | remove_menu | 188 |
| functions/qgisui_wrapper.py | add_toolbar | 201 |
| functions/qgisui_wrapper.py | remove_toolbar | 208 |
| functions/qgisui_wrapper.py | add_layer_to_project | 217 |
| functions/qt_wrapper.py | exec_dialog | 60 |
| functions/qt_wrapper.py | debug_qt_status | 64 |
| functions/sys_wrapper.py | join_path | 36 |
| functions/sys_wrapper.py | ensure_dir | 56 |
| functions/sys_wrapper.py | getattr_safe | 102 |
| functions/verfahrensgebiet_manager.py | _on_layers_added | 109 |
| functions/verfahrensgebiet_manager.py | _on_layer_removed | 114 |
| functions/verfahrensgebiet_manager.py | _on_project_changed | 123 |
| functions/verfahrensgebiet_manager.py | setup_verfahrensgebiet_listener | 132 |
| functions/verfahrensgebiet_manager.py | teardown_verfahrensgebiet_listener | 176 |
| modules/DataGrabber.py | DataGrabber.set_source | 68 |
| modules/DataGrabber.py | DataGrabber._process_database_source | 309 |
| modules/DataGrabber.py | DataGrabber._process_service_source | 320 |
| modules/DataGrabber.py | DataGrabber._aggregate_results | 330 |
| modules/Dateipruefer.py | Dateipruefer.erkenne_dateityp | 77 |
| modules/Dateipruefer.py | Dateipruefer._pfad | 91 |
| modules/Dateipruefer.py | Dateipruefer._ist_leer | 98 |
| modules/Dateipruefer.py | Dateipruefer._ist_gueltiger_gpkg_pfad | 113 |
| modules/Dateipruefer.py | Dateipruefer._handle_leere_eingabe | 227 |
| modules/Datenschreiber.py | Datenschreiber._store_style_in_gpkg | 77 |
| modules/LayerLoader.py | LayerLoader._was_canceled | 42 |
| modules/LayerLoader.py | LayerLoader._process_events | 50 |
| modules/LayerLoader.py | LayerLoader.apply_style | 190 |
| modules/linkpruefer.py | Linkpruefer._pfad | 33 |
| modules/linkpruefer.py | Linkpruefer._ist_url | 41 |
| modules/linkpruefer.py | Linkpruefer._pruefe_url | 81 |
| modules/linkpruefer.py | Linkpruefer._pruefe_dateipfad | 115 |
| modules/print_logic.py | PrintLogic._get_plot_dimensions_mm | 1052 |
| modules/print_logic.py | PrintLogic._get_required_map_dimensions_mm | 1061 |
| modules/print_logic.py | PrintLogic.druckvorlage_anlegen | 1161 |
| modules/pruef_ergebnis.py | pruef_ergebnis.ist_verfahrens_db_aktion | 149 |
| modules/pruef_ergebnis.py | pruef_ergebnis.dateipfad | 167 |
| modules/pruef_ergebnis.py | pruef_ergebnis.erlaubte_persistierung | 181 |
| modules/Pruefmanager.py | Pruefmanager.report_error | 20 |
| modules/Pruefmanager.py | Pruefmanager.report_summary | 45 |
| modules/Pruefmanager.py | Pruefmanager.zeige_hinweis | 62 |
| modules/Pruefmanager.py | Pruefmanager.frage_ja_nein | 67 |
| modules/Pruefmanager.py | Pruefmanager.frage_text | 73 |
| modules/Pruefmanager.py | Pruefmanager._handle_datei_existiert | 83 |
| modules/Pruefmanager.py | Pruefmanager._handle_verfahrensgebiet_layer_existiert | 230 |
| modules/Pruefmanager.py | Pruefmanager._ask_use_or_replace_pufferlayer | 273 |
| ui/base_dockwidget.py | BaseDockWidget.closeEvent | 97 |
| ui/dockmanager.py | DockManager.show | 30 |
| ui/navigation.py | Navigation.init_ui | 33 |
| ui/navigation.py | Navigation.add_action | 68 |
| ui/navigation.py | Navigation.finalize_menu_and_toolbar | 81 |
| ui/tabs/print_tab.py | PrintTab._format_druckpuffer_label | 425 |
| ui/tabs/print_tab.py | PrintTab._on_vorlage_erstellen | 428 |
| ui/tabs/print_tab.py | PrintTab._disconnect_project_signals | 441 |
| ui/tabs/print_tab.py | PrintTab.cleanup | 459 |
| ui/tabs/print_tab.py | PrintTab._connect_project_signals | 464 |
| ui/tabs/print_tab.py | PrintTab._on_project_changed | 482 |
| ui/tabs/print_tab.py | PrintTab._toggle_atlas | 489 |
| ui/tabs/print_tab.py | PrintTab._restore_atlas_layer_selection | 495 |
| ui/tabs/print_tab.py | PrintTab._disconnect_theme_collection_signals | 519 |
| ui/tabs/print_tab.py | PrintTab._on_atlas_layer_changed | 612 |
| ui/tabs/print_tab.py | PrintTab._on_auswahl_as_atlas_clicked | 641 |
| ui/tabs/print_tab.py | PrintTab._populate_atlas_layer_combo | 679 |
| ui/tabs/settings_tab.py | SettingsTab._build_input | 118 |
| ui/tabs/settings_tab.py | SettingsTab.save_data | 130 |
| ui/tabs/settings_tab.py | SettingsTab.load_data | 149 |