diff --git a/docs/status/testpruefungen.json b/docs/status/testpruefungen.json index 33e4bed..49d2ff5 100644 --- a/docs/status/testpruefungen.json +++ b/docs/status/testpruefungen.json @@ -871,6 +871,74 @@ "datum": "2026-09-29", "hash": "460a969e39b6" }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.CreateBufferLayerTests.test_fehlender_source_layer_liefert_none": { + "datum": "2026-10-26", + "hash": "0437058555fc" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.CreateBufferLayerTests.test_ohne_qgis_liefert_none": { + "datum": "2026-10-26", + "hash": "aacec7c8fedc" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.CreateBufferLayerTests.test_source_layer_ohne_features_liefert_none": { + "datum": "2026-10-26", + "hash": "f6e8c26394be" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.CreateBufferLayerTests.test_source_layer_ohne_getfeatures_liefert_none": { + "datum": "2026-10-26", + "hash": "dd0b1dc5b32b" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.LayerExistsInGpkgTests.test_fehlende_datei_liefert_false": { + "datum": "2026-10-26", + "hash": "2e1e597d4c53" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.LayerExistsInGpkgTests.test_fehlender_layer_liefert_false": { + "datum": "2026-10-26", + "hash": "7e78d31b7278" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.LayerExistsInGpkgTests.test_leerer_pfad_oder_layername_liefert_false": { + "datum": "2026-10-26", + "hash": "991e06c4e4e2" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.LayerExistsInGpkgTests.test_vorhandener_layer_liefert_true": { + "datum": "2026-10-26", + "hash": "e53d9d9c2902" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.PolygonZuLinieTests.test_alle_stufen_scheitern_liefert_none": { + "datum": "2026-10-26", + "hash": "3fa874686038" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.PolygonZuLinieTests.test_leere_geometrie_liefert_none": { + "datum": "2026-10-26", + "hash": "65f99d410a16" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.PolygonZuLinieTests.test_none_liefert_none": { + "datum": "2026-10-26", + "hash": "8e1ee7e61fc0" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.PolygonZuLinieTests.test_stufe1_fehler_faellt_auf_stufe2_zurueck": { + "datum": "2026-10-26", + "hash": "00c286efe15d" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.PolygonZuLinieTests.test_stufe1_leerer_umring_faellt_auf_stufe2_zurueck": { + "datum": "2026-10-26", + "hash": "0fd937b2fc3b" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.PolygonZuLinieTests.test_stufe1_nutzt_boundary_wenn_vorhanden": { + "datum": "2026-10-26", + "hash": "0944f7ee4c4d" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.PolygonZuLinieTests.test_stufe2_extrahiert_alle_ringe_bei_multipolygon": { + "datum": "2026-10-26", + "hash": "69ed8f638d70" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.PolygonZuLinieTests.test_stufe2_extrahiert_ringe_bei_einfachem_polygon": { + "datum": "2026-10-26", + "hash": "8dab48ab2885" + }, + "sn_basis.tests.test_qgiscore_wrapper_helpers.PolygonZuLinieTests.test_stufe3_fallback_wenn_keine_ringe_extrahierbar": { + "datum": "2026-10-26", + "hash": "31469cdffcd8" + }, "sn_basis.tests.test_settings_logic.TestSettingsLogic.test_load": { "datum": "2026-09-17", "hash": "f14c558bc597" diff --git a/docs/tests/testkatalog.html b/docs/tests/testkatalog.html index 92687d2..cbfa61a 100644 --- a/docs/tests/testkatalog.html +++ b/docs/tests/testkatalog.html @@ -123,25 +123,25 @@

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 d8a74fea7cc6)
+
Quelle: docs/tests/testkatalog.md
Baseline: docs/status/testbaseline.json (SHA-256 aeabc946a7f3)
Prüf-Audit: docs/status/testpruefungen.json (SHA-256 b2525df27b91)
-
605Testfälle
-
562grün
+
689Testfälle
+
646grün
35rot (Baseline)
-
76%mit Docstring
-
38%aktuell geprüft
-
49Testdateien
-
35%ohne Testbezug
+
79%mit Docstring
+
35%aktuell geprüft
+
55Testdateien
+
34%ohne Testbezug
Verteilung je Paket
-
sn_basis32 Dateien · 353 Testfälle
-
sn_verfahrensgebiet12 Dateien · 208 Testfälle
+
sn_basis32 Dateien · 356 Testfälle
+
sn_verfahrensgebiet18 Dateien · 289 Testfälle
sn_plan415 Dateien · 44 Testfälle
@@ -159,11 +159,11 @@

sn_basis

Plattform-Plugin · Ordner Plugin_SN_Basis

- -
32Testdateien
353Testfälle
353grün
0rot (Baseline)
100%mit Docstring
64%geprüft
70ohne Testbezug
+
32Testdateien
356Testfälle
356grün
0rot (Baseline)
100%mit Docstring
69%geprüft
70ohne 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
@@ -1002,29 +1002,32 @@
   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
TestPruefmanager
test_ok
Prüft, dass ein bereits erfolgreiches Prüfergebnis ohne Nutzerinteraktion als 'ok' durchgereicht wird.grüngeprüft am 2026-09-17
TestPruefmanager
test_leereingabe_erlaubt_ja
Prüft, dass bei erlaubter leerer Eingabe eine Ja-Antwort des Nutzers die Entscheidung 'ok' liefert.grüngeprüft am 2026-09-17
TestPruefmanager
test_leereingabe_erlaubt_nein
Prüft, dass bei erlaubter leerer Eingabe eine Nein-Antwort die Aktion 'leereingabe_erlaubt' als abgelehnt bestehen lässt.grüngeprüft am 2026-09-17
TestPruefmanager
test_standarddatei_vorschlagen_ja
Prüft, dass eine Ja-Antwort auf den Vorschlag der Standarddatei die Entscheidung 'ok' mit dem Standardpfad als Kontext liefert.grüngeprüft am 2026-09-17
TestPruefmanager
test_standarddatei_vorschlagen_nein
Prüft, dass eine Nein-Antwort auf den Vorschlag der Standarddatei die Aktion 'standarddatei_vorschlagen' als abgelehnt bestehen lässt.grüngeprüft am 2026-09-17
TestPruefmanager
test_temporaer_erlaubt_ja
Prüft, dass eine Ja-Antwort auf die Rückfrage nach einer temporären Datei die Aktion 'temporaer_erzeugen' auslöst.grüngeprüft am 2026-09-17
TestPruefmanager
test_temporaer_erlaubt_nein
Prüft, dass eine Nein-Antwort auf die Rückfrage nach einer temporären Datei die Aktion 'temporaer_erlaubt' als abgelehnt bestehen lässt.grüngeprüft am 2026-09-17
TestPruefmanager
test_layer_unsichtbar_ja
Prüft, dass eine Ja-Antwort bei unsichtbarem Layer den Layer sichtbar schaltet und die Entscheidung 'ok' liefert.grüngeprüft am 2026-09-17
TestPruefmanager
test_layer_unsichtbar_nein
Prüft, dass eine Nein-Antwort bei unsichtbarem Layer die Aktion 'layer_unsichtbar' als abgelehnt bestehen lässt.grüngeprüft am 2026-09-17
TestPruefmanager
test_unbekannte_aktion
Prüft, dass eine unbekannte Aktion eine Warnung auslöst und unverarbeitet als Fehlschlag zurückgegeben wird.grüngeprüft am 2026-09-17
TestPruefmanager
test_datei_existiert_overwrite
Prüft, dass die Nutzerwahl 'überschreiben' bei bestehender Datei zur Aktion 'datei_existiert_ueberschreiben' führt.grüngeprüft am 2026-09-17
TestPruefmanager
test_datei_existiert_append
Prüft, dass die Nutzerwahl 'anhängen' bei bestehender Datei zur Aktion 'datei_existiert_anhaengen' führt.grüngeprüft am 2026-09-17
TestPruefmanager
test_datei_existiert_cancel
Prüft, dass die Nutzerwahl 'abbrechen' bei bestehender Datei zur Aktion 'datei_existiert_ueberspringen' führt.grüngeprüft am 2026-09-17
TestPruefmanager
test_datei_existiert_in_non_qgis_mode_returns_input
Prüft, dass außerhalb des QGIS-Modus bei bestehender Datei keine Rückfrage erfolgt, sondern die ursprüngliche Aktion unentschieden zurückgegeben wird.grüngeprüft am 2026-09-17
TestPruefmanager
test_verfahrensgebiet_layer_existiert_ergaenzen
Prüft, dass die Nutzerwahl 'ergänzen' bei bestehendem Verfahrensgebiet zur Aktion 'verfahrensgebiet_ergaenzen' führt.grüngeprüft am 2026-09-29
TestPruefmanager
test_verfahrensgebiet_layer_existiert_abbrechen
Prüft, dass die Nutzerwahl 'abbrechen' bei bestehendem Verfahrensgebiet ok=False mit Aktion 'verfahrensgebiet_abbrechen' liefert.grüngeprüft am 2026-09-29
TestPruefmanager
test_verfahrensgebiet_layer_existiert_entfernen
Prüft, dass die Nutzerwahl 'entfernen' bei bestehendem Verfahrensgebiet zur Aktion 'verfahrensgebiet_entfernen' führt.grüngeprüft am 2026-09-29
TestPruefmanager
test_verfahrensgebiet_layer_existiert_ersetzen
Prüft, dass die Nutzerwahl 'ersetzen' bei bestehendem Verfahrensgebiet zur Aktion 'verfahrensgebiet_ersetzen' führt.grüngeprüft am 2026-09-29
TestPruefmanager
test_verfahrensgebiet_layer_existiert_reicht_meldung_und_kontext_durch
Prüft, dass der Dialog die Meldung des Aufrufers zeigt und die Entscheidung den Kontext (bestehender Layer) weiterträgt.grüngeprüft am 2026-09-29
TestPruefmanager
test_verfahrensgebiet_layer_existiert_ohne_meldung_zeigt_standardtext
Prüft, dass der Dialog ohne Meldung des Aufrufers einen Standardtext mit der Frage nach dem weiteren Vorgehen zeigt.grüngeprüft am 2026-09-29
TestPruefmanager
test_verfahrensgebiet_layer_existiert_in_non_qgis_mode_returns_input
Prüft, dass außerhalb des QGIS-Modus bei bestehendem Verfahrensgebiet keine Rückfrage erfolgt.grüngeprüft am 2026-09-29
TestPruefmanager
test_report_error_kritische_aktion_ruft_error_auf
Prüft, dass eine kritische Aktion (z. B. 'netzwerkfehler') über error() gemeldet wird, nicht über warning().grüngeprüft am 2026-09-29
TestPruefmanager
test_report_error_warn_aktion_ruft_warning_auf
Prüft, dass eine Warn-Aktion (z. B. 'datei_nicht_gefunden') über warning() gemeldet wird, nicht über error().grüngeprüft am 2026-09-29
TestPruefmanager
test_report_error_unbekannte_aktion_faellt_auf_warning_zurueck
Prüft, dass eine nicht eingestufte Aktion als Fallback über warning() gemeldet wird.grüngeprüft am 2026-09-29
TestPruefmanager
test_frage_ja_nein_im_qgis_modus_fragt_nutzer
Prüft, dass frage_ja_nein im QGIS-Modus den Nutzer fragt und dessen Antwort liefert.grüngeprüft am 2026-09-29
TestPruefmanager
test_frage_ja_nein_ausserhalb_qgis_liefert_default_ohne_rueckfrage
Prüft, dass frage_ja_nein außerhalb des QGIS-Modus den Default-Wert liefert, ohne den Nutzer zu fragen.grüngeprüft am 2026-09-29
TestPruefmanager
test_frage_text_im_qgis_modus_fragt_nutzer
Prüft, dass frage_text im QGIS-Modus den Nutzer fragt und Text plus OK-Status liefert.grüngeprüft am 2026-09-29
TestPruefmanager
test_frage_text_ausserhalb_qgis_liefert_default_ohne_rueckfrage
Prüft, dass frage_text außerhalb des QGIS-Modus den Standardtext mit OK=True liefert, ohne den Nutzer zu fragen.grüngeprüft am 2026-09-29

Tests für sn_basis/functions/qgiscore_wrapper.py::polygon_zu_linie/layer_exists_in_gpkg/create_buffer_layer (Issue #65/#67).

PolygonZuLinieTests 7LayerExistsInGpkgTests 4CreateBufferLayerTests 3
flowchart TD
+  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestPruefmanager
test_ok
Prüft, dass ein bereits erfolgreiches Prüfergebnis ohne Nutzerinteraktion als 'ok' durchgereicht wird.grüngeprüft am 2026-09-17
TestPruefmanager
test_leereingabe_erlaubt_ja
Prüft, dass bei erlaubter leerer Eingabe eine Ja-Antwort des Nutzers die Entscheidung 'ok' liefert.grüngeprüft am 2026-09-17
TestPruefmanager
test_leereingabe_erlaubt_nein
Prüft, dass bei erlaubter leerer Eingabe eine Nein-Antwort die Aktion 'leereingabe_erlaubt' als abgelehnt bestehen lässt.grüngeprüft am 2026-09-17
TestPruefmanager
test_standarddatei_vorschlagen_ja
Prüft, dass eine Ja-Antwort auf den Vorschlag der Standarddatei die Entscheidung 'ok' mit dem Standardpfad als Kontext liefert.grüngeprüft am 2026-09-17
TestPruefmanager
test_standarddatei_vorschlagen_nein
Prüft, dass eine Nein-Antwort auf den Vorschlag der Standarddatei die Aktion 'standarddatei_vorschlagen' als abgelehnt bestehen lässt.grüngeprüft am 2026-09-17
TestPruefmanager
test_temporaer_erlaubt_ja
Prüft, dass eine Ja-Antwort auf die Rückfrage nach einer temporären Datei die Aktion 'temporaer_erzeugen' auslöst.grüngeprüft am 2026-09-17
TestPruefmanager
test_temporaer_erlaubt_nein
Prüft, dass eine Nein-Antwort auf die Rückfrage nach einer temporären Datei die Aktion 'temporaer_erlaubt' als abgelehnt bestehen lässt.grüngeprüft am 2026-09-17
TestPruefmanager
test_layer_unsichtbar_ja
Prüft, dass eine Ja-Antwort bei unsichtbarem Layer den Layer sichtbar schaltet und die Entscheidung 'ok' liefert.grüngeprüft am 2026-09-17
TestPruefmanager
test_layer_unsichtbar_nein
Prüft, dass eine Nein-Antwort bei unsichtbarem Layer die Aktion 'layer_unsichtbar' als abgelehnt bestehen lässt.grüngeprüft am 2026-09-17
TestPruefmanager
test_unbekannte_aktion
Prüft, dass eine unbekannte Aktion eine Warnung auslöst und unverarbeitet als Fehlschlag zurückgegeben wird.grüngeprüft am 2026-09-17
TestPruefmanager
test_datei_existiert_overwrite
Prüft, dass die Nutzerwahl 'überschreiben' bei bestehender Datei zur Aktion 'datei_existiert_ueberschreiben' führt.grüngeprüft am 2026-09-17
TestPruefmanager
test_datei_existiert_append
Prüft, dass die Nutzerwahl 'anhängen' bei bestehender Datei zur Aktion 'datei_existiert_anhaengen' führt.grüngeprüft am 2026-09-17
TestPruefmanager
test_datei_existiert_cancel
Prüft, dass die Nutzerwahl 'abbrechen' bei bestehender Datei zur Aktion 'datei_existiert_ueberspringen' führt.grüngeprüft am 2026-09-17
TestPruefmanager
test_datei_existiert_in_non_qgis_mode_returns_input
Prüft, dass außerhalb des QGIS-Modus bei bestehender Datei keine Rückfrage erfolgt, sondern die ursprüngliche Aktion unentschieden zurückgegeben wird.grüngeprüft am 2026-09-17
TestPruefmanager
test_verfahrensgebiet_layer_existiert_ergaenzen
Prüft, dass die Nutzerwahl 'ergänzen' bei bestehendem Verfahrensgebiet zur Aktion 'verfahrensgebiet_ergaenzen' führt.grüngeprüft am 2026-09-29
TestPruefmanager
test_verfahrensgebiet_layer_existiert_abbrechen
Prüft, dass die Nutzerwahl 'abbrechen' bei bestehendem Verfahrensgebiet ok=False mit Aktion 'verfahrensgebiet_abbrechen' liefert.grüngeprüft am 2026-09-29
TestPruefmanager
test_verfahrensgebiet_layer_existiert_entfernen
Prüft, dass die Nutzerwahl 'entfernen' bei bestehendem Verfahrensgebiet zur Aktion 'verfahrensgebiet_entfernen' führt.grüngeprüft am 2026-09-29
TestPruefmanager
test_verfahrensgebiet_layer_existiert_ersetzen
Prüft, dass die Nutzerwahl 'ersetzen' bei bestehendem Verfahrensgebiet zur Aktion 'verfahrensgebiet_ersetzen' führt.grüngeprüft am 2026-09-29
TestPruefmanager
test_verfahrensgebiet_layer_existiert_reicht_meldung_und_kontext_durch
Prüft, dass der Dialog die Meldung des Aufrufers zeigt und die Entscheidung den Kontext (bestehender Layer) weiterträgt.grüngeprüft am 2026-09-29
TestPruefmanager
test_verfahrensgebiet_layer_existiert_ohne_meldung_zeigt_standardtext
Prüft, dass der Dialog ohne Meldung des Aufrufers einen Standardtext mit der Frage nach dem weiteren Vorgehen zeigt.grüngeprüft am 2026-09-29
TestPruefmanager
test_verfahrensgebiet_layer_existiert_in_non_qgis_mode_returns_input
Prüft, dass außerhalb des QGIS-Modus bei bestehendem Verfahrensgebiet keine Rückfrage erfolgt.grüngeprüft am 2026-09-29
TestPruefmanager
test_report_error_kritische_aktion_ruft_error_auf
Prüft, dass eine kritische Aktion (z. B. 'netzwerkfehler') über error() gemeldet wird, nicht über warning().grüngeprüft am 2026-09-29
TestPruefmanager
test_report_error_warn_aktion_ruft_warning_auf
Prüft, dass eine Warn-Aktion (z. B. 'datei_nicht_gefunden') über warning() gemeldet wird, nicht über error().grüngeprüft am 2026-09-29
TestPruefmanager
test_report_error_unbekannte_aktion_faellt_auf_warning_zurueck
Prüft, dass eine nicht eingestufte Aktion als Fallback über warning() gemeldet wird.grüngeprüft am 2026-09-29
TestPruefmanager
test_frage_ja_nein_im_qgis_modus_fragt_nutzer
Prüft, dass frage_ja_nein im QGIS-Modus den Nutzer fragt und dessen Antwort liefert.grüngeprüft am 2026-09-29
TestPruefmanager
test_frage_ja_nein_ausserhalb_qgis_liefert_default_ohne_rueckfrage
Prüft, dass frage_ja_nein außerhalb des QGIS-Modus den Default-Wert liefert, ohne den Nutzer zu fragen.grüngeprüft am 2026-09-29
TestPruefmanager
test_frage_text_im_qgis_modus_fragt_nutzer
Prüft, dass frage_text im QGIS-Modus den Nutzer fragt und Text plus OK-Status liefert.grüngeprüft am 2026-09-29
TestPruefmanager
test_frage_text_ausserhalb_qgis_liefert_default_ohne_rueckfrage
Prüft, dass frage_text außerhalb des QGIS-Modus den Standardtext mit OK=True liefert, ohne den Nutzer zu fragen.grüngeprüft am 2026-09-29

Tests für sn_basis/functions/qgiscore_wrapper.py::polygon_zu_linie/layer_exists_in_gpkg/create_buffer_layer (Issue #65/#67).

PolygonZuLinieTests 9LayerExistsInGpkgTests 4CreateBufferLayerTests 4
flowchart TD
   root(["test_qgiscore_wrapper_helpers.py"])
   class root rootnode
-  root --> g1["PolygonZuLinieTests (7)"]
+  root --> g1["PolygonZuLinieTests (9)"]
   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")
+  g1 --> t6("stufe1_leerer_umring_faellt_auf_stufe2_zurueck")
+  g1 --> t7("stufe1_fehler_faellt_auf_stufe2_zurueck")
+  g1 --> t8("stufe3_fallback_wenn_keine_ringe_extrahierbar")
+  g1 --> t9("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")
-  root --> g3["CreateBufferLayerTests (3)"]
+  g2 --> t10("fehlende_datei_liefert_false")
+  g2 --> t11("leerer_pfad_oder_layername_liefert_false")
+  g2 --> t12("vorhandener_layer_liefert_true")
+  g2 --> t13("fehlender_layer_liefert_false")
+  root --> g3["CreateBufferLayerTests (4)"]
   class g3 groupnode
-  g3 --> t12("ohne_qgis_liefert_none")
-  g3 --> t13("fehlender_source_layer_liefert_none")
-  g3 --> t14("source_layer_ohne_getfeatures_liefert_none")
+  g3 --> t14("ohne_qgis_liefert_none")
+  g3 --> t15("fehlender_source_layer_liefert_none")
+  g3 --> t16("source_layer_ohne_getfeatures_liefert_none")
+  g3 --> t17("source_layer_ohne_features_liefert_none")
   class t1 ok
   class t2 ok
   class t3 ok
@@ -1039,11 +1042,14 @@
   class t12 ok
   class t13 ok
   class t14 ok
+  class t15 ok
+  class t16 ok
+  class t17 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;
TestfallprüftStatusgeprüft
PolygonZuLinieTests
test_none_liefert_none
Prüft, dass polygon_zu_linie für None-Eingabe None liefert.grünnie geprüft
PolygonZuLinieTests
test_leere_geometrie_liefert_none
Prüft, dass eine leere Geometrie None liefert.grünnie geprüft
PolygonZuLinieTests
test_stufe1_nutzt_boundary_wenn_vorhanden
Prüft, dass eine Geometrie mit boundary() (QGIS 3.x-Pfad) deren Ergebnis direkt liefert.grünnie geprüft
PolygonZuLinieTests
test_stufe2_extrahiert_ringe_bei_einfachem_polygon
Prüft, dass ohne boundary() die Ringe eines einfachen Polygons manuell extrahiert werden.grünnie geprüft
PolygonZuLinieTests
test_stufe2_extrahiert_alle_ringe_bei_multipolygon
Prüft, dass bei einem MultiPolygon die Ringe aller Teilpolygone extrahiert werden.grünnie geprüft
PolygonZuLinieTests
test_stufe3_fallback_wenn_keine_ringe_extrahierbar
Prüft, dass bei fehlgeschlagener Ringextraktion auf convertToType zurückgefallen wird.grünnie geprüft
PolygonZuLinieTests
test_alle_stufen_scheitern_liefert_none
Prüft, dass polygon_zu_linie None liefert, wenn Ringextraktion und convertToType beide scheitern.grünnie geprüft
LayerExistsInGpkgTests
test_fehlende_datei_liefert_false
Prüft, dass eine nicht vorhandene GPKG-Datei False liefert.grünnie geprüft
LayerExistsInGpkgTests
test_leerer_pfad_oder_layername_liefert_false
Prüft, dass ein leerer Pfad oder Layername False liefert.grünnie geprüft
LayerExistsInGpkgTests
test_vorhandener_layer_liefert_true
Prüft, dass ein in gpkg_contents eingetragener Layername als vorhanden erkannt wird.grünnie geprüft
LayerExistsInGpkgTests
test_fehlender_layer_liefert_false
Prüft, dass ein nicht in gpkg_contents eingetragener Layername als nicht vorhanden gilt.grünnie geprüft
CreateBufferLayerTests
test_ohne_qgis_liefert_none
Prüft, dass create_buffer_layer ohne verfügbares QGIS None liefert.grünnie geprüft
CreateBufferLayerTests
test_fehlender_source_layer_liefert_none
Prüft, dass ein fehlender Quelllayer (None) None liefert, auch wenn QGIS verfügbar wäre.grünnie geprüft
CreateBufferLayerTests
test_source_layer_ohne_getfeatures_liefert_none
Prüft, dass ein Quelllayer ohne getFeatures()-Methode None liefert.grünnie geprüft

Tests für sn_basis/functions/qgisui_wrapper.py::add_layer_to_project/find_dock_widgets/add_menu/remove_menu (Issue #65/#67).

AddLayerToProjectTests 4FindDockWidgetsTests 3AddRemoveMenuTests 5
flowchart TD
+  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
PolygonZuLinieTests
test_none_liefert_none
Prüft, dass polygon_zu_linie für None-Eingabe None liefert.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_leere_geometrie_liefert_none
Prüft, dass eine leere Geometrie None liefert.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe1_nutzt_boundary_wenn_vorhanden
Prüft, dass eine Geometrie mit boundary() (QGIS 3.x-Pfad) deren Ergebnis direkt liefert.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe2_extrahiert_ringe_bei_einfachem_polygon
Prüft, dass ohne boundary() die Ringe eines einfachen Polygons manuell extrahiert werden.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe2_extrahiert_alle_ringe_bei_multipolygon
Prüft, dass bei einem MultiPolygon die Ringe aller Teilpolygone extrahiert werden.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe1_leerer_umring_faellt_auf_stufe2_zurueck
Prüft, dass ein leeres Ergebnis von boundary() auf die manuelle Ringextraktion zurückfällt.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe1_fehler_faellt_auf_stufe2_zurueck
Prüft, dass ein Fehler in boundary() auf die manuelle Ringextraktion zurückfällt.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe3_fallback_wenn_keine_ringe_extrahierbar
Prüft, dass bei fehlgeschlagener Ringextraktion auf convertToType(1, True) zurückgefallen wird.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_alle_stufen_scheitern_liefert_none
Prüft, dass polygon_zu_linie None liefert, wenn Ringextraktion und convertToType beide scheitern.grüngeprüft am 2026-10-26
LayerExistsInGpkgTests
test_fehlende_datei_liefert_false
Prüft, dass eine nicht vorhandene GPKG-Datei False liefert.grüngeprüft am 2026-10-26
LayerExistsInGpkgTests
test_leerer_pfad_oder_layername_liefert_false
Prüft, dass ein leerer Pfad oder Layername False liefert.grüngeprüft am 2026-10-26
LayerExistsInGpkgTests
test_vorhandener_layer_liefert_true
Prüft, dass ein in gpkg_contents eingetragener Layername als vorhanden erkannt wird.grüngeprüft am 2026-10-26
LayerExistsInGpkgTests
test_fehlender_layer_liefert_false
Prüft, dass ein nicht in gpkg_contents eingetragener Layername als nicht vorhanden gilt.grüngeprüft am 2026-10-26
CreateBufferLayerTests
test_ohne_qgis_liefert_none
Prüft, dass create_buffer_layer ohne verfügbares QGIS None liefert.grüngeprüft am 2026-10-26
CreateBufferLayerTests
test_fehlender_source_layer_liefert_none
Prüft, dass ein fehlender Quelllayer (None) None liefert, auch wenn QGIS verfügbar wäre.grüngeprüft am 2026-10-26
CreateBufferLayerTests
test_source_layer_ohne_getfeatures_liefert_none
Prüft, dass ein Quelllayer ohne getFeatures()-Methode None liefert.grüngeprüft am 2026-10-26
CreateBufferLayerTests
test_source_layer_ohne_features_liefert_none
Prüft, dass ein Quelllayer ohne Features None liefert, statt einen leeren Pufferlayer anzulegen.grüngeprüft am 2026-10-26

Tests für sn_basis/functions/qgisui_wrapper.py::add_layer_to_project/find_dock_widgets/add_menu/remove_menu (Issue #65/#67).

AddLayerToProjectTests 4FindDockWidgetsTests 3AddRemoveMenuTests 5
flowchart TD
   root(["test_qgisui_wrapper_helpers.py"])
   class root rootnode
   root --> g1["AddLayerToProjectTests (4)"]
@@ -1264,11 +1270,11 @@
       

sn_verfahrensgebiet

Fachplugin · Ordner Plugin_SN_Verfahrensgebiet

- -
12Testdateien
208Testfälle
166grün
34rot (Baseline)
51%mit Docstring
0%geprüft
34ohne Testbezug
+
18Testdateien
289Testfälle
247grün
34rot (Baseline)
65%mit Docstring
0%geprüft
51ohne Testbezug

Unit-Tests für `sn_verfahrensgebiet.functions.beteiligung_pruefung`.

TestBaueFlurstueckCsv 12TestBaueFlurstueckCsvListe 1TestHoleVerfahrensgebietLayer 3TestFordereManuellesLadenAn 2TestTry3Bootstrap 1TestBeteiligungPruefenDispatch 2TestLadeBeteiligungCsv 4
flowchart TD
   root(["test_beteiligung_pruefung.py"])
   class root rootnode
@@ -1353,7 +1359,197 @@
   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
TestDockWidget
test_init_tabs_with_services_injects_available_services
— (Docstring fehlt)grünnie geprüft
TestDockWidget
test_init_tabs_with_services_reports_errors
— (Docstring fehlt)grünnie geprüft

Unit-Tests für das flurstueck_alkis-Modul.

TestFlurstueckAlkis 11TestFlurstueckAlkisAnhaengenDedup 3
flowchart TD
+  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestDockWidget
test_init_tabs_with_services_injects_available_services
— (Docstring fehlt)grünnie geprüft
TestDockWidget
test_init_tabs_with_services_reports_errors
— (Docstring fehlt)grünnie geprüft

Tests für das Anzeigefenster des Eigentümer-Datenabgleichs (#56).

TestAnzeigetext 6TestFensterOeffnen 3
flowchart TD
+  root(["test_eigentuemer_anzeige.py"])
+  class root rootnode
+  root --> g1["TestAnzeigetext (6)"]
+  class g1 groupnode
+  g1 --> t1("name_anschrift_email")
+  g1 --> t2("keine_internen_angaben")
+  g1 --> t3("fehlende_email_wird_genannt")
+  g1 --> t4("werte_werden_maskiert")
+  g1 --> t5("mehrere_eintraege_getrennt")
+  g1 --> t6("leer_nur_platzhalter")
+  root --> g2["TestFensterOeffnen (3)"]
+  class g2 groupnode
+  g2 --> t7("normales_fenster_in_standardgroesse")
+  g2 --> t8("gemerkte_lage_wird_wiederhergestellt")
+  g2 --> t9("unbrauchbare_lage_ergibt_standardgroesse")
+  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
+  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;
TestfallprüftStatusgeprüft
TestAnzeigetext
test_name_anschrift_email
Prüft, dass die Anzeige Name mit Anrede und Titel, die mehrzeilige Anschrift mit Ortsteil und die E-Mail zeigt.grünnie geprüft
TestAnzeigetext
test_keine_internen_angaben
Prüft, dass der Eigentümer weder Konten, Personen-IDs, Rechtsperson-Wert noch das Kennzeichen „verstorben“ sieht.grünnie geprüft
TestAnzeigetext
test_fehlende_email_wird_genannt
Prüft, dass eine fehlende E-Mail ausdrücklich als „keine angegeben“ erscheint.grünnie geprüft
TestAnzeigetext
test_werte_werden_maskiert
Prüft, dass Sonderzeichen aus den Daten maskiert werden und kein HTML einschleusen.grünnie geprüft
TestAnzeigetext
test_mehrere_eintraege_getrennt
Prüft, dass mehrere Einträge untereinander, durch eine Linie getrennt, erscheinen.grünnie geprüft
TestAnzeigetext
test_leer_nur_platzhalter
Prüft, dass die leere Anzeige nur den neutralen Platzhalter zeigt.grünnie geprüft
TestFensterOeffnen
test_normales_fenster_in_standardgroesse
Prüft, dass das Anzeigefenster ohne gemerkte Lage als normales Fenster mit Rahmen in Standardgröße öffnet, nie im Vollbild.grünnie geprüft
TestFensterOeffnen
test_gemerkte_lage_wird_wiederhergestellt
Prüft, dass eine gemerkte Größe und Lage der letzten Sitzung wiederhergestellt wird.grünnie geprüft
TestFensterOeffnen
test_unbrauchbare_lage_ergibt_standardgroesse
Prüft, dass eine nicht wiederherstellbare Lage auf die Standardgröße zurückfällt.grünnie geprüft

Tests für die Korrekturen beim Eigentümer-Datenabgleich (#56).

TestAenderungen 4TestKorrekturPfad 3TestSchreiben 5
flowchart TD
+  root(["test_eigentuemer_korrektur.py"])
+  class root rootnode
+  root --> g1["TestAenderungen (4)"]
+  class g1 groupnode
+  g1 --> t1("feldwerte")
+  g1 --> t2("nur_echte_aenderungen")
+  g1 --> t3("feld_leeren_ist_aenderung")
+  g1 --> t4("wende_an")
+  root --> g2["TestKorrekturPfad (3)"]
+  class g2 groupnode
+  g2 --> t5("textdatei_provider")
+  g2 --> t6("ogr_provider")
+  g2 --> t7("keine_csv")
+  root --> g3["TestSchreiben (5)"]
+  class g3 groupnode
+  g3 --> t8("neue_datei_mit_kopfzeile_und_bom")
+  g3 --> t9("anhaengen_ohne_zweite_kopfzeile")
+  g3 --> t10("ohne_aenderung_keine_datei")
+  g3 --> t11("schreibfehler_wird_weitergereicht")
+  g3 --> t12("schreibt_nichts_auf_die_konsole")
+  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;
TestfallprüftStatusgeprüft
TestAenderungen
test_feldwerte
Prüft, dass alle korrigierbaren Felder vorbelegt werden, mehrere E-Mails durch Komma getrennt.grünnie geprüft
TestAenderungen
test_nur_echte_aenderungen
Prüft, dass nur geänderte Felder zählen und Leerraum am Rand oder doppelte Leerzeichen keine Änderung sind.grünnie geprüft
TestAenderungen
test_feld_leeren_ist_aenderung
Prüft, dass das Leeren eines Feldes als Änderung zählt.grünnie geprüft
TestAenderungen
test_wende_an
Prüft, dass die Änderungen im angezeigten Eintrag landen und E-Mails wieder getrennt werden; Konten bleiben.grünnie geprüft
TestKorrekturPfad
test_textdatei_provider
Prüft, dass aus der Quelle eines Textdatei-Layers (file-URI, Leerzeichen kodiert) der Pfad neben der CSV wird.grünnie geprüft
TestKorrekturPfad
test_ogr_provider
Prüft, dass auch eine OGR-Quelle mit Layernamen den Pfad neben der CSV ergibt.grünnie geprüft
TestKorrekturPfad
test_keine_csv
Prüft, dass für Quellen ohne CSV-Datei kein Pfad vorgeschlagen wird.grünnie geprüft
TestSchreiben
test_neue_datei_mit_kopfzeile_und_bom
Prüft, dass eine neue Korrektur-CSV mit BOM, Kopfzeile und je Änderung einer Zeile mit Exportspaltennamen entsteht.grünnie geprüft
TestSchreiben
test_anhaengen_ohne_zweite_kopfzeile
Prüft, dass weitere Korrekturen angehängt werden, ohne Kopfzeile oder BOM zu wiederholen.grünnie geprüft
TestSchreiben
test_ohne_aenderung_keine_datei
Prüft, dass ohne Änderung keine Datei angelegt wird.grünnie geprüft
TestSchreiben
test_schreibfehler_wird_weitergereicht
Prüft, dass ein nicht schreibbarer Pfad als OSError beim Aufrufer ankommt.grünnie geprüft
TestSchreiben
test_schreibt_nichts_auf_die_konsole
Prüft, dass das Festhalten von Korrekturen keine Personendaten auf die Konsole schreibt (Datenschutz).grünnie geprüft

Tests für die Eigentümersuche im Serienbriefexport (#56).

TestLayererkennung 2TestSuche 10TestAnzeigeformen 1
flowchart TD
+  root(["test_eigentuemer_suche.py"])
+  class root rootnode
+  root --> g1["TestLayererkennung (2)"]
+  class g1 groupnode
+  g1 --> t1("layer_mit_name_und_vorname_ist_eigentuemerlayer")
+  g1 --> t2("eigentuemerlayer_im_projekt")
+  root --> g2["TestSuche (10)"]
+  class g2 groupnode
+  g2 --> t3("ohne_eingabe_fehler")
+  g2 --> t4("layer_ohne_pflichtspalten")
+  g2 --> t5("teilstring_ohne_gross_kleinschreibung")
+  g2 --> t6("umlaute_und_eszett")
+  g2 --> t7("gleiche_person_gleiche_anschrift_zusammengefasst")
+  g2 --> t8("andere_anschrift_eigener_treffer")
+  g2 --> t9("kennzeichen_verstorben")
+  g2 --> t10("rechtsperson_als_rohwert")
+  g2 --> t11("plz_mit_fuehrender_null")
+  g2 --> t12("suche_gibt_nichts_aus")
+  root --> g3["TestAnzeigeformen (1)"]
+  class g3 groupnode
+  g3 --> t13("name_und_anschrift")
+  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;
TestfallprüftStatusgeprüft
TestLayererkennung
test_layer_mit_name_und_vorname_ist_eigentuemerlayer
Prüft, dass ein Layer mit den Spalten Nachname und Vorname als Eigentümerdatei erkannt wird, auch mit BOM und anderer Schreibweise.grünnie geprüft
TestLayererkennung
test_eigentuemerlayer_im_projekt
Prüft, dass aus dem Projekt nur passende Layer kommen, nach Namen sortiert.grünnie geprüft
TestSuche
test_ohne_eingabe_fehler
Prüft, dass ohne Name und Vorname nicht die ganze Datei gelistet, sondern um eine Eingabe gebeten wird.grünnie geprüft
TestSuche
test_layer_ohne_pflichtspalten
Prüft, dass ein Layer ohne Nachname/Vorname mit Hinweis auf den Serienbriefexport abgelehnt wird.grünnie geprüft
TestSuche
test_teilstring_ohne_gross_kleinschreibung
Prüft, dass Name und Vorname als Teilstring ohne Rücksicht auf Groß-/Kleinschreibung gesucht werden.grünnie geprüft
TestSuche
test_umlaute_und_eszett
Prüft, dass „Müller“ auch „Mueller“ findet und „Strauss“ auch „Strauß“.grünnie geprüft
TestSuche
test_gleiche_person_gleiche_anschrift_zusammengefasst
Prüft, dass Zeilen mit gleichem Namen und gleicher Anschrift ein Treffer werden und Konten, Personen-IDs und E-Mails gesammelt werden.grünnie geprüft
TestSuche
test_andere_anschrift_eigener_treffer
Prüft, dass dieselbe Person mit anderer Anschrift ein eigener Treffer bleibt, sortiert nach Wohnort.grünnie geprüft
TestSuche
test_kennzeichen_verstorben
Prüft, dass „verstorben“ beim Exportwert 1 (auch als Zahl gelesen) gesetzt ist und bei 0, Leerem und NULL nicht.grünnie geprüft
TestSuche
test_rechtsperson_als_rohwert
Prüft, dass PER_RECHTSPERSON unverändert angezeigt wird (0, 1, 5, 9; noch nicht entschlüsselt) und abweichende Werte einer Person gesammelt werden.grünnie geprüft
TestSuche
test_plz_mit_fuehrender_null
Prüft, dass eine von QGIS als Zahl gelesene PLZ wieder fünfstellig mit führender Null erscheint und Zeilen dadurch zusammenfinden.grünnie geprüft
TestSuche
test_suche_gibt_nichts_aus
Prüft, dass die Suche keine Personendaten auf die Konsole schreibt (Datenschutz).grünnie geprüft
TestAnzeigeformen
test_name_und_anschrift
Prüft, dass Name mit Titel und einzeilige Anschrift mit Ortsteil lesbar zusammengesetzt werden.grünnie geprüft

Tests für den Tab „Eigentümer“ – Flurstückssuche, Eigentümersuche, Anzeige und Korrektur (#56).

TestFlurstueckSuchen 5TestEigentuemerSuchen 4TestTrefferliste 3TestSitzung 7TestKorrekturLabel 4TestKorrektur 5TestKorrekturDatei 2TestDockWidgetTabs 1
flowchart TD
+  root(["test_eigentuemer_tab.py"])
+  class root rootnode
+  root --> g1["TestFlurstueckSuchen (5)"]
+  class g1 groupnode
+  g1 --> t1("ohne_flurstueckslayer_erscheint_hinweisdialog")
+  g1 --> t2("eingabefehler_als_warnung")
+  g1 --> t3("kein_treffer")
+  g1 --> t4("treffer_werden_ausgewaehlt_und_angezoomt")
+  g1 --> t5("ohne_kartenansicht_bleibt_auswahl")
+  root --> g2["TestEigentuemerSuchen (4)"]
+  class g2 groupnode
+  g2 --> t6("ohne_eigentuemerdatei_warnung")
+  g2 --> t7("suchfehler_als_warnung")
+  g2 --> t8("kein_treffer_ohne_namen_in_meldung")
+  g2 --> t9("treffer_oeffnen_trefferliste_und_ersetzen_die_alte")
+  root --> g3["TestTrefferliste (3)"]
+  class g3 groupnode
+  g3 --> t10("trefferzeile_mit_hinweis")
+  g3 --> t11("ausgewaehlte_eigentuemer")
+  g3 --> t12("daten_anzeigen_gibt_auswahl_weiter")
+  root --> g4["TestSitzung (7)"]
+  class g4 groupnode
+  g4 --> t13("sitzung_beginnen_oeffnet_leeres_fenster_mit_rahmen")
+  g4 --> t14("lage_gilt_fuer_naechste_sitzung")
+  g4 --> t15("daten_anzeigen_beginnt_sitzung_bei_bedarf")
+  g4 --> t16("daten_anzeigen_ohne_auswahl")
+  g4 --> t17("anzeige_leeren_laesst_fenster_offen")
+  g4 --> t18("sitzung_beenden_schliesst_fenster")
+  g4 --> t19("von_aussen_geschlossen_beendet_sitzung")
+  root --> g5["TestKorrekturLabel (4)"]
+  class g5 groupnode
+  g5 --> t20("ohne_eigentuemerdatei")
+  g5 --> t21("pfad_neben_der_eigentuemerdatei")
+  g5 --> t22("ohne_csv_quelle_wird_abgefragt")
+  g5 --> t23("gewaehlter_pfad_wird_angezeigt")
+  root --> g6["TestKorrektur (5)"]
+  class g6 groupnode
+  g6 --> t24("korrektur_wird_festgehalten_und_angezeigt")
+  g6 --> t25("ohne_aenderung_nichts_schreiben")
+  g6 --> t26("abbruch_nichts_schreiben")
+  g6 --> t27("schreibfehler_warnung_und_anzeige_unveraendert")
+  g6 --> t28("ohne_anzeige_keine_korrektur")
+  root --> g7["TestKorrekturDatei (2)"]
+  class g7 groupnode
+  g7 --> t29("vorschlag_neben_der_eigentuemerdatei")
+  g7 --> t30("ohne_csv_quelle_wird_gefragt")
+  root --> g8["TestDockWidgetTabs (1)"]
+  class g8 groupnode
+  g8 --> t31("tab_ist_im_dockwidget_eingetragen")
+  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
+  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
+  class t25 ok
+  class t26 ok
+  class t27 ok
+  class t28 ok
+  class t29 ok
+  class t30 ok
+  class t31 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;
TestfallprüftStatusgeprüft
TestFlurstueckSuchen
test_ohne_flurstueckslayer_erscheint_hinweisdialog
Prüft, dass ohne Layer „Flurstücke“ ein Dialog zum Laden von Verfahrensgebiet und Flurstücken erscheint.grünnie geprüft
TestFlurstueckSuchen
test_eingabefehler_als_warnung
Prüft, dass eine ungültige Eingabe als Warnung in der Meldungsleiste erscheint, nicht als Dialog.grünnie geprüft
TestFlurstueckSuchen
test_kein_treffer
Prüft, dass ohne Treffer ein Hinweis erscheint und keine Auswahl gesetzt wird.grünnie geprüft
TestFlurstueckSuchen
test_treffer_werden_ausgewaehlt_und_angezoomt
Prüft, dass Treffer im Flurstückslayer ausgewählt, angezoomt und gemeldet werden.grünnie geprüft
TestFlurstueckSuchen
test_ohne_kartenansicht_bleibt_auswahl
Prüft, dass die Auswahl auch ohne Kartenansicht gesetzt und gemeldet wird.grünnie geprüft
TestEigentuemerSuchen
test_ohne_eigentuemerdatei_warnung
Prüft, dass ohne gewählte Eigentümerdatei die Liste aufgefrischt und dann auf das Laden der CSV hingewiesen wird.grünnie geprüft
TestEigentuemerSuchen
test_suchfehler_als_warnung
Prüft, dass ein Fehler der Suche (z. B. leere Eingabe) als Warnung erscheint.grünnie geprüft
TestEigentuemerSuchen
test_kein_treffer_ohne_namen_in_meldung
Prüft, dass ohne Treffer ein Hinweis erscheint, der den gesuchten Namen nicht wiederholt (Datenschutz).grünnie geprüft
TestEigentuemerSuchen
test_treffer_oeffnen_trefferliste_und_ersetzen_die_alte
Prüft, dass Treffer in einer neuen Trefferliste mit Anzeige-Rückruf erscheinen, eine offene alte Liste geschlossen wird und die Eingaben an die Suche gehen.grünnie geprüft
TestTrefferliste
test_trefferzeile_mit_hinweis
Prüft, dass die Trefferliste Name, Anschrift, E-Mail, den Rohwert von PER_RECHTSPERSON und das Kennzeichen „verstorben“ zeigt.grünnie geprüft
TestTrefferliste
test_ausgewaehlte_eigentuemer
Prüft, dass das Trefferfenster die in der Tabelle gewählten Einträge zurückgibt.grünnie geprüft
TestTrefferliste
test_daten_anzeigen_gibt_auswahl_weiter
Prüft, dass „Daten anzeigen“ die Auswahl der Trefferliste an den Tab übergibt.grünnie geprüft
TestSitzung
test_sitzung_beginnen_oeffnet_leeres_fenster_mit_rahmen
Prüft, dass „Sitzung beginnen“ ein leeres Anzeigefenster als normales Fenster öffnet (ohne gemerkte Lage beim ersten Mal).grünnie geprüft
TestSitzung
test_lage_gilt_fuer_naechste_sitzung
Prüft, dass Größe und Lage des Fensters beim Beenden gemerkt und in der nächsten Sitzung wiederverwendet werden.grünnie geprüft
TestSitzung
test_daten_anzeigen_beginnt_sitzung_bei_bedarf
Prüft, dass „Daten anzeigen“ ohne laufende Sitzung diese beginnt und die Einträge zeigt; die Statuszeile nennt nur die Anzahl.grünnie geprüft
TestSitzung
test_daten_anzeigen_ohne_auswahl
Prüft, dass „Daten anzeigen“ ohne Auswahl nur einen Hinweis gibt und keine Sitzung beginnt.grünnie geprüft
TestSitzung
test_anzeige_leeren_laesst_fenster_offen
Prüft, dass „Anzeige leeren“ die Daten entfernt, das Fenster aber nicht schließt.grünnie geprüft
TestSitzung
test_sitzung_beenden_schliesst_fenster
Prüft, dass „Sitzung beenden“ das Anzeigefenster schließt und die angezeigten Daten vergisst.grünnie geprüft
TestSitzung
test_von_aussen_geschlossen_beendet_sitzung
Prüft, dass ein über den Fensterrahmen geschlossenes Anzeigefenster die Sitzung beendet und seine Lage gemerkt wird.grünnie geprüft
TestKorrekturLabel
test_ohne_eigentuemerdatei
Prüft, dass ohne Eigentümerdatei unter den Knöpfen steht, dass keine gewählt ist.grünnie geprüft
TestKorrekturLabel
test_pfad_neben_der_eigentuemerdatei
Prüft, dass der Pfad der Korrektur-CSV angezeigt wird, mit Hinweis, solange sie noch nicht angelegt ist.grünnie geprüft
TestKorrekturLabel
test_ohne_csv_quelle_wird_abgefragt
Prüft, dass bei einer Quelle ohne CSV angekündigt wird, dass der Speicherort beim ersten Speichern abgefragt wird.grünnie geprüft
TestKorrekturLabel
test_gewaehlter_pfad_wird_angezeigt
Prüft, dass ein einmal gewählter Speicherort angezeigt wird.grünnie geprüft
TestKorrektur
test_korrektur_wird_festgehalten_und_angezeigt
Prüft, dass eine Korrektur in die Korrektur-CSV geschrieben, sofort angezeigt und ohne Namen gemeldet wird.grünnie geprüft
TestKorrektur
test_ohne_aenderung_nichts_schreiben
Prüft, dass ein unverändert gespeicherter Dialog nichts schreibt.grünnie geprüft
TestKorrektur
test_abbruch_nichts_schreiben
Prüft, dass ein abgebrochener Korrekturdialog nichts schreibt.grünnie geprüft
TestKorrektur
test_schreibfehler_warnung_und_anzeige_unveraendert
Prüft, dass bei einem Schreibfehler gewarnt, die Anzeige nicht geändert und der Pfad beim nächsten Mal neu bestimmt wird.grünnie geprüft
TestKorrektur
test_ohne_anzeige_keine_korrektur
Prüft, dass ohne angezeigte Daten kein Korrekturdialog erscheint.grünnie geprüft
TestKorrekturDatei
test_vorschlag_neben_der_eigentuemerdatei
Prüft, dass die Korrektur-CSV ohne Rückfrage neben der Eigentümerdatei liegt, wenn der Ordner beschreibbar ist, und gemerkt wird.grünnie geprüft
TestKorrekturDatei
test_ohne_csv_quelle_wird_gefragt
Prüft, dass ohne verwertbare CSV-Quelle nach dem Speicherort gefragt wird; Abbrechen liefert keinen Pfad.grünnie geprüft
TestDockWidgetTabs
test_tab_ist_im_dockwidget_eingetragen
Prüft, dass der Tab „Eigentümer“ im DockWidget direkt nach dem Bearbeitungs-Tab steht.grünnie geprüft

Unit-Tests für das flurstueck_alkis-Modul.

TestFlurstueckAlkis 11TestFlurstueckAlkisAnhaengenDedup 3
flowchart TD
   root(["test_flurstueck_alkis.py"])
   class root rootnode
   root --> g1["TestFlurstueckAlkis (11)"]
@@ -1392,7 +1588,42 @@
   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
TestFlurstueckAlkis
test_user_cancel_returns_none
Prüft, dass ein Abbruch im Eingabedialog (ok=False) (None, LoadStatus.NONE) liefert.grünnie geprüft
TestFlurstueckAlkis
test_empty_text_after_confirmation_returns_none
Prüft, dass ein bestätigter, aber leerer Eingabetext ebenfalls (None, LoadStatus.NONE) liefert.grünnie geprüft
TestFlurstueckAlkis
test_invalid_wfs_layer_returns_none
Prüft, dass ein ungültiger WFS-Layer (None, LoadStatus.NONE) liefert.grünnie geprüft
TestFlurstueckAlkis
test_success_returns_layer_and_first_status
Prüft, dass ohne bestehenden Layer der von lade_flurstuecke_per_gemarkung gelieferte Layer mit LoadStatus.FIRST zurückgegeben wird.rotnie geprüft
TestFlurstueckAlkis
test_sql_filter_contains_all_schluessel
Prüft, dass lade_flurstuecke_per_gemarkung für jeden Gemarkungsschlüssel eine eigene WFS-Anfrage mit dessen Schlüssel stellt.rotnie geprüft
TestFlurstueckAlkis
test_existing_layer_reload_yes
Prüft, dass bei bestehendem Layer und Klick auf 'Überschreiben' der alte Layer entfernt und LoadStatus.RELOAD geliefert wird.rotnie geprüft
TestFlurstueckAlkis
test_existing_layer_abbrechen_returns_none
Prüft, dass bei bestehendem Layer und Klick auf 'Abbrechen' nichts verändert wird und (None, LoadStatus.NONE) geliefert wird.grünnie geprüft
TestFlurstueckAlkis
test_vorgabe_schluessel_prefills_default_text
Prüft, dass vorgabe_schluessel als vorbelegter default_text im Eingabedialog erscheint.rotnie geprüft
TestFlurstueckAlkis
test_vorgabe_namen_appears_in_label
Prüft, dass vorgabe_namen im Beschriftungstext des Eingabedialogs erscheint.rotnie geprüft
TestFlurstueckAlkis
test_backwards_compatible_no_new_params
Prüft, dass flurstueck_alkis() ohne die neuen optionalen Parameter weiterhin fehlerfrei einen Layer mit LoadStatus.FIRST liefert.rotnie geprüft
TestFlurstueckAlkis
test_ohne_schluessel_abfrage_ueberspringt_ask_text
Prüft, dass ohne_schluessel_abfrage=True vorgabe_schluessel direkt verwendet und ask_text nicht aufgerufen wird.grünnie geprüft
TestFlurstueckAlkisAnhaengenDedup
test_append_ueberspringt_bereits_vorhandene_flurstuecke
Prüft, dass beim Anhängen bereits vorhandene flurstueckskennzeichen nicht erneut hinzugefügt werden.grünnie geprüft
TestFlurstueckAlkisAnhaengenDedup
test_append_ohne_kennzeichen_feld_haengt_alles_an
Prüft, dass ohne flurstueckskennzeichen-Feld weiterhin alle Features angehängt werden (Rückfallverhalten).grünnie geprüft
TestFlurstueckAlkisAnhaengenDedup
test_ohne_schluessel_abfrage_append_dedup
ohne_schluessel_abfrage=True: Anhängen dedupliziert trotzdem, ohne nach Schlüsseln zu fragen (#47).grünnie geprüft

Unit-Tests für `sn_verfahrensgebiet.functions.gemarkung_alkis`.

TestExtractSchluesselUndName 4TestGemarkungSchluesselbbox 6TestGemarkungSchluesselnurNummern 2TestLadeGemarkungenlayer 2
flowchart TD
+  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestFlurstueckAlkis
test_user_cancel_returns_none
Prüft, dass ein Abbruch im Eingabedialog (ok=False) (None, LoadStatus.NONE) liefert.grünnie geprüft
TestFlurstueckAlkis
test_empty_text_after_confirmation_returns_none
Prüft, dass ein bestätigter, aber leerer Eingabetext ebenfalls (None, LoadStatus.NONE) liefert.grünnie geprüft
TestFlurstueckAlkis
test_invalid_wfs_layer_returns_none
Prüft, dass ein ungültiger WFS-Layer (None, LoadStatus.NONE) liefert.grünnie geprüft
TestFlurstueckAlkis
test_success_returns_layer_and_first_status
Prüft, dass ohne bestehenden Layer der von lade_flurstuecke_per_gemarkung gelieferte Layer mit LoadStatus.FIRST zurückgegeben wird.rotnie geprüft
TestFlurstueckAlkis
test_sql_filter_contains_all_schluessel
Prüft, dass lade_flurstuecke_per_gemarkung für jeden Gemarkungsschlüssel eine eigene WFS-Anfrage mit dessen Schlüssel stellt.rotnie geprüft
TestFlurstueckAlkis
test_existing_layer_reload_yes
Prüft, dass bei bestehendem Layer und Klick auf 'Überschreiben' der alte Layer entfernt und LoadStatus.RELOAD geliefert wird.rotnie geprüft
TestFlurstueckAlkis
test_existing_layer_abbrechen_returns_none
Prüft, dass bei bestehendem Layer und Klick auf 'Abbrechen' nichts verändert wird und (None, LoadStatus.NONE) geliefert wird.grünnie geprüft
TestFlurstueckAlkis
test_vorgabe_schluessel_prefills_default_text
Prüft, dass vorgabe_schluessel als vorbelegter default_text im Eingabedialog erscheint.rotnie geprüft
TestFlurstueckAlkis
test_vorgabe_namen_appears_in_label
Prüft, dass vorgabe_namen im Beschriftungstext des Eingabedialogs erscheint.rotnie geprüft
TestFlurstueckAlkis
test_backwards_compatible_no_new_params
Prüft, dass flurstueck_alkis() ohne die neuen optionalen Parameter weiterhin fehlerfrei einen Layer mit LoadStatus.FIRST liefert.rotnie geprüft
TestFlurstueckAlkis
test_ohne_schluessel_abfrage_ueberspringt_ask_text
Prüft, dass ohne_schluessel_abfrage=True vorgabe_schluessel direkt verwendet und ask_text nicht aufgerufen wird.grünnie geprüft
TestFlurstueckAlkisAnhaengenDedup
test_append_ueberspringt_bereits_vorhandene_flurstuecke
Prüft, dass beim Anhängen bereits vorhandene flurstueckskennzeichen nicht erneut hinzugefügt werden.grünnie geprüft
TestFlurstueckAlkisAnhaengenDedup
test_append_ohne_kennzeichen_feld_haengt_alles_an
Prüft, dass ohne flurstueckskennzeichen-Feld weiterhin alle Features angehängt werden (Rückfallverhalten).grünnie geprüft
TestFlurstueckAlkisAnhaengenDedup
test_ohne_schluessel_abfrage_append_dedup
ohne_schluessel_abfrage=True: Anhängen dedupliziert trotzdem, ohne nach Schlüsseln zu fragen (#47).grünnie geprüft

Tests für die Flurstückssuche im Layer „Flurstücke“ (#56).

TestEingabe 6TestSuche 6
flowchart TD
+  root(["test_flurstueck_suche.py"])
+  class root rootnode
+  root --> g1["TestEingabe (6)"]
+  class g1 groupnode
+  g1 --> t1("flurstuecksnummer_mit_und_ohne_nenner")
+  g1 --> t2("ungueltige_flurstuecksnummer")
+  g1 --> t3("kennzeichen_zerlegen")
+  g1 --> t4("gemarkungsnummer_aus_ziffern")
+  g1 --> t5("gemarkungsname_ueber_gemarkungslayer")
+  g1 --> t6("gemarkungsname_ohne_layer_oder_unbekannt")
+  root --> g2["TestSuche (6)"]
+  class g2 groupnode
+  g2 --> t7("mit_nenner_genau_ein_treffer")
+  g2 --> t8("ohne_nenner_alle_mit_diesem_zaehler")
+  g2 --> t9("kein_treffer")
+  g2 --> t10("layer_ohne_kennzeichenfeld")
+  g2 --> t11("fehlender_flurstueckslayer_bricht_ab")
+  g2 --> t12("suche_im_projekt_mit_gemarkungsname")
+  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;
TestfallprüftStatusgeprüft
TestEingabe
test_flurstuecksnummer_mit_und_ohne_nenner
Prüft, dass Zähler und Nenner getrennt und führende Nullen entfernt werden.grünnie geprüft
TestEingabe
test_ungueltige_flurstuecksnummer
Prüft, dass leere oder unzulässige Flurstücksnummern abgelehnt werden.grünnie geprüft
TestEingabe
test_kennzeichen_zerlegen
Prüft, dass Gemarkung, Zähler und Nenner aus dem ALKIS-Kennzeichen gelesen werden.grünnie geprüft
TestEingabe
test_gemarkungsnummer_aus_ziffern
Prüft, dass Ziffern als Gemarkungsnummer gelten, auch ohne führende Nullen oder als langer Schlüssel.grünnie geprüft
TestEingabe
test_gemarkungsname_ueber_gemarkungslayer
Prüft, dass ein Gemarkungsname ohne Rücksicht auf Großschreibung in alle passenden Nummern übersetzt wird.grünnie geprüft
TestEingabe
test_gemarkungsname_ohne_layer_oder_unbekannt
Prüft, dass ein Name ohne Gemarkungslayer oder ohne Treffer eine verständliche Meldung ergibt.grünnie geprüft
TestSuche
test_mit_nenner_genau_ein_treffer
Prüft, dass mit Nenner nur das passende Flurstück der Gemarkung gefunden wird.grünnie geprüft
TestSuche
test_ohne_nenner_alle_mit_diesem_zaehler
Prüft, dass ohne Nenner alle Flurstücke mit dem Zähler gefunden werden, aber nur in der gesuchten Gemarkung.grünnie geprüft
TestSuche
test_kein_treffer
Prüft, dass ein nicht vorhandenes Flurstück eine leere Trefferliste ergibt.grünnie geprüft
TestSuche
test_layer_ohne_kennzeichenfeld
Prüft, dass ein Flurstückslayer ohne Feld „flurstueckskennzeichen“ gemeldet wird.grünnie geprüft
TestSuche
test_fehlender_flurstueckslayer_bricht_ab
Prüft, dass die Suche ohne Layer „Flurstücke“ mit dem Hinweis abbricht, zuerst Verfahrensgebiet und Flurstücke zu laden.grünnie geprüft
TestSuche
test_suche_im_projekt_mit_gemarkungsname
Prüft, dass die Suche im Projekt den Gemarkungsnamen auflöst und Layer samt Treffern liefert.grünnie geprüft

Unit-Tests für `sn_verfahrensgebiet.functions.gemarkung_alkis`.

TestExtractSchluesselUndName 4TestGemarkungSchluesselbbox 6TestGemarkungSchluesselnurNummern 2TestLadeGemarkungenlayer 2
flowchart TD
   root(["test_gemarkung_alkis.py"])
   class root rootnode
   root --> g1["TestExtractSchluesselUndName (4)"]
@@ -1632,7 +1863,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;
TestfallprüftStatusgeprüft
TestSelectByLocation
test_processing_not_available_returns_zero
— (Docstring fehlt)grünnie geprüft
TestSelectByLocation
test_processing_success_returns_count
— (Docstring fehlt)grünnie geprüft
TestSelectByLocation
test_processing_exception_returns_zero
— (Docstring fehlt)grünnie geprüft
TestFuegeVkzFeldHinzu
test_empty_vkz_does_nothing
— (Docstring fehlt)grünnie geprüft
TestFuegeVkzFeldHinzu
test_none_vkz_does_nothing
— (Docstring fehlt)grünnie geprüft
TestFuegeVkzFeldHinzu
test_vkz_field_added
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_gleiche_flaeche_stimmt_ueberein
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_verschiedene_flaeche_stimmt_nicht_ueberein
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_differenz_innerhalb_toleranz
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_differenz_ausserhalb_toleranz
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_flaechen_werte_korrekt
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_lese_toleranz_default_ist_null
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_lese_toleranz_parst_string
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_lese_toleranz_ungueltig_fallback_null
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_vg_alkis_none_aborts
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_flst_none_aborts
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_no_selection_returns_none_enriched
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_invalid_enriched_layer_returns_none
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_progress_cancel_after_step1_returns_none
Abbruch nach Schritt 1 → sofortiger sauberer Rückgabestatus.grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_success_flaechen_match_zeigt_info
Flächenübereinstimmung → show_info_dialog mit erwartetem Text.grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_no_vkz_variable_passes_empty_string
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_flaechen_abweichung_abbrechen_kein_detailcheck
Abweichung + Abbrechen → knickpunkt_pruefung wird NICHT aufgerufen.grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_flaechen_abweichung_als_vg_laden
Abweichung + Als VG laden → BROR-Layer wird umbenannt und alsgrünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_flaechen_abweichung_detailpruefung_startet_knickpruefung
Abweichung + Detailprüfung → lade_punktort_ta + knickpunkt_pruefunggrünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_bror_layer_bleibt_bei_erfolg_im_projekt
Bei Erfolg darf der BROR-Layer NICHT entfernt werden.grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_bror_layer_wird_bei_fehler_entfernt
Bei Fehler (flst_alkis NONE) wird der BROR-Layer aus dem Projekt entfernt.grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_kein_vkz_kein_landkreis_dialog_abgebrochen
Weder Verfahrensnummer noch Landkreis gesetzt, Nutzer bricht dengrünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_kein_vkz_kein_landkreis_dialog_liefert_landkreis
Weder Verfahrensnummer noch Landkreis gesetzt, Nutzer wählt einengrünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_landkreis_modus_wird_bei_fehlender_vkz_verwendet
Keine Verfahrensnummer, aber Landkreis gesetzt → Landkreis-Suchpfadgrünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_landkreis_modus_nur_laden_ueberspringt_dialog2
nur_laden=True → Funktion kehrt sofort zurück, Dialog 2 (Gemarkunggrünnie geprüft

Unit-Tests für das Verfahrensgebiet-Edit-Service-Modul.

TestPruefeFlurstueckLayer 3TestPruefeAuswahl 3TestGetKennzeichenMenge 3TestErstelle 3TestErgaenzeVerfahrensgebiet 3TestEntferneAusVerfahrensgebiet 5TestErsetze 1
flowchart TD
+  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestSelectByLocation
test_processing_not_available_returns_zero
— (Docstring fehlt)grünnie geprüft
TestSelectByLocation
test_processing_success_returns_count
— (Docstring fehlt)grünnie geprüft
TestSelectByLocation
test_processing_exception_returns_zero
— (Docstring fehlt)grünnie geprüft
TestFuegeVkzFeldHinzu
test_empty_vkz_does_nothing
— (Docstring fehlt)grünnie geprüft
TestFuegeVkzFeldHinzu
test_none_vkz_does_nothing
— (Docstring fehlt)grünnie geprüft
TestFuegeVkzFeldHinzu
test_vkz_field_added
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_gleiche_flaeche_stimmt_ueberein
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_verschiedene_flaeche_stimmt_nicht_ueberein
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_differenz_innerhalb_toleranz
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_differenz_ausserhalb_toleranz
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_flaechen_werte_korrekt
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_lese_toleranz_default_ist_null
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_lese_toleranz_parst_string
— (Docstring fehlt)grünnie geprüft
TestFlaechenvergleich
test_lese_toleranz_ungueltig_fallback_null
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_vg_alkis_none_aborts
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_flst_none_aborts
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_no_selection_returns_none_enriched
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_invalid_enriched_layer_returns_none
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_progress_cancel_after_step1_returns_none
Abbruch nach Schritt 1 → sofortiger sauberer Rückgabestatus.grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_success_flaechen_match_zeigt_info
Flächenübereinstimmung → show_info_dialog mit erwartetem Text.grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_no_vkz_variable_passes_empty_string
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_flaechen_abweichung_abbrechen_kein_detailcheck
Abweichung + Abbrechen → knickpunkt_pruefung wird NICHT aufgerufen.grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_flaechen_abweichung_als_vg_laden
Abweichung + Als VG laden → BROR-Layer wird umbenannt und alsgrünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_flaechen_abweichung_detailpruefung_startet_knickpruefung
Abweichung + Detailprüfung → lade_punktort_ta + knickpunkt_pruefunggrünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_bror_layer_bleibt_bei_erfolg_im_projekt
Bei Erfolg darf der BROR-Layer NICHT entfernt werden.grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_bror_layer_wird_bei_fehler_entfernt
Bei Fehler (flst_alkis NONE) wird der BROR-Layer aus dem Projekt entfernt.grünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_kein_vkz_kein_landkreis_dialog_abgebrochen
Weder Verfahrensnummer noch Landkreis gesetzt, Nutzer bricht dengrünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_kein_vkz_kein_landkreis_dialog_liefert_landkreis
Weder Verfahrensnummer noch Landkreis gesetzt, Nutzer wählt einengrünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_landkreis_modus_wird_bei_fehlender_vkz_verwendet
Keine Verfahrensnummer, aber Landkreis gesetzt → Landkreis-Suchpfadgrünnie geprüft
TestVerfahrensgebietAlkisKomplett
test_landkreis_modus_nur_laden_ueberspringt_dialog2
nur_laden=True → Funktion kehrt sofort zurück, Dialog 2 (Gemarkunggrünnie geprüft

Tests für die gemeinsame Auswahltabelle in verfahrensgebiet_dialoge (#56).

TestAuswahltabelle 2
flowchart TD
+  root(["test_verfahrensgebiet_dialoge.py"])
+  class root rootnode
+  root --> g1["TestAuswahltabelle (2)"]
+  class g1 groupnode
+  g1 --> t1("suchfilter_ueber_alle_spalten")
+  g1 --> t2("auswahl_nach_umsortieren")
+  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;
TestfallprüftStatusgeprüft
TestAuswahltabelle
test_suchfilter_ueber_alle_spalten
Prüft, dass der Suchfilter Teilstrings in jeder Spalte ohne Groß-/Kleinschreibung findet und leer alles zeigt.grünnie geprüft
TestAuswahltabelle
test_auswahl_nach_umsortieren
Prüft, dass die Auswahl über den gespeicherten Index auf die ursprünglichen Zeilen zurückgeführt wird, auch wenn die Tabelle umsortiert ist.grünnie geprüft

Unit-Tests für das Verfahrensgebiet-Edit-Service-Modul.

TestPruefeFlurstueckLayer 3TestPruefeAuswahl 3TestGetKennzeichenMenge 3TestErstelle 3TestErgaenzeVerfahrensgebiet 3TestEntferneAusVerfahrensgebiet 5TestErsetze 1
flowchart TD
   root(["test_verfahrensgebiet_edit_service.py"])
   class root rootnode
   root --> g1["TestPruefeFlurstueckLayer (3)"]
@@ -1772,7 +2016,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
TestFindShp
test_findet_shp_in_root
— (Docstring fehlt)grünnie geprüft
TestFindShp
test_findet_shp_in_unterordner
— (Docstring fehlt)grünnie geprüft
TestFindShp
test_kein_shp_gibt_none_zurueck
— (Docstring fehlt)grünnie geprüft
TestFindShp
test_case_insensitive_erkennung
— (Docstring fehlt)grünnie geprüft
TestErstelleMemoryLayerAusShp
test_leere_geometrien_geben_none
— (Docstring fehlt)grünnie geprüft
TestErstelleMemoryLayerAusShp
test_keine_features_gibt_none
— (Docstring fehlt)grünnie geprüft
TestErstelleMemoryLayerAusShp
test_attribute_von_erstem_feature_werden_gesetzt
Attributwerte des ersten Features werden auf das Union-Feature übertragen.grünnie geprüft
TestLadeVgAusZip
test_dialog_abgebrochen_gibt_none_zurueck
— (Docstring fehlt)rotnie geprüft
TestLadeVgAusZip
test_zip_fehler_gibt_none_und_warning
— (Docstring fehlt)rotnie geprüft
TestLadeVgAusZip
test_kein_shp_in_zip_gibt_none_und_warning
— (Docstring fehlt)rotnie geprüft
TestLadeVgAusZip
test_invalider_qgslayer_gibt_none_und_warning
— (Docstring fehlt)rotnie geprüft
TestLadeVgAusZip
test_leere_geometrien_geben_none_und_warning
— (Docstring fehlt)rotnie geprüft
TestLadeVgAusZip
test_erfolg_gibt_memory_layer_zurueck
— (Docstring fehlt)rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_lade_zip_none_aborts
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietShapeKomplett
test_shape_vg_sofort_ins_projekt_nach_laden
Shape-VG wird unmittelbar nach dem Laden ins Projekt eingefügt.rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_shape_vg_wird_bei_abbruch_aus_projekt_entfernt
Shape-VG wird bei Fehler/Abbruch aus dem Projekt entfernt.rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_shape_vg_bleibt_im_projekt_bei_erfolg
Bei erfolgreichem Abschluss wird shape_vg NICHT aus dem Projekt entfernt.grünnie geprüft
TestVerfahrensgebietShapeKomplett
test_flst_none_aborts
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietShapeKomplett
test_keine_flurstuecke_selektiert_gibt_warning
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietShapeKomplett
test_flaechen_uebereinstimmung_gibt_info_und_kein_dialog
— (Docstring fehlt)rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_abweichung_abbrechen_gibt_shape_vg_zurueck
— (Docstring fehlt)rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_abweichung_detailpruefung_ruft_knickpunkt_pruefung_auf
— (Docstring fehlt)rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_punktort_ta_none_gibt_shape_vg_zurueck_und_zeigt_fehler
— (Docstring fehlt)rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_temp_layer_wird_stets_entfernt
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietShapeKomplett
test_bror_layer_ist_stets_none
Dritter Rückgabewert ist im Shape-Workflow immer None (kein BROR).grünnie geprüft
TestVerfahrensgebietShapeKomplett
test_bror_geladen_und_zurueckgegeben_wenn_vkz_gesetzt
VKZ gesetzt → verfahrensgebiet_alkis aufgerufen, bror_layer zurückgegeben.rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_bror_wird_vor_shape_vg_ins_projekt_eingefuegt
BROR wird VOR shape_vg ins Projekt eingefügt (kein Namenskonflikt).rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_bror_wird_bei_abbruch_aus_projekt_entfernt
BROR und shape_vg werden bei Fehler aus dem Projekt entfernt.rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_verfahrensgebiet_alkis_nicht_aufgerufen_wenn_vkz_leer
Leere VKZ → verfahrensgebiet_alkis wird NICHT aufgerufen.grünnie geprüft
TestVerfahrensgebietShapeKomplett
test_bror_als_erstes_argument_beim_flaechenvergleich
Mit BROR: _vergleiche_flaechen wird (bror, shape_vg, ...) aufgerufen.rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_fallback_auf_temp_enriched_wenn_bror_ladeversagen
BROR-Ladeversagen → Fallback: _vergleiche_flaechen mit shape_vg vs temp_enriched.rotnie geprüft

— (Docstring fehlt)

TestWorkingTab 24TestHandleVerfShape 9
flowchart TD
+  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestFindShp
test_findet_shp_in_root
— (Docstring fehlt)grünnie geprüft
TestFindShp
test_findet_shp_in_unterordner
— (Docstring fehlt)grünnie geprüft
TestFindShp
test_kein_shp_gibt_none_zurueck
— (Docstring fehlt)grünnie geprüft
TestFindShp
test_case_insensitive_erkennung
— (Docstring fehlt)grünnie geprüft
TestErstelleMemoryLayerAusShp
test_leere_geometrien_geben_none
— (Docstring fehlt)grünnie geprüft
TestErstelleMemoryLayerAusShp
test_keine_features_gibt_none
— (Docstring fehlt)grünnie geprüft
TestErstelleMemoryLayerAusShp
test_attribute_von_erstem_feature_werden_gesetzt
Attributwerte des ersten Features werden auf das Union-Feature übertragen.grünnie geprüft
TestLadeVgAusZip
test_dialog_abgebrochen_gibt_none_zurueck
— (Docstring fehlt)rotnie geprüft
TestLadeVgAusZip
test_zip_fehler_gibt_none_und_warning
— (Docstring fehlt)rotnie geprüft
TestLadeVgAusZip
test_kein_shp_in_zip_gibt_none_und_warning
— (Docstring fehlt)rotnie geprüft
TestLadeVgAusZip
test_invalider_qgslayer_gibt_none_und_warning
— (Docstring fehlt)rotnie geprüft
TestLadeVgAusZip
test_leere_geometrien_geben_none_und_warning
— (Docstring fehlt)rotnie geprüft
TestLadeVgAusZip
test_erfolg_gibt_memory_layer_zurueck
— (Docstring fehlt)rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_lade_zip_none_aborts
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietShapeKomplett
test_shape_vg_sofort_ins_projekt_nach_laden
Shape-VG wird unmittelbar nach dem Laden ins Projekt eingefügt.rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_shape_vg_wird_bei_abbruch_aus_projekt_entfernt
Shape-VG wird bei Fehler/Abbruch aus dem Projekt entfernt.rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_shape_vg_bleibt_im_projekt_bei_erfolg
Bei erfolgreichem Abschluss wird shape_vg NICHT aus dem Projekt entfernt.grünnie geprüft
TestVerfahrensgebietShapeKomplett
test_flst_none_aborts
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietShapeKomplett
test_keine_flurstuecke_selektiert_gibt_warning
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietShapeKomplett
test_flaechen_uebereinstimmung_gibt_info_und_kein_dialog
— (Docstring fehlt)rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_abweichung_abbrechen_gibt_shape_vg_zurueck
— (Docstring fehlt)rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_abweichung_detailpruefung_ruft_knickpunkt_pruefung_auf
— (Docstring fehlt)rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_punktort_ta_none_gibt_shape_vg_zurueck_und_zeigt_fehler
— (Docstring fehlt)rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_temp_layer_wird_stets_entfernt
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietShapeKomplett
test_bror_layer_ist_stets_none
Dritter Rückgabewert ist im Shape-Workflow immer None (kein BROR).grünnie geprüft
TestVerfahrensgebietShapeKomplett
test_bror_geladen_und_zurueckgegeben_wenn_vkz_gesetzt
VKZ gesetzt → verfahrensgebiet_alkis aufgerufen, bror_layer zurückgegeben.rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_bror_wird_vor_shape_vg_ins_projekt_eingefuegt
BROR wird VOR shape_vg ins Projekt eingefügt (kein Namenskonflikt).rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_bror_wird_bei_abbruch_aus_projekt_entfernt
BROR und shape_vg werden bei Fehler aus dem Projekt entfernt.rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_verfahrensgebiet_alkis_nicht_aufgerufen_wenn_vkz_leer
Leere VKZ → verfahrensgebiet_alkis wird NICHT aufgerufen.grünnie geprüft
TestVerfahrensgebietShapeKomplett
test_bror_als_erstes_argument_beim_flaechenvergleich
Mit BROR: _vergleiche_flaechen wird (bror, shape_vg, ...) aufgerufen.rotnie geprüft
TestVerfahrensgebietShapeKomplett
test_fallback_auf_temp_enriched_wenn_bror_ladeversagen
BROR-Ladeversagen → Fallback: _vergleiche_flaechen mit shape_vg vs temp_enriched.rotnie geprüft

— (Docstring fehlt)

TestWorkingTab 24TestHandleVerfShape 9TestZoomImProjektKbs 2
flowchart TD
   root(["test_working_tab.py"])
   class root rootnode
   root --> g1["TestWorkingTab (24)"]
@@ -1812,6 +2056,10 @@
   g2 --> t31("bror_layer_erhaelt_qml_stil")
   g2 --> t32("enriched_layer_already_in_project_not_added_again")
   g2 --> t33("busy_state_set_during_execution")
+  root --> g3["TestZoomImProjektKbs (2)"]
+  class g3 groupnode
+  g3 --> t34("alkis_zoom_ueber_zoom_auf_layer")
+  g3 --> t35("shape_zoom_ueber_zoom_auf_layer")
   class t1 ok
   class t2 ok
   class t3 ok
@@ -1845,12 +2093,14 @@
   class t31 ok
   class t32 ok
   class t33 ok
+  class t34 ok
+  class t35 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;
TestfallprüftStatusgeprüft
TestWorkingTab
test_set_busy_updates_button_state
— (Docstring fehlt)grünnie geprüft
TestWorkingTab
test_on_verf_layer_changed_valid_sets_variable
— (Docstring fehlt)grünnie geprüft
TestWorkingTab
test_on_verf_layer_changed_none_clears_variable
— (Docstring fehlt)grünnie geprüft
TestWorkingTab
test_handle_verf_alkis_success_path
verfahrensgebiet_alkis_komplett → 4-Tupel (enriched, flst, bror, FIRST).rotnie geprüft
TestWorkingTab
test_handle_verf_alkis_failure_clears_layer_var
Status NONE → Layer-Variable wird auf '' gesetzt.grünnie geprüft
TestWorkingTab
test_handle_flurst_alkis_first_load_uebernimmt_layer
Erstmaliges Laden über 'Flurstücke laden' fügt den Layer dem Projekt hinzu.grünnie geprüft
TestWorkingTab
test_handle_flurst_aus_gemarkungen_ruft_flurstueck_alkis_ohne_schluessel_abfrage
Der Gemarkungen-Auswahl-Button ruft dieselbe Ladefunktion mit ohne_schluessel_abfrage=True auf (#47).grünnie geprüft
TestWorkingTab
test_handle_flurst_aus_gemarkungen_abbruch_zeigt_keine_zusaetzliche_meldung
Bricht flurstueck_alkis() ab (None, NONE), zeigt der Button keine eigene Meldung – flurstueck_alkis() hat das schon getan (#47).grünnie geprüft
TestWorkingTab
test_handle_grenz_alkis_success_sets_haken
Grenzpunkte erfolgreich geladen → haken_grenz wird gesetzt.rotnie geprüft
TestWorkingTab
test_handle_grenz_alkis_none_result_sets_no_haken
grenzpunkt_alkis liefert (None, None) → kein Haken.rotnie geprüft
TestWorkingTab
test_handle_flurst_alkis_success_sets_haken_and_style
— (Docstring fehlt)grünnie geprüft
TestWorkingTab
test_handle_flurst_alkis_existing_layer_keep_path
— (Docstring fehlt)grünnie geprüft
TestWorkingTab
test_handle_flurst_alkis_invalid_input_returns_early
Status NONE (z. B. Nutzerabbruch) → kein Layer, kein Haken.grünnie geprüft
TestWorkingTab
test_handle_verfahrensgebiet_from_selection_requires_active_layer
Kein aktiver Layer → warning, kein Layer wird erstellt.grünnie geprüft
TestWorkingTab
test_handle_verfahrensgebiet_from_selection_requires_required_fields
Layer ohne Pflichtfelder → warning, kein Layer wird erstellt.grünnie geprüft
TestWorkingTab
test_handle_verfahrensgebiet_from_selection_requires_selection
Keine Flurstück-Auswahl → warning, kein Layer erstellt.grünnie geprüft
TestWorkingTab
test_handle_verfahrensgebiet_from_selection_new_layer_success
Erstlauf ohne bestehenden Layer → Layer wird erstellt und hinzugefügt.grünnie geprüft
TestWorkingTab
test_handle_verfahrensgebiet_from_selection_existing_layer_ergaenzen_dispatch
Entscheidung 'ergaenzen' → ergaenze_verfahrensgebiet wird aufgerufen.grünnie geprüft
TestWorkingTab
test_handle_verfahrensgebiet_from_selection_existing_layer_entfernen_dispatch
Entscheidung 'entfernen' → entferne_aus_verfahrensgebiet wird aufgerufen.grünnie geprüft
TestWorkingTab
test_handle_verfahrensgebiet_from_selection_existing_layer_ersetzen_dispatch
Entscheidung 'ersetzen' → alter Layer entfernt, neuer hinzugefügt.grünnie geprüft
TestWorkingTab
test_aus_liste_button_shows_not_implemented_hint
— (Docstring fehlt)grünnie geprüft
TestWorkingTab
test_handle_gem_alkis_service_reachable_adds_layer
Dienst erreichbar → Layer ins Projekt, Stil angewendet, Haken gesetzt.grünnie geprüft
TestWorkingTab
test_handle_gem_alkis_service_unreachable_shows_warning
Dienst nicht erreichbar (None) → warning, kein addMapLayer.grünnie geprüft
TestWorkingTab
test_handle_gem_alkis_layer_already_exists_shows_info
Layer 'Gemarkungen' bereits vorhanden → info, kein erneutes Laden.grünnie geprüft
TestHandleVerfShape
test_status_none_clears_layer_variable
Status NONE → Layer-Variable wird auf '' gesetzt.grünnie geprüft
TestHandleVerfShape
test_button_always_re_enabled_on_failure
Button muss nach Status NONE wieder freigegeben sein (finally).grünnie geprüft
TestHandleVerfShape
test_verfahrensnummer_nicht_gesetzt_nein_bricht_ab
Verfahrensnummer leer + Nutzer wählt 'Nein' → Vorgang abgebrochen.rotnie geprüft
TestHandleVerfShape
test_verfahrensnummer_nicht_gesetzt_ja_fuehrt_fort
Verfahrensnummer leer + Nutzer wählt 'Ja' → Pipeline wird aufgerufen.rotnie geprüft
TestHandleVerfShape
test_verfahrensnummer_gesetzt_kein_rueckfrage_dialog
Verfahrensnummer gesetzt → kein ask_yes_no-Dialog.grünnie geprüft
TestHandleVerfShape
test_success_path_applies_style_and_sets_haken
Erfolg → verfahrensgebiet.qml angewendet, haken_verf gesetzt, success aufgerufen.grünnie geprüft
TestHandleVerfShape
test_bror_layer_erhaelt_qml_stil
Wenn bror_layer zurückgegeben → BauRaumOderBodenordnungsrecht.qml angewendet.grünnie geprüft
TestHandleVerfShape
test_enriched_layer_already_in_project_not_added_again
Layer bereits im Projekt → kein erneutes addMapLayer für VG-Layer.grünnie geprüft
TestHandleVerfShape
test_busy_state_set_during_execution
Button wird während der Ausführung auf busy gesetzt.grünnie geprüft
-

Heuristik: Name kommt in keiner Testdatei des Pakets vor (Details siehe docs/tests/testkatalog.md). beabsichtigt liest den Docstring der Funktion – ein Vermerk wie „von Test abgesehen, weil …“ oder „Test ausgesetzt, zunächst Refactor“ gilt als bewusste Entscheidung. ungeklärt hat weder Test noch Vermerk.

DateiFunktion/MethodeZeileStatus
functions/beteiligung_pruefung.py_baue_nenner_kennzeichen139ungeklärt
functions/beteiligung_pruefung.py_hole_flurstuecke_layer253ungeklärt
functions/beteiligung_pruefung.py_flurstueckskennzeichen_geometrien258ungeklärt
functions/beteiligung_pruefung.py_try1_listenabgleich279ungeklärt
functions/beteiligung_pruefung.py_lese_vef_vkzf380ungeklärt
functions/flurstueck_alkis.py_vorhandene_kennzeichen80ungeklärt
functions/gemarkung_alkis.pygemarkung_schluessel_von_vg_geometrie212ungeklärt
functions/grenzpunkt_alkis.py_punktort_ta_bbox_param115ungeklärt
functions/grenzpunkt_alkis.py_hat_geometrie573ungeklärt
functions/grenzpunkt_alkis.py_lade_gemarkung_extents_mit_puffer637ungeklärt
functions/grenzpunkt_alkis.py_lade_punktort_ta_batches_per_gemarkung784ungeklärt
functions/knickpunkt_pruefung.py_setze_kategorien_symbologie158ungeklärt
functions/knickpunkt_pruefung.pyerstelle_korrigiertes_polygon604ungeklärt
functions/umringspruefung.py_zerlege_in_teile55ungeklärt
functions/umringspruefung.py_setze_kategorien_symbologie112ungeklärt
functions/umringspruefung.pyumringspruefung152ungeklärt
functions/umringstatistik_grenzpunkte.py_setze_kategorien_symbologie74ungeklärt
functions/umringstatistik_grenzpunkte.py_klassifiziere119ungeklärt
functions/umringstatistik_grenzpunkte.pyumringstatistik_grenzpunkte164ungeklärt
functions/verfahrensgebiet_alkis.py_baue_layer_aus_kombinationen144ungeklärt
functions/verfahrensgebiet_alkis_komplett.py_entferne_hilfs_layer100ungeklärt
functions/verfahrensgebiet_alkis_komplett.py_flaeche_des_layers210ungeklärt
functions/verfahrensgebiet_dialoge.pyask_landkreis_objekte101ungeklärt
functions/verfahrensgebiet_shape_komplett.py_normalisiere_feldname110ungeklärt
functions/verfahrensgebiet_shape_komplett.py_finde_fbschl_index132ungeklärt
functions/verfahrensgebiet_shape_komplett.py_ermittle_gebietstyp_aus_fbschl161ungeklärt
functions/verfahrensgebiet_shape_komplett.py_wende_vergleich_stil_an211ungeklärt
functions/verfahrensgebiet_shape_komplett.py_erstelle_vergleich_layer251ungeklärt
functions/verfahrensgebiet_shape_komplett.py_finde_alle_shp342ungeklärt
ui/tabs/working_tab.pyWorkingTab.handle_beteiligung_pruefen297ungeklärt
ui/tabs/working_tab.pyWorkingTab._haken_label349ungeklärt
ui/tabs/working_tab.pyWorkingTab._restore_verf_layer_selection374ungeklärt
ui/tabs/working_tab.pyWorkingTab._uebernimm_flurstuecke_ergebnis390ungeklärt
ui/tabs/working_tab.pyWorkingTab.handle_umringstatistik777ungeklärt
+ classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestWorkingTab
test_set_busy_updates_button_state
— (Docstring fehlt)grünnie geprüft
TestWorkingTab
test_on_verf_layer_changed_valid_sets_variable
— (Docstring fehlt)grünnie geprüft
TestWorkingTab
test_on_verf_layer_changed_none_clears_variable
— (Docstring fehlt)grünnie geprüft
TestWorkingTab
test_handle_verf_alkis_success_path
verfahrensgebiet_alkis_komplett → 4-Tupel (enriched, flst, bror, FIRST).rotnie geprüft
TestWorkingTab
test_handle_verf_alkis_failure_clears_layer_var
Status NONE → Layer-Variable wird auf '' gesetzt.grünnie geprüft
TestWorkingTab
test_handle_flurst_alkis_first_load_uebernimmt_layer
Erstmaliges Laden über 'Flurstücke laden' fügt den Layer dem Projekt hinzu.grünnie geprüft
TestWorkingTab
test_handle_flurst_aus_gemarkungen_ruft_flurstueck_alkis_ohne_schluessel_abfrage
Der Gemarkungen-Auswahl-Button ruft dieselbe Ladefunktion mit ohne_schluessel_abfrage=True auf (#47).grünnie geprüft
TestWorkingTab
test_handle_flurst_aus_gemarkungen_abbruch_zeigt_keine_zusaetzliche_meldung
Bricht flurstueck_alkis() ab (None, NONE), zeigt der Button keine eigene Meldung – flurstueck_alkis() hat das schon getan (#47).grünnie geprüft
TestWorkingTab
test_handle_grenz_alkis_success_sets_haken
Grenzpunkte erfolgreich geladen → haken_grenz wird gesetzt.rotnie geprüft
TestWorkingTab
test_handle_grenz_alkis_none_result_sets_no_haken
grenzpunkt_alkis liefert (None, None) → kein Haken.rotnie geprüft
TestWorkingTab
test_handle_flurst_alkis_success_sets_haken_and_style
— (Docstring fehlt)grünnie geprüft
TestWorkingTab
test_handle_flurst_alkis_existing_layer_keep_path
— (Docstring fehlt)grünnie geprüft
TestWorkingTab
test_handle_flurst_alkis_invalid_input_returns_early
Status NONE (z. B. Nutzerabbruch) → kein Layer, kein Haken.grünnie geprüft
TestWorkingTab
test_handle_verfahrensgebiet_from_selection_requires_active_layer
Kein aktiver Layer → warning, kein Layer wird erstellt.grünnie geprüft
TestWorkingTab
test_handle_verfahrensgebiet_from_selection_requires_required_fields
Layer ohne Pflichtfelder → warning, kein Layer wird erstellt.grünnie geprüft
TestWorkingTab
test_handle_verfahrensgebiet_from_selection_requires_selection
Keine Flurstück-Auswahl → warning, kein Layer erstellt.grünnie geprüft
TestWorkingTab
test_handle_verfahrensgebiet_from_selection_new_layer_success
Erstlauf ohne bestehenden Layer → Layer wird erstellt und hinzugefügt.grünnie geprüft
TestWorkingTab
test_handle_verfahrensgebiet_from_selection_existing_layer_ergaenzen_dispatch
Entscheidung 'ergaenzen' → ergaenze_verfahrensgebiet wird aufgerufen.grünnie geprüft
TestWorkingTab
test_handle_verfahrensgebiet_from_selection_existing_layer_entfernen_dispatch
Entscheidung 'entfernen' → entferne_aus_verfahrensgebiet wird aufgerufen.grünnie geprüft
TestWorkingTab
test_handle_verfahrensgebiet_from_selection_existing_layer_ersetzen_dispatch
Entscheidung 'ersetzen' → alter Layer entfernt, neuer hinzugefügt.grünnie geprüft
TestWorkingTab
test_aus_liste_button_shows_not_implemented_hint
— (Docstring fehlt)grünnie geprüft
TestWorkingTab
test_handle_gem_alkis_service_reachable_adds_layer
Dienst erreichbar → Layer ins Projekt, Stil angewendet, Haken gesetzt.grünnie geprüft
TestWorkingTab
test_handle_gem_alkis_service_unreachable_shows_warning
Dienst nicht erreichbar (None) → warning, kein addMapLayer.grünnie geprüft
TestWorkingTab
test_handle_gem_alkis_layer_already_exists_shows_info
Layer 'Gemarkungen' bereits vorhanden → info, kein erneutes Laden.grünnie geprüft
TestHandleVerfShape
test_status_none_clears_layer_variable
Status NONE → Layer-Variable wird auf '' gesetzt.grünnie geprüft
TestHandleVerfShape
test_button_always_re_enabled_on_failure
Button muss nach Status NONE wieder freigegeben sein (finally).grünnie geprüft
TestHandleVerfShape
test_verfahrensnummer_nicht_gesetzt_nein_bricht_ab
Verfahrensnummer leer + Nutzer wählt 'Nein' → Vorgang abgebrochen.rotnie geprüft
TestHandleVerfShape
test_verfahrensnummer_nicht_gesetzt_ja_fuehrt_fort
Verfahrensnummer leer + Nutzer wählt 'Ja' → Pipeline wird aufgerufen.rotnie geprüft
TestHandleVerfShape
test_verfahrensnummer_gesetzt_kein_rueckfrage_dialog
Verfahrensnummer gesetzt → kein ask_yes_no-Dialog.grünnie geprüft
TestHandleVerfShape
test_success_path_applies_style_and_sets_haken
Erfolg → verfahrensgebiet.qml angewendet, haken_verf gesetzt, success aufgerufen.grünnie geprüft
TestHandleVerfShape
test_bror_layer_erhaelt_qml_stil
Wenn bror_layer zurückgegeben → BauRaumOderBodenordnungsrecht.qml angewendet.grünnie geprüft
TestHandleVerfShape
test_enriched_layer_already_in_project_not_added_again
Layer bereits im Projekt → kein erneutes addMapLayer für VG-Layer.grünnie geprüft
TestHandleVerfShape
test_busy_state_set_during_execution
Button wird während der Ausführung auf busy gesetzt.grünnie geprüft
TestZoomImProjektKbs
test_alkis_zoom_ueber_zoom_auf_layer
Prüft, dass nach dem Laden aus ALKIS über zoom_auf_layer auf das Verfahrensgebiet gezoomt wird und nicht mit der unumgerechneten Layer-Ausdehnung.grünnie geprüft
TestZoomImProjektKbs
test_shape_zoom_ueber_zoom_auf_layer
Prüft, dass nach dem Laden aus einem Shape über zoom_auf_layer auf das Verfahrensgebiet gezoomt wird und nicht mit der unumgerechneten Layer-Ausdehnung.grünnie geprüft
+

Heuristik: Name kommt in keiner Testdatei des Pakets vor (Details siehe docs/tests/testkatalog.md). beabsichtigt liest den Docstring der Funktion – ein Vermerk wie „von Test abgesehen, weil …“ oder „Test ausgesetzt, zunächst Refactor“ gilt als bewusste Entscheidung. ungeklärt hat weder Test noch Vermerk.

DateiFunktion/MethodeZeileStatus
functions/beteiligung_pruefung.py_baue_nenner_kennzeichen139ungeklärt
functions/beteiligung_pruefung.py_hole_flurstuecke_layer253ungeklärt
functions/beteiligung_pruefung.py_flurstueckskennzeichen_geometrien258ungeklärt
functions/beteiligung_pruefung.py_try1_listenabgleich279ungeklärt
functions/beteiligung_pruefung.py_lese_vef_vkzf380ungeklärt
functions/eigentuemer_suche.py_plz111ungeklärt
functions/eigentuemer_suche.py_ist_gesetzt122ungeklärt
functions/eigentuemer_suche.py_vergleichstext126ungeklärt
functions/eigentuemer_suche.py_spalten_des_layers131ungeklärt
functions/eigentuemer_suche.py_gruppenschluessel162ungeklärt
functions/flurstueck_alkis.py_vorhandene_kennzeichen80ungeklärt
functions/flurstueck_suche.py_normiere_nenner65ungeklärt
functions/flurstueck_suche.py_hole_layer155ungeklärt
functions/gemarkung_alkis.pygemarkung_schluessel_von_vg_geometrie212ungeklärt
functions/grenzpunkt_alkis.py_punktort_ta_bbox_param115ungeklärt
functions/grenzpunkt_alkis.py_hat_geometrie573ungeklärt
functions/grenzpunkt_alkis.py_lade_gemarkung_extents_mit_puffer637ungeklärt
functions/grenzpunkt_alkis.py_lade_punktort_ta_batches_per_gemarkung784ungeklärt
functions/knickpunkt_pruefung.py_setze_kategorien_symbologie158ungeklärt
functions/knickpunkt_pruefung.pyerstelle_korrigiertes_polygon604ungeklärt
functions/umringspruefung.py_zerlege_in_teile55ungeklärt
functions/umringspruefung.py_setze_kategorien_symbologie112ungeklärt
functions/umringspruefung.pyumringspruefung152ungeklärt
functions/umringstatistik_grenzpunkte.py_setze_kategorien_symbologie74ungeklärt
functions/umringstatistik_grenzpunkte.py_klassifiziere119ungeklärt
functions/umringstatistik_grenzpunkte.pyumringstatistik_grenzpunkte164ungeklärt
functions/verfahrensgebiet_alkis.py_baue_layer_aus_kombinationen144ungeklärt
functions/verfahrensgebiet_alkis_komplett.py_entferne_hilfs_layer100ungeklärt
functions/verfahrensgebiet_alkis_komplett.py_flaeche_des_layers210ungeklärt
functions/verfahrensgebiet_dialoge.pybaue_auswahltabelle31ungeklärt
functions/verfahrensgebiet_dialoge.pyask_landkreis_objekte197ungeklärt
functions/verfahrensgebiet_shape_komplett.py_normalisiere_feldname110ungeklärt
functions/verfahrensgebiet_shape_komplett.py_finde_fbschl_index132ungeklärt
functions/verfahrensgebiet_shape_komplett.py_ermittle_gebietstyp_aus_fbschl161ungeklärt
functions/verfahrensgebiet_shape_komplett.py_wende_vergleich_stil_an211ungeklärt
functions/verfahrensgebiet_shape_komplett.py_erstelle_vergleich_layer251ungeklärt
functions/verfahrensgebiet_shape_komplett.py_finde_alle_shp342ungeklärt
ui/eigentuemer_anzeige.py_ortsteil27ungeklärt
ui/eigentuemer_anzeige.pyEigentuemerAnzeige.closeEvent88ungeklärt
ui/tabs/eigentuemer_tab.pyEigentuemerLayerAuswahl.showPopup73ungeklärt
ui/tabs/eigentuemer_tab.pyEigentuemerTab._zoome_auf_auswahl230ungeklärt
ui/tabs/eigentuemer_tab.pyEigentuemerTab._zeige_treffer273ungeklärt
ui/tabs/eigentuemer_tab.pyEigentuemerTab._anzeige_wurde_geschlossen311ungeklärt
ui/tabs/eigentuemer_tab.pyEigentuemerTab._aktualisiere_sitzungsstatus341ungeklärt
ui/tabs/eigentuemer_tab.pyEigentuemerTab._korrektur_layer_id356ungeklärt
ui/tabs/eigentuemer_tab.pyEigentuemerTab._korrektur_vorschau360ungeklärt
ui/tabs/working_tab.pyWorkingTab.handle_beteiligung_pruefen297ungeklärt
ui/tabs/working_tab.pyWorkingTab._haken_label349ungeklärt
ui/tabs/working_tab.pyWorkingTab._restore_verf_layer_selection374ungeklärt
ui/tabs/working_tab.pyWorkingTab._uebernimm_flurstuecke_ergebnis390ungeklärt
ui/tabs/working_tab.pyWorkingTab.handle_umringstatistik777ungeklärt
diff --git a/docs/tests/testkatalog.md b/docs/tests/testkatalog.md index e4bad4f..00b480f 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 `d8a74fea7cc6`) +Stand des Prüf-Audits: `docs/status/testpruefungen.json` (SHA-256 `b2525df27b91`) -Gesamt: 3 Pakete, 49 Testdateien, 605 Testfälle – 562 grün, 35 rot (Baseline), 8 übersprungen. -Mit Beschreibung (Docstring): 460 von 605 (76 %). -Fachlich geprüft: 227 von 605 (38 %) aktuell, 0 veraltet seit Codeänderung, 378 nie geprüft. -Strukturelle Lücken (heuristisch, Namensabgleich): 143 von 413 (35 %) Funktionen/Methoden ohne erkennbaren Testbezug – Abschnitt „Ungetestete Funktionen“. +Gesamt: 3 Pakete, 55 Testdateien, 689 Testfälle – 646 grün, 35 rot (Baseline), 8 übersprungen. +Mit Beschreibung (Docstring): 544 von 689 (79 %). +Fachlich geprüft: 244 von 689 (35 %) aktuell, 0 veraltet seit Codeänderung, 445 nie geprüft. +Strukturelle Lücken (heuristisch, Namensabgleich): 160 von 470 (34 %) 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 | 353 | 353 | 0 | 0 | 353 von 353 (100 %) | 227 von 353 (64 %) | 70 von 229 (31 %) | -| `sn_verfahrensgebiet` | 12 | 208 | 166 | 34 | 8 | 106 von 208 (51 %) | 0 von 208 (0 %) | 34 von 104 (33 %) | +| `sn_basis` | 32 | 356 | 356 | 0 | 0 | 356 von 356 (100 %) | 244 von 356 (69 %) | 70 von 229 (31 %) | +| `sn_verfahrensgebiet` | 18 | 289 | 247 | 34 | 8 | 187 von 289 (65 %) | 0 von 289 (0 %) | 51 von 161 (32 %) | | `sn_plan41` | 5 | 44 | 43 | 1 | 0 | 1 von 44 (2 %) | 0 von 44 (0 %) | 39 von 80 (49 %) | -| **Summe** | **49** | **605** | **562** | **35** | **8** | **460 von 605 (76 %)** | **227 von 605 (38 %)** | **143 von 413 (35 %)** | +| **Summe** | **55** | **689** | **646** | **35** | **8** | **544 von 689 (79 %)** | **244 von 689 (35 %)** | **160 von 470 (34 %)** | ### Legende @@ -36,7 +36,7 @@ Strukturelle Lücken (heuristisch, Namensabgleich): 143 von 413 (35 %) Funktione ## Paket `sn_basis` -Plattform-Plugin, Ordner `Plugin_SN_Basis` – 32 Testdateien mit 353 Testfällen (353 grün, 0 rot, 0 übersprungen). +Plattform-Plugin, Ordner `Plugin_SN_Basis` – 32 Testdateien mit 356 Testfällen (356 grün, 0 rot, 0 übersprungen). ### `Plugin_SN_Basis/tests/test_base_dockwidget.py` @@ -612,26 +612,29 @@ Worum es in der Datei geht: Tests für sn_basis/functions/qgiscore_wrapper.py::p Testgruppen: -- `PolygonZuLinieTests` (7 Testfälle): — (Docstring fehlt) +- `PolygonZuLinieTests` (9 Testfälle): — (Docstring fehlt) - `LayerExistsInGpkgTests` (4 Testfälle): — (Docstring fehlt) -- `CreateBufferLayerTests` (3 Testfälle): Deckt nur die Wächter ab: die eigentliche Pufferbildung importiert `qgis.core.QgsFeature` +- `CreateBufferLayerTests` (4 Testfälle): Deckt nur die Wächter ab: die eigentliche Pufferbildung importiert `qgis.core.QgsFeature` | Testfall | prüft | Status | geprüft | | --- | --- | --- | --- | -| `PolygonZuLinieTests.test_none_liefert_none` | Prüft, dass polygon_zu_linie für None-Eingabe None liefert. | grün | nie geprüft | -| `PolygonZuLinieTests.test_leere_geometrie_liefert_none` | Prüft, dass eine leere Geometrie None liefert. | grün | nie geprüft | -| `PolygonZuLinieTests.test_stufe1_nutzt_boundary_wenn_vorhanden` | Prü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_polygon` | Prüft, dass ohne boundary() die Ringe eines einfachen Polygons manuell extrahiert werden. | grün | nie geprüft | -| `PolygonZuLinieTests.test_stufe2_extrahiert_alle_ringe_bei_multipolygon` | Prüft, dass bei einem MultiPolygon die Ringe aller Teilpolygone extrahiert werden. | grün | nie geprüft | -| `PolygonZuLinieTests.test_stufe3_fallback_wenn_keine_ringe_extrahierbar` | Prüft, dass bei fehlgeschlagener Ringextraktion auf convertToType zurückgefallen wird. | grün | nie geprüft | -| `PolygonZuLinieTests.test_alle_stufen_scheitern_liefert_none` | Prüft, dass polygon_zu_linie None liefert, wenn Ringextraktion und convertToType beide scheitern. | grün | nie geprüft | -| `LayerExistsInGpkgTests.test_fehlende_datei_liefert_false` | Prüft, dass eine nicht vorhandene GPKG-Datei False liefert. | grün | nie geprüft | -| `LayerExistsInGpkgTests.test_leerer_pfad_oder_layername_liefert_false` | Prüft, dass ein leerer Pfad oder Layername False liefert. | grün | nie geprüft | -| `LayerExistsInGpkgTests.test_vorhandener_layer_liefert_true` | Prüft, dass ein in gpkg_contents eingetragener Layername als vorhanden erkannt wird. | grün | nie geprüft | -| `LayerExistsInGpkgTests.test_fehlender_layer_liefert_false` | Prüft, dass ein nicht in gpkg_contents eingetragener Layername als nicht vorhanden gilt. | grün | nie geprüft | -| `CreateBufferLayerTests.test_ohne_qgis_liefert_none` | Prüft, dass create_buffer_layer ohne verfügbares QGIS None liefert. | grün | nie geprüft | -| `CreateBufferLayerTests.test_fehlender_source_layer_liefert_none` | Prüft, dass ein fehlender Quelllayer (None) None liefert, auch wenn QGIS verfügbar wäre. | grün | nie geprüft | -| `CreateBufferLayerTests.test_source_layer_ohne_getfeatures_liefert_none` | Prüft, dass ein Quelllayer ohne getFeatures()-Methode None liefert. | grün | nie geprüft | +| `PolygonZuLinieTests.test_none_liefert_none` | Prüft, dass polygon_zu_linie für None-Eingabe None liefert. | grün | geprüft am 2026-10-26 | +| `PolygonZuLinieTests.test_leere_geometrie_liefert_none` | Prüft, dass eine leere Geometrie None liefert. | grün | geprüft am 2026-10-26 | +| `PolygonZuLinieTests.test_stufe1_nutzt_boundary_wenn_vorhanden` | Prüft, dass eine Geometrie mit boundary() (QGIS 3.x-Pfad) deren Ergebnis direkt liefert. | grün | geprüft am 2026-10-26 | +| `PolygonZuLinieTests.test_stufe2_extrahiert_ringe_bei_einfachem_polygon` | Prüft, dass ohne boundary() die Ringe eines einfachen Polygons manuell extrahiert werden. | grün | geprüft am 2026-10-26 | +| `PolygonZuLinieTests.test_stufe2_extrahiert_alle_ringe_bei_multipolygon` | Prüft, dass bei einem MultiPolygon die Ringe aller Teilpolygone extrahiert werden. | grün | geprüft am 2026-10-26 | +| `PolygonZuLinieTests.test_stufe1_leerer_umring_faellt_auf_stufe2_zurueck` | Prüft, dass ein leeres Ergebnis von boundary() auf die manuelle Ringextraktion zurückfällt. | grün | geprüft am 2026-10-26 | +| `PolygonZuLinieTests.test_stufe1_fehler_faellt_auf_stufe2_zurueck` | Prüft, dass ein Fehler in boundary() auf die manuelle Ringextraktion zurückfällt. | grün | geprüft am 2026-10-26 | +| `PolygonZuLinieTests.test_stufe3_fallback_wenn_keine_ringe_extrahierbar` | Prüft, dass bei fehlgeschlagener Ringextraktion auf convertToType(1, True) zurückgefallen wird. | grün | geprüft am 2026-10-26 | +| `PolygonZuLinieTests.test_alle_stufen_scheitern_liefert_none` | Prüft, dass polygon_zu_linie None liefert, wenn Ringextraktion und convertToType beide scheitern. | grün | geprüft am 2026-10-26 | +| `LayerExistsInGpkgTests.test_fehlende_datei_liefert_false` | Prüft, dass eine nicht vorhandene GPKG-Datei False liefert. | grün | geprüft am 2026-10-26 | +| `LayerExistsInGpkgTests.test_leerer_pfad_oder_layername_liefert_false` | Prüft, dass ein leerer Pfad oder Layername False liefert. | grün | geprüft am 2026-10-26 | +| `LayerExistsInGpkgTests.test_vorhandener_layer_liefert_true` | Prüft, dass ein in gpkg_contents eingetragener Layername als vorhanden erkannt wird. | grün | geprüft am 2026-10-26 | +| `LayerExistsInGpkgTests.test_fehlender_layer_liefert_false` | Prüft, dass ein nicht in gpkg_contents eingetragener Layername als nicht vorhanden gilt. | grün | geprüft am 2026-10-26 | +| `CreateBufferLayerTests.test_ohne_qgis_liefert_none` | Prüft, dass create_buffer_layer ohne verfügbares QGIS None liefert. | grün | geprüft am 2026-10-26 | +| `CreateBufferLayerTests.test_fehlender_source_layer_liefert_none` | Prüft, dass ein fehlender Quelllayer (None) None liefert, auch wenn QGIS verfügbar wäre. | grün | geprüft am 2026-10-26 | +| `CreateBufferLayerTests.test_source_layer_ohne_getfeatures_liefert_none` | Prüft, dass ein Quelllayer ohne getFeatures()-Methode None liefert. | grün | geprüft am 2026-10-26 | +| `CreateBufferLayerTests.test_source_layer_ohne_features_liefert_none` | Prüft, dass ein Quelllayer ohne Features None liefert, statt einen leeren Pufferlayer anzulegen. | grün | geprüft am 2026-10-26 | ### `Plugin_SN_Basis/tests/test_qgisui_wrapper_helpers.py` @@ -792,7 +795,7 @@ Testgruppen: ## Paket `sn_verfahrensgebiet` -Fachplugin, Ordner `Plugin_SN_Verfahrensgebiet` – 12 Testdateien mit 208 Testfällen (166 grün, 34 rot, 8 übersprungen). +Fachplugin, Ordner `Plugin_SN_Verfahrensgebiet` – 18 Testdateien mit 289 Testfällen (247 grün, 34 rot, 8 übersprungen). ### `Plugin_SN_Verfahrensgebiet/tests/test_beteiligung_pruefung.py` @@ -849,6 +852,127 @@ Testgruppen: | `TestDockWidget.test_init_tabs_with_services_injects_available_services` | — (Docstring fehlt) | grün | nie geprüft | | `TestDockWidget.test_init_tabs_with_services_reports_errors` | — (Docstring fehlt) | grün | nie geprüft | +### `Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_anzeige.py` + +Worum es in der Datei geht: Tests für das Anzeigefenster des Eigentümer-Datenabgleichs (#56). + +Testgruppen: + +- `TestAnzeigetext` (6 Testfälle): — (Docstring fehlt) +- `TestFensterOeffnen` (3 Testfälle): — (Docstring fehlt) + +| Testfall | prüft | Status | geprüft | +| --- | --- | --- | --- | +| `TestAnzeigetext.test_name_anschrift_email` | Prüft, dass die Anzeige Name mit Anrede und Titel, die mehrzeilige Anschrift mit Ortsteil und die E-Mail zeigt. | grün | nie geprüft | +| `TestAnzeigetext.test_keine_internen_angaben` | Prüft, dass der Eigentümer weder Konten, Personen-IDs, Rechtsperson-Wert noch das Kennzeichen „verstorben“ sieht. | grün | nie geprüft | +| `TestAnzeigetext.test_fehlende_email_wird_genannt` | Prüft, dass eine fehlende E-Mail ausdrücklich als „keine angegeben“ erscheint. | grün | nie geprüft | +| `TestAnzeigetext.test_werte_werden_maskiert` | Prüft, dass Sonderzeichen aus den Daten maskiert werden und kein HTML einschleusen. | grün | nie geprüft | +| `TestAnzeigetext.test_mehrere_eintraege_getrennt` | Prüft, dass mehrere Einträge untereinander, durch eine Linie getrennt, erscheinen. | grün | nie geprüft | +| `TestAnzeigetext.test_leer_nur_platzhalter` | Prüft, dass die leere Anzeige nur den neutralen Platzhalter zeigt. | grün | nie geprüft | +| `TestFensterOeffnen.test_normales_fenster_in_standardgroesse` | Prüft, dass das Anzeigefenster ohne gemerkte Lage als normales Fenster mit Rahmen in Standardgröße öffnet, nie im Vollbild. | grün | nie geprüft | +| `TestFensterOeffnen.test_gemerkte_lage_wird_wiederhergestellt` | Prüft, dass eine gemerkte Größe und Lage der letzten Sitzung wiederhergestellt wird. | grün | nie geprüft | +| `TestFensterOeffnen.test_unbrauchbare_lage_ergibt_standardgroesse` | Prüft, dass eine nicht wiederherstellbare Lage auf die Standardgröße zurückfällt. | grün | nie geprüft | + +### `Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_korrektur.py` + +Worum es in der Datei geht: Tests für die Korrekturen beim Eigentümer-Datenabgleich (#56). + +Testgruppen: + +- `TestAenderungen` (4 Testfälle): — (Docstring fehlt) +- `TestKorrekturPfad` (3 Testfälle): — (Docstring fehlt) +- `TestSchreiben` (5 Testfälle): — (Docstring fehlt) + +| Testfall | prüft | Status | geprüft | +| --- | --- | --- | --- | +| `TestAenderungen.test_feldwerte` | Prüft, dass alle korrigierbaren Felder vorbelegt werden, mehrere E-Mails durch Komma getrennt. | grün | nie geprüft | +| `TestAenderungen.test_nur_echte_aenderungen` | Prüft, dass nur geänderte Felder zählen und Leerraum am Rand oder doppelte Leerzeichen keine Änderung sind. | grün | nie geprüft | +| `TestAenderungen.test_feld_leeren_ist_aenderung` | Prüft, dass das Leeren eines Feldes als Änderung zählt. | grün | nie geprüft | +| `TestAenderungen.test_wende_an` | Prüft, dass die Änderungen im angezeigten Eintrag landen und E-Mails wieder getrennt werden; Konten bleiben. | grün | nie geprüft | +| `TestKorrekturPfad.test_textdatei_provider` | Prüft, dass aus der Quelle eines Textdatei-Layers (file-URI, Leerzeichen kodiert) der Pfad neben der CSV wird. | grün | nie geprüft | +| `TestKorrekturPfad.test_ogr_provider` | Prüft, dass auch eine OGR-Quelle mit Layernamen den Pfad neben der CSV ergibt. | grün | nie geprüft | +| `TestKorrekturPfad.test_keine_csv` | Prüft, dass für Quellen ohne CSV-Datei kein Pfad vorgeschlagen wird. | grün | nie geprüft | +| `TestSchreiben.test_neue_datei_mit_kopfzeile_und_bom` | Prüft, dass eine neue Korrektur-CSV mit BOM, Kopfzeile und je Änderung einer Zeile mit Exportspaltennamen entsteht. | grün | nie geprüft | +| `TestSchreiben.test_anhaengen_ohne_zweite_kopfzeile` | Prüft, dass weitere Korrekturen angehängt werden, ohne Kopfzeile oder BOM zu wiederholen. | grün | nie geprüft | +| `TestSchreiben.test_ohne_aenderung_keine_datei` | Prüft, dass ohne Änderung keine Datei angelegt wird. | grün | nie geprüft | +| `TestSchreiben.test_schreibfehler_wird_weitergereicht` | Prüft, dass ein nicht schreibbarer Pfad als OSError beim Aufrufer ankommt. | grün | nie geprüft | +| `TestSchreiben.test_schreibt_nichts_auf_die_konsole` | Prüft, dass das Festhalten von Korrekturen keine Personendaten auf die Konsole schreibt (Datenschutz). | grün | nie geprüft | + +### `Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_suche.py` + +Worum es in der Datei geht: Tests für die Eigentümersuche im Serienbriefexport (#56). + +Testgruppen: + +- `TestLayererkennung` (2 Testfälle): — (Docstring fehlt) +- `TestSuche` (10 Testfälle): — (Docstring fehlt) +- `TestAnzeigeformen` (1 Testfälle): — (Docstring fehlt) + +| Testfall | prüft | Status | geprüft | +| --- | --- | --- | --- | +| `TestLayererkennung.test_layer_mit_name_und_vorname_ist_eigentuemerlayer` | Prüft, dass ein Layer mit den Spalten Nachname und Vorname als Eigentümerdatei erkannt wird, auch mit BOM und anderer Schreibweise. | grün | nie geprüft | +| `TestLayererkennung.test_eigentuemerlayer_im_projekt` | Prüft, dass aus dem Projekt nur passende Layer kommen, nach Namen sortiert. | grün | nie geprüft | +| `TestSuche.test_ohne_eingabe_fehler` | Prüft, dass ohne Name und Vorname nicht die ganze Datei gelistet, sondern um eine Eingabe gebeten wird. | grün | nie geprüft | +| `TestSuche.test_layer_ohne_pflichtspalten` | Prüft, dass ein Layer ohne Nachname/Vorname mit Hinweis auf den Serienbriefexport abgelehnt wird. | grün | nie geprüft | +| `TestSuche.test_teilstring_ohne_gross_kleinschreibung` | Prüft, dass Name und Vorname als Teilstring ohne Rücksicht auf Groß-/Kleinschreibung gesucht werden. | grün | nie geprüft | +| `TestSuche.test_umlaute_und_eszett` | Prüft, dass „Müller“ auch „Mueller“ findet und „Strauss“ auch „Strauß“. | grün | nie geprüft | +| `TestSuche.test_gleiche_person_gleiche_anschrift_zusammengefasst` | Prüft, dass Zeilen mit gleichem Namen und gleicher Anschrift ein Treffer werden und Konten, Personen-IDs und E-Mails gesammelt werden. | grün | nie geprüft | +| `TestSuche.test_andere_anschrift_eigener_treffer` | Prüft, dass dieselbe Person mit anderer Anschrift ein eigener Treffer bleibt, sortiert nach Wohnort. | grün | nie geprüft | +| `TestSuche.test_kennzeichen_verstorben` | Prüft, dass „verstorben“ beim Exportwert 1 (auch als Zahl gelesen) gesetzt ist und bei 0, Leerem und NULL nicht. | grün | nie geprüft | +| `TestSuche.test_rechtsperson_als_rohwert` | Prüft, dass PER_RECHTSPERSON unverändert angezeigt wird (0, 1, 5, 9; noch nicht entschlüsselt) und abweichende Werte einer Person gesammelt werden. | grün | nie geprüft | +| `TestSuche.test_plz_mit_fuehrender_null` | Prüft, dass eine von QGIS als Zahl gelesene PLZ wieder fünfstellig mit führender Null erscheint und Zeilen dadurch zusammenfinden. | grün | nie geprüft | +| `TestSuche.test_suche_gibt_nichts_aus` | Prüft, dass die Suche keine Personendaten auf die Konsole schreibt (Datenschutz). | grün | nie geprüft | +| `TestAnzeigeformen.test_name_und_anschrift` | Prüft, dass Name mit Titel und einzeilige Anschrift mit Ortsteil lesbar zusammengesetzt werden. | grün | nie geprüft | + +### `Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_tab.py` + +Worum es in der Datei geht: Tests für den Tab „Eigentümer“ – Flurstückssuche, Eigentümersuche, Anzeige und Korrektur (#56). + +Testgruppen: + +- `TestFlurstueckSuchen` (5 Testfälle): — (Docstring fehlt) +- `TestEigentuemerSuchen` (4 Testfälle): — (Docstring fehlt) +- `TestTrefferliste` (3 Testfälle): — (Docstring fehlt) +- `TestSitzung` (7 Testfälle): — (Docstring fehlt) +- `TestKorrekturLabel` (4 Testfälle): — (Docstring fehlt) +- `TestKorrektur` (5 Testfälle): — (Docstring fehlt) +- `TestKorrekturDatei` (2 Testfälle): — (Docstring fehlt) +- `TestDockWidgetTabs` (1 Testfälle): — (Docstring fehlt) + +| Testfall | prüft | Status | geprüft | +| --- | --- | --- | --- | +| `TestFlurstueckSuchen.test_ohne_flurstueckslayer_erscheint_hinweisdialog` | Prüft, dass ohne Layer „Flurstücke“ ein Dialog zum Laden von Verfahrensgebiet und Flurstücken erscheint. | grün | nie geprüft | +| `TestFlurstueckSuchen.test_eingabefehler_als_warnung` | Prüft, dass eine ungültige Eingabe als Warnung in der Meldungsleiste erscheint, nicht als Dialog. | grün | nie geprüft | +| `TestFlurstueckSuchen.test_kein_treffer` | Prüft, dass ohne Treffer ein Hinweis erscheint und keine Auswahl gesetzt wird. | grün | nie geprüft | +| `TestFlurstueckSuchen.test_treffer_werden_ausgewaehlt_und_angezoomt` | Prüft, dass Treffer im Flurstückslayer ausgewählt, angezoomt und gemeldet werden. | grün | nie geprüft | +| `TestFlurstueckSuchen.test_ohne_kartenansicht_bleibt_auswahl` | Prüft, dass die Auswahl auch ohne Kartenansicht gesetzt und gemeldet wird. | grün | nie geprüft | +| `TestEigentuemerSuchen.test_ohne_eigentuemerdatei_warnung` | Prüft, dass ohne gewählte Eigentümerdatei die Liste aufgefrischt und dann auf das Laden der CSV hingewiesen wird. | grün | nie geprüft | +| `TestEigentuemerSuchen.test_suchfehler_als_warnung` | Prüft, dass ein Fehler der Suche (z. B. leere Eingabe) als Warnung erscheint. | grün | nie geprüft | +| `TestEigentuemerSuchen.test_kein_treffer_ohne_namen_in_meldung` | Prüft, dass ohne Treffer ein Hinweis erscheint, der den gesuchten Namen nicht wiederholt (Datenschutz). | grün | nie geprüft | +| `TestEigentuemerSuchen.test_treffer_oeffnen_trefferliste_und_ersetzen_die_alte` | Prüft, dass Treffer in einer neuen Trefferliste mit Anzeige-Rückruf erscheinen, eine offene alte Liste geschlossen wird und die Eingaben an die Suche gehen. | grün | nie geprüft | +| `TestTrefferliste.test_trefferzeile_mit_hinweis` | Prüft, dass die Trefferliste Name, Anschrift, E-Mail, den Rohwert von PER_RECHTSPERSON und das Kennzeichen „verstorben“ zeigt. | grün | nie geprüft | +| `TestTrefferliste.test_ausgewaehlte_eigentuemer` | Prüft, dass das Trefferfenster die in der Tabelle gewählten Einträge zurückgibt. | grün | nie geprüft | +| `TestTrefferliste.test_daten_anzeigen_gibt_auswahl_weiter` | Prüft, dass „Daten anzeigen“ die Auswahl der Trefferliste an den Tab übergibt. | grün | nie geprüft | +| `TestSitzung.test_sitzung_beginnen_oeffnet_leeres_fenster_mit_rahmen` | Prüft, dass „Sitzung beginnen“ ein leeres Anzeigefenster als normales Fenster öffnet (ohne gemerkte Lage beim ersten Mal). | grün | nie geprüft | +| `TestSitzung.test_lage_gilt_fuer_naechste_sitzung` | Prüft, dass Größe und Lage des Fensters beim Beenden gemerkt und in der nächsten Sitzung wiederverwendet werden. | grün | nie geprüft | +| `TestSitzung.test_daten_anzeigen_beginnt_sitzung_bei_bedarf` | Prüft, dass „Daten anzeigen“ ohne laufende Sitzung diese beginnt und die Einträge zeigt; die Statuszeile nennt nur die Anzahl. | grün | nie geprüft | +| `TestSitzung.test_daten_anzeigen_ohne_auswahl` | Prüft, dass „Daten anzeigen“ ohne Auswahl nur einen Hinweis gibt und keine Sitzung beginnt. | grün | nie geprüft | +| `TestSitzung.test_anzeige_leeren_laesst_fenster_offen` | Prüft, dass „Anzeige leeren“ die Daten entfernt, das Fenster aber nicht schließt. | grün | nie geprüft | +| `TestSitzung.test_sitzung_beenden_schliesst_fenster` | Prüft, dass „Sitzung beenden“ das Anzeigefenster schließt und die angezeigten Daten vergisst. | grün | nie geprüft | +| `TestSitzung.test_von_aussen_geschlossen_beendet_sitzung` | Prüft, dass ein über den Fensterrahmen geschlossenes Anzeigefenster die Sitzung beendet und seine Lage gemerkt wird. | grün | nie geprüft | +| `TestKorrekturLabel.test_ohne_eigentuemerdatei` | Prüft, dass ohne Eigentümerdatei unter den Knöpfen steht, dass keine gewählt ist. | grün | nie geprüft | +| `TestKorrekturLabel.test_pfad_neben_der_eigentuemerdatei` | Prüft, dass der Pfad der Korrektur-CSV angezeigt wird, mit Hinweis, solange sie noch nicht angelegt ist. | grün | nie geprüft | +| `TestKorrekturLabel.test_ohne_csv_quelle_wird_abgefragt` | Prüft, dass bei einer Quelle ohne CSV angekündigt wird, dass der Speicherort beim ersten Speichern abgefragt wird. | grün | nie geprüft | +| `TestKorrekturLabel.test_gewaehlter_pfad_wird_angezeigt` | Prüft, dass ein einmal gewählter Speicherort angezeigt wird. | grün | nie geprüft | +| `TestKorrektur.test_korrektur_wird_festgehalten_und_angezeigt` | Prüft, dass eine Korrektur in die Korrektur-CSV geschrieben, sofort angezeigt und ohne Namen gemeldet wird. | grün | nie geprüft | +| `TestKorrektur.test_ohne_aenderung_nichts_schreiben` | Prüft, dass ein unverändert gespeicherter Dialog nichts schreibt. | grün | nie geprüft | +| `TestKorrektur.test_abbruch_nichts_schreiben` | Prüft, dass ein abgebrochener Korrekturdialog nichts schreibt. | grün | nie geprüft | +| `TestKorrektur.test_schreibfehler_warnung_und_anzeige_unveraendert` | Prüft, dass bei einem Schreibfehler gewarnt, die Anzeige nicht geändert und der Pfad beim nächsten Mal neu bestimmt wird. | grün | nie geprüft | +| `TestKorrektur.test_ohne_anzeige_keine_korrektur` | Prüft, dass ohne angezeigte Daten kein Korrekturdialog erscheint. | grün | nie geprüft | +| `TestKorrekturDatei.test_vorschlag_neben_der_eigentuemerdatei` | Prüft, dass die Korrektur-CSV ohne Rückfrage neben der Eigentümerdatei liegt, wenn der Ordner beschreibbar ist, und gemerkt wird. | grün | nie geprüft | +| `TestKorrekturDatei.test_ohne_csv_quelle_wird_gefragt` | Prüft, dass ohne verwertbare CSV-Quelle nach dem Speicherort gefragt wird; Abbrechen liefert keinen Pfad. | grün | nie geprüft | +| `TestDockWidgetTabs.test_tab_ist_im_dockwidget_eingetragen` | Prüft, dass der Tab „Eigentümer“ im DockWidget direkt nach dem Bearbeitungs-Tab steht. | grün | nie geprüft | + ### `Plugin_SN_Verfahrensgebiet/tests/test_flurstueck_alkis.py` Worum es in der Datei geht: Unit-Tests für das flurstueck_alkis-Modul. @@ -875,6 +999,30 @@ Testgruppen: | `TestFlurstueckAlkisAnhaengenDedup.test_append_ohne_kennzeichen_feld_haengt_alles_an` | Prüft, dass ohne flurstueckskennzeichen-Feld weiterhin alle Features angehängt werden (Rückfallverhalten). | grün | nie geprüft | | `TestFlurstueckAlkisAnhaengenDedup.test_ohne_schluessel_abfrage_append_dedup` | ohne_schluessel_abfrage=True: Anhängen dedupliziert trotzdem, ohne nach Schlüsseln zu fragen (#47). | grün | nie geprüft | +### `Plugin_SN_Verfahrensgebiet/tests/test_flurstueck_suche.py` + +Worum es in der Datei geht: Tests für die Flurstückssuche im Layer „Flurstücke“ (#56). + +Testgruppen: + +- `TestEingabe` (6 Testfälle): — (Docstring fehlt) +- `TestSuche` (6 Testfälle): — (Docstring fehlt) + +| Testfall | prüft | Status | geprüft | +| --- | --- | --- | --- | +| `TestEingabe.test_flurstuecksnummer_mit_und_ohne_nenner` | Prüft, dass Zähler und Nenner getrennt und führende Nullen entfernt werden. | grün | nie geprüft | +| `TestEingabe.test_ungueltige_flurstuecksnummer` | Prüft, dass leere oder unzulässige Flurstücksnummern abgelehnt werden. | grün | nie geprüft | +| `TestEingabe.test_kennzeichen_zerlegen` | Prüft, dass Gemarkung, Zähler und Nenner aus dem ALKIS-Kennzeichen gelesen werden. | grün | nie geprüft | +| `TestEingabe.test_gemarkungsnummer_aus_ziffern` | Prüft, dass Ziffern als Gemarkungsnummer gelten, auch ohne führende Nullen oder als langer Schlüssel. | grün | nie geprüft | +| `TestEingabe.test_gemarkungsname_ueber_gemarkungslayer` | Prüft, dass ein Gemarkungsname ohne Rücksicht auf Großschreibung in alle passenden Nummern übersetzt wird. | grün | nie geprüft | +| `TestEingabe.test_gemarkungsname_ohne_layer_oder_unbekannt` | Prüft, dass ein Name ohne Gemarkungslayer oder ohne Treffer eine verständliche Meldung ergibt. | grün | nie geprüft | +| `TestSuche.test_mit_nenner_genau_ein_treffer` | Prüft, dass mit Nenner nur das passende Flurstück der Gemarkung gefunden wird. | grün | nie geprüft | +| `TestSuche.test_ohne_nenner_alle_mit_diesem_zaehler` | Prüft, dass ohne Nenner alle Flurstücke mit dem Zähler gefunden werden, aber nur in der gesuchten Gemarkung. | grün | nie geprüft | +| `TestSuche.test_kein_treffer` | Prüft, dass ein nicht vorhandenes Flurstück eine leere Trefferliste ergibt. | grün | nie geprüft | +| `TestSuche.test_layer_ohne_kennzeichenfeld` | Prüft, dass ein Flurstückslayer ohne Feld „flurstueckskennzeichen“ gemeldet wird. | grün | nie geprüft | +| `TestSuche.test_fehlender_flurstueckslayer_bricht_ab` | Prüft, dass die Suche ohne Layer „Flurstücke“ mit dem Hinweis abbricht, zuerst Verfahrensgebiet und Flurstücke zu laden. | grün | nie geprüft | +| `TestSuche.test_suche_im_projekt_mit_gemarkungsname` | Prüft, dass die Suche im Projekt den Gemarkungsnamen auflöst und Layer samt Treffern liefert. | grün | nie geprüft | + ### `Plugin_SN_Verfahrensgebiet/tests/test_gemarkung_alkis.py` Worum es in der Datei geht: Unit-Tests für `sn_verfahrensgebiet.functions.gemarkung_alkis`. @@ -1034,6 +1182,19 @@ Testgruppen: | `TestVerfahrensgebietAlkisKomplett.test_landkreis_modus_wird_bei_fehlender_vkz_verwendet` | Keine Verfahrensnummer, aber Landkreis gesetzt → Landkreis-Suchpfad | grün | nie geprüft | | `TestVerfahrensgebietAlkisKomplett.test_landkreis_modus_nur_laden_ueberspringt_dialog2` | nur_laden=True → Funktion kehrt sofort zurück, Dialog 2 (Gemarkung | grün | nie geprüft | +### `Plugin_SN_Verfahrensgebiet/tests/test_verfahrensgebiet_dialoge.py` + +Worum es in der Datei geht: Tests für die gemeinsame Auswahltabelle in verfahrensgebiet_dialoge (#56). + +Testgruppen: + +- `TestAuswahltabelle` (2 Testfälle): — (Docstring fehlt) + +| Testfall | prüft | Status | geprüft | +| --- | --- | --- | --- | +| `TestAuswahltabelle.test_suchfilter_ueber_alle_spalten` | Prüft, dass der Suchfilter Teilstrings in jeder Spalte ohne Groß-/Kleinschreibung findet und leer alles zeigt. | grün | nie geprüft | +| `TestAuswahltabelle.test_auswahl_nach_umsortieren` | Prüft, dass die Auswahl über den gespeicherten Index auf die ursprünglichen Zeilen zurückgeführt wird, auch wenn die Tabelle umsortiert ist. | grün | nie geprüft | + ### `Plugin_SN_Verfahrensgebiet/tests/test_verfahrensgebiet_edit_service.py` Worum es in der Datei geht: Unit-Tests für das Verfahrensgebiet-Edit-Service-Modul. @@ -1125,6 +1286,7 @@ Testgruppen: - `TestWorkingTab` (24 Testfälle): — (Docstring fehlt) - `TestHandleVerfShape` (9 Testfälle): — (Docstring fehlt) +- `TestZoomImProjektKbs` (2 Testfälle): Zoom auf das neue Verfahrensgebiet rechnet in das KBS der Kartenansicht um (Basis #99). | Testfall | prüft | Status | geprüft | | --- | --- | --- | --- | @@ -1161,6 +1323,8 @@ Testgruppen: | `TestHandleVerfShape.test_bror_layer_erhaelt_qml_stil` | Wenn bror_layer zurückgegeben → BauRaumOderBodenordnungsrecht.qml angewendet. | grün | nie geprüft | | `TestHandleVerfShape.test_enriched_layer_already_in_project_not_added_again` | Layer bereits im Projekt → kein erneutes addMapLayer für VG-Layer. | grün | nie geprüft | | `TestHandleVerfShape.test_busy_state_set_during_execution` | Button wird während der Ausführung auf busy gesetzt. | grün | nie geprüft | +| `TestZoomImProjektKbs.test_alkis_zoom_ueber_zoom_auf_layer` | Prüft, dass nach dem Laden aus ALKIS über zoom_auf_layer auf das Verfahrensgebiet gezoomt wird und nicht mit der unumgerechneten Layer-Ausdehnung. | grün | nie geprüft | +| `TestZoomImProjektKbs.test_shape_zoom_ueber_zoom_auf_layer` | Prüft, dass nach dem Laden aus einem Shape über zoom_auf_layer auf das Verfahrensgebiet gezoomt wird und nicht mit der unumgerechneten Layer-Ausdehnung. | grün | nie geprüft | ## Paket `sn_plan41` @@ -1277,11 +1441,11 @@ Arbeitsliste: Diese Testfälle haben keinen Docstring; was sie fachlich prüfen, aus dem Quelltext erschließen. Jeder Eintrag braucht eine einzeilige Beschreibung im Testfall, dann verschwindet er hier von selbst. -### `sn_basis` – 0 von 353 Testfällen ohne Beschreibung +### `sn_basis` – 0 von 356 Testfällen ohne Beschreibung Keine Lücken. -### `sn_verfahrensgebiet` – 102 von 208 Testfällen ohne Beschreibung +### `sn_verfahrensgebiet` – 102 von 289 Testfällen ohne Beschreibung #### `Plugin_SN_Verfahrensgebiet/tests/test_beteiligung_pruefung.py` (25 von 25) @@ -1409,7 +1573,7 @@ Keine Lücken. - `TestVerfahrensgebietShapeKomplett.test_punktort_ta_none_gibt_shape_vg_zurueck_und_zeigt_fehler` - `TestVerfahrensgebietShapeKomplett.test_temp_layer_wird_stets_entfernt` -#### `Plugin_SN_Verfahrensgebiet/tests/test_working_tab.py` (6 von 33) – auch der Modul-Docstring fehlt +#### `Plugin_SN_Verfahrensgebiet/tests/test_working_tab.py` (6 von 35) – auch der Modul-Docstring fehlt - `TestWorkingTab.test_set_busy_updates_button_state` - `TestWorkingTab.test_on_verf_layer_changed_valid_sets_variable` @@ -1591,7 +1755,7 @@ Heuristik, kein Beweis: Diese Funktionen und Methoden kommen unter ihrem Namen i - `PrintTab._on_druckbereich_changed` (Zeile 374) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 - `PrintTab._format_druckpuffer_label` (Zeile 432) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 -### `sn_verfahrensgebiet` – 34 von 104 (33 %) ohne Testbezug (34 ungeklärt, 0 beabsichtigt) +### `sn_verfahrensgebiet` – 51 von 161 (32 %) ohne Testbezug (51 ungeklärt, 0 beabsichtigt) #### `functions/beteiligung_pruefung.py` (5) @@ -1601,10 +1765,23 @@ Heuristik, kein Beweis: Diese Funktionen und Methoden kommen unter ihrem Namen i - `_try1_listenabgleich` (Zeile 279) — ungeklärt - `_lese_vef_vkzf` (Zeile 380) — ungeklärt +#### `functions/eigentuemer_suche.py` (5) + +- `_plz` (Zeile 111) — ungeklärt +- `_ist_gesetzt` (Zeile 122) — ungeklärt +- `_vergleichstext` (Zeile 126) — ungeklärt +- `_spalten_des_layers` (Zeile 131) — ungeklärt +- `_gruppenschluessel` (Zeile 162) — ungeklärt + #### `functions/flurstueck_alkis.py` (1) - `_vorhandene_kennzeichen` (Zeile 80) — ungeklärt +#### `functions/flurstueck_suche.py` (2) + +- `_normiere_nenner` (Zeile 65) — ungeklärt +- `_hole_layer` (Zeile 155) — ungeklärt + #### `functions/gemarkung_alkis.py` (1) - `gemarkung_schluessel_von_vg_geometrie` (Zeile 212) — ungeklärt @@ -1642,9 +1819,10 @@ Heuristik, kein Beweis: Diese Funktionen und Methoden kommen unter ihrem Namen i - `_entferne_hilfs_layer` (Zeile 100) — ungeklärt - `_flaeche_des_layers` (Zeile 210) — ungeklärt -#### `functions/verfahrensgebiet_dialoge.py` (1) +#### `functions/verfahrensgebiet_dialoge.py` (2) -- `ask_landkreis_objekte` (Zeile 101) — ungeklärt +- `baue_auswahltabelle` (Zeile 31) — ungeklärt +- `ask_landkreis_objekte` (Zeile 197) — ungeklärt #### `functions/verfahrensgebiet_shape_komplett.py` (6) @@ -1655,6 +1833,21 @@ Heuristik, kein Beweis: Diese Funktionen und Methoden kommen unter ihrem Namen i - `_erstelle_vergleich_layer` (Zeile 251) — ungeklärt - `_finde_alle_shp` (Zeile 342) — ungeklärt +#### `ui/eigentuemer_anzeige.py` (2) + +- `_ortsteil` (Zeile 27) — ungeklärt +- `EigentuemerAnzeige.closeEvent` (Zeile 88) — ungeklärt + +#### `ui/tabs/eigentuemer_tab.py` (7) + +- `EigentuemerLayerAuswahl.showPopup` (Zeile 73) — ungeklärt +- `EigentuemerTab._zoome_auf_auswahl` (Zeile 230) — ungeklärt +- `EigentuemerTab._zeige_treffer` (Zeile 273) — ungeklärt +- `EigentuemerTab._anzeige_wurde_geschlossen` (Zeile 311) — ungeklärt +- `EigentuemerTab._aktualisiere_sitzungsstatus` (Zeile 341) — ungeklärt +- `EigentuemerTab._korrektur_layer_id` (Zeile 356) — ungeklärt +- `EigentuemerTab._korrektur_vorschau` (Zeile 360) — ungeklärt + #### `ui/tabs/working_tab.py` (5) - `WorkingTab.handle_beteiligung_pruefen` (Zeile 297) — ungeklärt