Prüfstand

Testkatalog der sn_*-Plugins — was die Suite heute prüft, auf einen Blick.
Quelle: docs/tests/testkatalog.md
Baseline: docs/status/testbaseline.json (SHA-256 aeabc946a7f3)
Prüf-Audit: docs/status/testpruefungen.json (SHA-256 68b590c8feef)
501Testfälle
458grün
35rot (Baseline)
71%mit Docstring
11%aktuell geprüft
46Testdateien
46%ohne Testbezug
Verteilung je Paket
sn_basis29 Dateien · 249 Testfälle
sn_verfahrensgebiet12 Dateien · 208 Testfälle
sn_plan415 Dateien · 44 Testfälle

sn_basis

Plattform-Plugin · Ordner Plugin_SN_Basis · 29 Testdateien · 249 Testfälle

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

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

— (Docstring fehlt)

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

— (Docstring fehlt)

TestDataGrabber 6
flowchart TD
  root(["test_datagrabber.py"])
  class root rootnode
  root --> g1["TestDataGrabber (6)"]
  class g1 groupnode
  g1 --> t1("analyze_source_type_detects_excel")
  g1 --> t2("analyze_source_type_returns_unknown_filetype")
  g1 --> t3("analyze_source_type_detects_service_when_file_check_fails")
  g1 --> t4("analyze_source_type_returns_unbekannte_quelle_on_full_failure")
  g1 --> t5("run_returns_success_summary_with_valid_rows")
  g1 --> t6("run_returns_failure_summary_without_rows")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  class t6 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestDataGrabber
test_analyze_source_type_detects_excel
Prüft, dass eine erreichbare .xlsx-Datei als Quelltyp 'excel' erkannt wird.grüngeprüft am 2026-09-16
TestDataGrabber
test_analyze_source_type_returns_unknown_filetype
Prüft, dass eine erreichbare Datei mit unbekannter Endung als 'unbekannter_dateityp' eingestuft wird.grüngeprüft am 2026-09-16
TestDataGrabber
test_analyze_source_type_detects_service_when_file_check_fails
Prüft, dass eine Quelle als 'dienst' erkannt wird, wenn die Dateiprüfung fehlschlägt, die URL aber erreichbar ist.grüngeprüft am 2026-09-16
TestDataGrabber
test_analyze_source_type_returns_unbekannte_quelle_on_full_failure
Prüft, dass eine Quelle als 'unbekannte_quelle' eingestuft wird, wenn weder Datei- noch Linkprüfung erfolgreich sind.grüngeprüft am 2026-09-16
TestDataGrabber
test_run_returns_success_summary_with_valid_rows
Prüft, dass run() bei erfolgreichem Excel-Import eine Erfolgsmeldung mit den geladenen Zeilen liefert.grüngeprüft am 2026-09-16
TestDataGrabber
test_run_returns_failure_summary_without_rows
Prüft, dass run() bei nicht erkennbarer Quelle eine Fehlermeldung ohne Zeilen liefert.grüngeprüft am 2026-09-16

— (Docstring fehlt)

TestDateipruefer 12
flowchart TD
  root(["test_dateipruefer.py"])
  class root rootnode
  root --> g1["TestDateipruefer (12)"]
  class g1 groupnode
  g1 --> t1("leereingabe_erlaubt")
  g1 --> t2("leereingabe_nicht_erlaubt")
  g1 --> t3("standarddatei_vorschlagen")
  g1 --> t4("temporaer_erlaubt")
  g1 --> t5("datei_nicht_gefunden")
  g1 --> t6("datei_ok")
  g1 --> t7("erkenne_dateityp_unterscheidet_excel_datenbank_und_unbekannt")
  g1 --> t8("pfad_verbindet_relativen_pfad_mit_basispfad")
  g1 --> t9("pfad_laesst_absoluten_pfad_unveraendert")
  g1 --> t10("ist_gueltiger_gpkg_pfad_akzeptiert_vorhandenes_verzeichnis")
  g1 --> t11("ist_gueltiger_gpkg_pfad_lehnt_falsche_endung_ab")
  g1 --> t12("ist_gueltiger_gpkg_pfad_lehnt_fehlendes_verzeichnis_ab")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  class t6 ok
  class t7 ok
  class t8 ok
  class t9 ok
  class t10 ok
  class t11 ok
  class t12 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestDateipruefer
test_leereingabe_erlaubt
Prüft, dass eine leere Pfadangabe bei leereingabe_erlaubt=True als 'leereingabe_erlaubt' ohne Kontext gemeldet wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_leereingabe_nicht_erlaubt
Prüft, dass eine leere Pfadangabe ohne leereingabe_erlaubt als 'leereingabe_nicht_erlaubt' abgelehnt wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_standarddatei_vorschlagen
Prüft, dass bei leerer Pfadangabe mit gesetzter Standarddatei 'standarddatei_vorschlagen' mit dem Standardpfad als Kontext geliefert wird.grünnie geprüft
TestDateipruefer
test_temporaer_erlaubt
Prüft, dass eine leere Pfadangabe bei temporaer_erlaubt=True als 'temporaer_erlaubt' ohne Kontext gemeldet wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_datei_nicht_gefunden
Prüft, dass ein nicht existierender Dateipfad als 'datei_nicht_gefunden' mit dem Pfad als Kontext abgelehnt wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_datei_ok
Prüft, dass ein existierender Dateipfad als 'ok' mit dem Pfad als Kontext bestätigt wird.grüngeprüft am 2026-09-17
TestDateipruefer
test_erkenne_dateityp_unterscheidet_excel_datenbank_und_unbekannt
Prüft, dass erkenne_dateityp .xlsx als 'excel', .gpkg/.sqlite als 'datenbank' und Rest als 'unbekannt' erkennt.grünnie geprüft
TestDateipruefer
test_pfad_verbindet_relativen_pfad_mit_basispfad
Prüft, dass _pfad einen relativen Pfad mit dem Basisverzeichnis verbindet.grünnie geprüft
TestDateipruefer
test_pfad_laesst_absoluten_pfad_unveraendert
Prüft, dass _pfad einen bereits absoluten Pfad nicht mit dem Basisverzeichnis verbindet.grünnie geprüft
TestDateipruefer
test_ist_gueltiger_gpkg_pfad_akzeptiert_vorhandenes_verzeichnis
Prüft, dass ein .gpkg-Pfad mit vorhandenem Zielverzeichnis als gültig gilt.grünnie geprüft
TestDateipruefer
test_ist_gueltiger_gpkg_pfad_lehnt_falsche_endung_ab
Prüft, dass ein Pfad ohne .gpkg-Endung als ungültig gilt, auch bei vorhandenem Verzeichnis.grünnie geprüft
TestDateipruefer
test_ist_gueltiger_gpkg_pfad_lehnt_fehlendes_verzeichnis_ab
Prüft, dass ein .gpkg-Pfad in einem nicht vorhandenen Verzeichnis als ungültig gilt.grünnie geprüft

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

DetermineSpatialFilterTests 7BuildProviderUrlTests 9FetchFeaturesTests 5DatenabrufOrchestrierungTests 3
flowchart TD
  root(["test_datenabruf.py"])
  class root rootnode
  root --> g1["DetermineSpatialFilterTests (7)"]
  class g1 groupnode
  g1 --> t1("raumfilter_ohne_liefert_none")
  g1 --> t2("fehlender_layer_liefert_none")
  g1 --> t3("unbekannter_raumfilter_liefert_none")
  g1 --> t4("verfahrensgebiet_liefert_extent_und_crs")
  g1 --> t5("verfahrensgebiet_ohne_extent_liefert_none")
  g1 --> t6("pufferlayer_liefert_extent_des_pufferlayers")
  g1 --> t7("pufferlayer_ohne_puffer_liefert_none")
  root --> g2["BuildProviderUrlTests (9)"]
  class g2 groupnode
  g2 --> t8("wms_liefert_link_unveraendert")
  g2 --> t9("url_praefix_wird_entfernt")
  g2 --> t10("wfs_baut_standardparameter_und_bbox_mit_crs")
  g2 --> t11("wfs_repariert_doppeltes_fragezeichen")
  g2 --> t12("wfs_ohne_raumfilter_setzt_keine_bbox")
  g2 --> t13("rest_provider_haengt_query_endpunkt_an")
  g2 --> t14("rest_provider_mit_bbox_baut_geometry_envelope_und_srid")
  g2 --> t15("default_provider_haengt_generischen_bbox_parameter_an")
  g2 --> t16("default_provider_ohne_raumfilter_laesst_query_unveraendert")
  root --> g3["FetchFeaturesTests (5)"]
  class g3 groupnode
  g3 --> t17("wms_liefert_keine_features_ohne_fehler")
  g3 --> t18("abbruch_vor_abruf_liefert_fehlermeldung")
  g3 --> t19("json_featurecollection_wird_geparst")
  g3 --> t20("netzwerkfehler_wird_als_fehlermeldung_gemeldet")
  g3 --> t21("wfs_xml_liefert_anzahl_aus_numberofmatched")
  root --> g4["DatenabrufOrchestrierungTests (3)"]
  class g4 groupnode
  g4 --> t22("fehlende_pflichtfelder_werden_als_ungueltig_gemeldet")
  g4 --> t23("wms_zeile_ohne_features_landet_in_ausserhalb")
  g4 --> t24("abbruch_ueber_progress_stoppt_weitere_zeilen")
  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
  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
DetermineSpatialFilterTests
test_raumfilter_ohne_liefert_none
Prüft, dass Raumfilter 'ohne' unabhängig vom Layer immer None liefert.grünnie geprüft
DetermineSpatialFilterTests
test_fehlender_layer_liefert_none
Prüft, dass ohne Verfahrensgebiet-Layer kein Raumfilter gebaut wird.grünnie geprüft
DetermineSpatialFilterTests
test_unbekannter_raumfilter_liefert_none
Prüft, dass ein unbekannter Raumfilter-Wert None liefert, statt einen Fehler zu werfen.grünnie geprüft
DetermineSpatialFilterTests
test_verfahrensgebiet_liefert_extent_und_crs
Prüft, dass Raumfilter 'Verfahrensgebiet' Extent und CRS des Verfahrensgebiet-Layers liefert.grünnie geprüft
DetermineSpatialFilterTests
test_verfahrensgebiet_ohne_extent_liefert_none
Prüft, dass ein Verfahrensgebiet-Layer ohne ermittelbaren Extent None liefert.grünnie geprüft
DetermineSpatialFilterTests
test_pufferlayer_liefert_extent_des_pufferlayers
Prüft, dass Raumfilter 'Pufferlayer' Extent und CRS des erzeugten Pufferlayers liefert.grünnie geprüft
DetermineSpatialFilterTests
test_pufferlayer_ohne_puffer_liefert_none
Prüft, dass 'Pufferlayer' None liefert, wenn kein Pufferlayer erzeugt werden konnte.grünnie geprüft
BuildProviderUrlTests
test_wms_liefert_link_unveraendert
Prüft, dass bei Provider WMS der Link unverändert durchgereicht wird, auch mit Raumfilter.grünnie geprüft
BuildProviderUrlTests
test_url_praefix_wird_entfernt
Prüft, dass ein vorangestelltes 'url=' aus dem Link entfernt wird.grünnie geprüft
BuildProviderUrlTests
test_wfs_baut_standardparameter_und_bbox_mit_crs
Prüft, dass WFS-Abrufe Standardparameter, umbenanntes TYPENAMES und BBOX mit CRS-URN erhalten.grünnie geprüft
BuildProviderUrlTests
test_wfs_repariert_doppeltes_fragezeichen
Prüft, dass ein zweites '?' im WFS-Link zu '&' korrigiert wird, statt eine ungültige URL zu erzeugen.grünnie geprüft
BuildProviderUrlTests
test_wfs_ohne_raumfilter_setzt_keine_bbox
Prüft, dass WFS ohne Raumfilter (bbox_geom=None) keinen BBOX-Parameter setzt.grünnie geprüft
BuildProviderUrlTests
test_rest_provider_haengt_query_endpunkt_an
Prüft, dass REST/ArcGIS-Links ohne '/query'-Endpunkt automatisch ergänzt werden.grünnie geprüft
BuildProviderUrlTests
test_rest_provider_mit_bbox_baut_geometry_envelope_und_srid
Prüft, dass REST-Abrufe mit Raumfilter eine Geometry-Envelope und inSR/outSR aus dem CRS setzen.grünnie geprüft
BuildProviderUrlTests
test_default_provider_haengt_generischen_bbox_parameter_an
Prüft, dass ein unbekannter Provider mit Raumfilter einen generischen bbox-Parameter erhält.grünnie geprüft
BuildProviderUrlTests
test_default_provider_ohne_raumfilter_laesst_query_unveraendert
Prüft, dass ein unbekannter Provider ohne Raumfilter keinen bbox-Parameter ergänzt.grünnie geprüft
FetchFeaturesTests
test_wms_liefert_keine_features_ohne_fehler
Prüft, dass bei Provider WMS kein Featureabruf stattfindet und kein Fehler gemeldet wird.grünnie geprüft
FetchFeaturesTests
test_abbruch_vor_abruf_liefert_fehlermeldung
Prüft, dass ein bereits gesetzter Abbruch vor dem eigentlichen Abruf erkannt wird.grünnie geprüft
FetchFeaturesTests
test_json_featurecollection_wird_geparst
Prüft, dass eine JSON-FeatureCollection-Antwort in eine Feature-Liste umgewandelt wird.grünnie geprüft
FetchFeaturesTests
test_netzwerkfehler_wird_als_fehlermeldung_gemeldet
Prüft, dass ein fehlgeschlagener HTTP-Abruf eine Fehlermeldung statt einer Ausnahme liefert.grünnie geprüft
FetchFeaturesTests
test_wfs_xml_liefert_anzahl_aus_numberofmatched
Prüft, dass eine WFS-XML-Antwort ohne JSON die Trefferzahl aus numberOfMatched übernimmt.grünnie geprüft
DatenabrufOrchestrierungTests
test_fehlende_pflichtfelder_werden_als_ungueltig_gemeldet
Prüft, dass eine Zeile ohne Link/Provider mit Aktion 'pflichtfelder_fehlen' gemeldet und übersprungen wird.grünnie geprüft
DatenabrufOrchestrierungTests
test_wms_zeile_ohne_features_landet_in_ausserhalb
Prüft, dass eine erfolgreich abgerufene WMS-Zeile mit 0 Features als 'ausserhalb' gezählt wird.grünnie geprüft
DatenabrufOrchestrierungTests
test_abbruch_ueber_progress_stoppt_weitere_zeilen
Prüft, dass ein Abbruch über das Progress-Objekt die Verarbeitung weiterer Zeilen stoppt.grünnie geprüft

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

WriteLayerToGpkgTests 2ResolveStylePathTests 3SchreibeDatenTests 4LadeLayerTests 3SchreibeLogTests 2
flowchart TD
  root(["test_datenschreiber.py"])
  class root rootnode
  root --> g1["WriteLayerToGpkgTests (2)"]
  class g1 groupnode
  g1 --> t1("ungueltiger_layer_liefert_fehlermeldung")
  g1 --> t2("gueltiger_layer_wird_ohne_fehler_geschrieben")
  root --> g2["ResolveStylePathTests (3)"]
  class g2 groupnode
  g2 --> t3("leerer_stilpfad_liefert_none")
  g2 --> t4("absoluter_vorhandener_stilpfad_wird_aufgeloest")
  g2 --> t5("nicht_vorhandener_stilpfad_liefert_none")
  root --> g3["SchreibeDatenTests (4)"]
  class g3 groupnode
  g3 --> t6("ohne_speicherort_wirft_valueerror")
  g3 --> t7("eintrag_ohne_gueltigen_layer_wird_uebersprungen")
  g3 --> t8("erfolgreicher_eintrag_liefert_layer_path_und_thema")
  g3 --> t9("ohne_thema_wird_ident_als_layername_verwendet")
  root --> g4["LadeLayerTests (3)"]
  class g4 groupnode
  g4 --> t10("ohne_layer_path_wird_uebersprungen")
  g4 --> t11("gueltiger_layer_wird_dem_projekt_hinzugefuegt")
  g4 --> t12("ungueltiger_layer_meldet_layer_nicht_gefunden")
  root --> g5["SchreibeLogTests (2)"]
  class g5 groupnode
  g5 --> t13("ohne_speicherort_wirft_valueerror")
  g5 --> t14("schreibt_json_datei_mit_ergebnissen_und_gibt_pfad_zurueck")
  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
  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
WriteLayerToGpkgTests
test_ungueltiger_layer_liefert_fehlermeldung
Prüft, dass ein ungültiger Layer eine Fehlermeldung statt eines Absturzes liefert.grünnie geprüft
WriteLayerToGpkgTests
test_gueltiger_layer_wird_ohne_fehler_geschrieben
Prüft, dass ein gültiger Layer im Mock-Modus ohne Fehlermeldung geschrieben wird.grünnie geprüft
ResolveStylePathTests
test_leerer_stilpfad_liefert_none
Prüft, dass ein leerer oder fehlender Stilpfad None liefert.grünnie geprüft
ResolveStylePathTests
test_absoluter_vorhandener_stilpfad_wird_aufgeloest
Prüft, dass ein absoluter, vorhandener Stilpfad normalisiert und unverändert erkannt wird.grünnie geprüft
ResolveStylePathTests
test_nicht_vorhandener_stilpfad_liefert_none
Prüft, dass ein nicht vorhandener Stilpfad None liefert, statt einen ungültigen Pfad zurückzugeben.grünnie geprüft
SchreibeDatenTests
test_ohne_speicherort_wirft_valueerror
Prüft, dass schreibe_Daten ohne Speicherort einen ValueError wirft.grünnie geprüft
SchreibeDatenTests
test_eintrag_ohne_gueltigen_layer_wird_uebersprungen
Prüft, dass ein Eintrag ohne gültigen Layer übersprungen wird und ein Fehlerergebnis meldet.grünnie geprüft
SchreibeDatenTests
test_erfolgreicher_eintrag_liefert_layer_path_und_thema
Prüft, dass ein gültiger Layer einen Layer-Path mit GPKG-Pfad und Layername liefert.grünnie geprüft
SchreibeDatenTests
test_ohne_thema_wird_ident_als_layername_verwendet
Prüft, dass ohne passendes Thema in processed_results der ident als Layername verwendet wird.grünnie geprüft
LadeLayerTests
test_ohne_layer_path_wird_uebersprungen
Prüft, dass ein Eintrag ohne layer_path übersprungen wird, ohne einen Fehler zu melden.grünnie geprüft
LadeLayerTests
test_gueltiger_layer_wird_dem_projekt_hinzugefuegt
Prüft, dass ein gültig ladbarer Layer ohne Fehlermeldung verarbeitet wird.grünnie geprüft
LadeLayerTests
test_ungueltiger_layer_meldet_layer_nicht_gefunden
Prüft, dass ein ungültig ladbarer Layer als 'layer_nicht_gefunden' gemeldet wird.grünnie geprüft
SchreibeLogTests
test_ohne_speicherort_wirft_valueerror
Prüft, dass schreibe_log ohne Speicherort einen ValueError wirft.grünnie geprüft
SchreibeLogTests
test_schreibt_json_datei_mit_ergebnissen_und_gibt_pfad_zurueck
Prüft, dass schreibe_log eine lesbare JSON-Log-Datei erzeugt und deren Pfad zurückgibt.grünnie geprüft

Tests für sn_basis/ui/dockmanager.py (nur ein Dock gleichzeitig sichtbar, Issue #65).

DockManagerShowTests 6
flowchart TD
  root(["test_dockmanager.py"])
  class root rootnode
  root --> g1["DockManagerShowTests (6)"]
  class g1 groupnode
  g1 --> t1("none_dock_meldet_fehler_und_zeigt_nichts_an")
  g1 --> t2("setzt_objectname_wenn_leer")
  g1 --> t3("entfernt_andere_sn_docks_aber_nicht_sich_selbst")
  g1 --> t4("zeigt_neues_dock_mit_default_area_an")
  g1 --> t5("fehler_beim_entfernen_wird_als_warnung_gemeldet")
  g1 --> t6("fehler_beim_anzeigen_wird_gemeldet")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  class t6 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
DockManagerShowTests
test_none_dock_meldet_fehler_und_zeigt_nichts_an
Prüft, dass ein fehlendes Dock-Widget (None) einen Fehler meldet und nichts anzeigt.grünnie geprüft
DockManagerShowTests
test_setzt_objectname_wenn_leer
Prüft, dass ein Dock ohne Namen einen technischen Namen mit dem Präfix 'sn_dock_' erhält.grünnie geprüft
DockManagerShowTests
test_entfernt_andere_sn_docks_aber_nicht_sich_selbst
Prüft, dass andere sn_basis-Docks entfernt werden, das neue Dock und fremde Widgets aber unangetastet bleiben.grünnie geprüft
DockManagerShowTests
test_zeigt_neues_dock_mit_default_area_an
Prüft, dass ein neues Dock mit der Standard-Area (DockAreaRight) angezeigt wird.grünnie geprüft
DockManagerShowTests
test_fehler_beim_entfernen_wird_als_warnung_gemeldet
Prüft, dass ein Fehler beim Entfernen alter Docks nur gewarnt und das neue Dock trotzdem angezeigt wird.grünnie geprüft
DockManagerShowTests
test_fehler_beim_anzeigen_wird_gemeldet
Prüft, dass ein Fehler beim Anzeigen des Docks als Fehler gemeldet wird.grünnie geprüft

Tests für sn_basis/modules/excel_importer.py (Excel-Import für Linklisten, Issue #63).

ImportXlsxTests 5ExcelImporterKonstruktorTests 2
flowchart TD
  root(["test_excel_importer.py"])
  class root rootnode
  root --> g1["ImportXlsxTests (5)"]
  class g1 groupnode
  g1 --> t1("erfolgreicher_import_liefert_zeilen_als_dicts")
  g1 --> t2("fehlende_datei_liefert_leere_liste")
  g1 --> t3("arbeitsblatt_ohne_header_liefert_leere_liste_und_meldet_kein_header")
  g1 --> t4("header_zeile_nur_leere_werte_liefert_kein_header")
  g1 --> t5("nicht_lesbare_datei_liefert_leere_liste_und_meldet_read_error")
  root --> g2["ExcelImporterKonstruktorTests (2)"]
  class g2 groupnode
  g2 --> t6("ohne_dateipfad_wirft_valueerror")
  g2 --> t7("ohne_pruefmanager_wirft_valueerror")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  class t6 ok
  class t7 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
ImportXlsxTests
test_erfolgreicher_import_liefert_zeilen_als_dicts
Prüft, dass eine gültige Excel-Datei als Liste von Dicts mit den Header-Spalten geliefert wird.grünnie geprüft
ImportXlsxTests
test_fehlende_datei_liefert_leere_liste
Prüft, dass eine nicht vorhandene Datei eine leere Liste liefert, statt eine Ausnahme zu werfen.grünnie geprüft
ImportXlsxTests
test_arbeitsblatt_ohne_header_liefert_leere_liste_und_meldet_kein_header
Prüft, dass ein leeres Arbeitsblatt ohne Header-Zeile 'kein_header' meldet und eine leere Liste liefert.grünnie geprüft
ImportXlsxTests
test_header_zeile_nur_leere_werte_liefert_kein_header
Prüft, dass eine Header-Zeile aus ausschließlich leeren Zellen ebenfalls als 'kein_header' gilt.grünnie geprüft
ImportXlsxTests
test_nicht_lesbare_datei_liefert_leere_liste_und_meldet_read_error
Prüft, dass eine Datei mit ungültigem Excel-Inhalt 'read_error' meldet und eine leere Liste liefert.grünnie geprüft
ExcelImporterKonstruktorTests
test_ohne_dateipfad_wirft_valueerror
Prüft, dass ExcelImporter ohne Dateipfad einen ValueError wirft.grünnie geprüft
ExcelImporterKonstruktorTests
test_ohne_pruefmanager_wirft_valueerror
Prüft, dass ExcelImporter ohne Pruefmanager einen ValueError wirft.grünnie geprüft

Unit-Tests für `sn_basis.functions.laenderkennung`.

TestGetLaenderkennung 5
flowchart TD
  root(["test_laenderkennung.py"])
  class root rootnode
  root --> g1["TestGetLaenderkennung (5)"]
  class g1 groupnode
  g1 --> t1("bekannter_praefix_gibt_kennung_zurueck")
  g1 --> t2("praefix_gross_klein_unabhaengig")
  g1 --> t3("unbekannter_praefix_wirft_keyerror")
  g1 --> t4("ohne_argument_wird_aus_aufrufendem_modul_abgeleitet")
  g1 --> t5("mapping_enthaelt_sachsen")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestGetLaenderkennung
test_bekannter_praefix_gibt_kennung_zurueck
Prüft, dass der Präfix 'sn' die ALKIS-Länderkennung '14' für Sachsen liefert.grüngeprüft am 2026-09-17
TestGetLaenderkennung
test_praefix_gross_klein_unabhaengig
Prüft, dass die Präfixsuche groß-/kleinschreibungsunabhängig ist.grüngeprüft am 2026-09-17
TestGetLaenderkennung
test_unbekannter_praefix_wirft_keyerror
Prüft, dass ein unbekannter Präfix einen KeyError auslöst.grüngeprüft am 2026-09-17
TestGetLaenderkennung
test_ohne_argument_wird_aus_aufrufendem_modul_abgeleitet
Prüft, dass ohne Argument der Präfix aus dem Modulnamen des Aufrufers abgeleitet wird.grüngeprüft am 2026-09-17
TestGetLaenderkennung
test_mapping_enthaelt_sachsen
Prüft, dass die Mapping-Tabelle LAENDERKENNUNGEN einen Eintrag für Sachsen ('sn' -> '14') enthält.grüngeprüft am 2026-09-17

Tests für sn_basis/functions/landkreise.py::_lade_landkreise (Issue #65).

LadeLandkreiseTests 2
flowchart TD
  root(["test_landkreise.py"])
  class root rootnode
  root --> g1["LadeLandkreiseTests (2)"]
  class g1 groupnode
  g1 --> t1("laedt_die_echte_landkreisliste_nicht_leer")
  g1 --> t2("fehlende_datei_liefert_leere_liste")
  class t1 ok
  class t2 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
LadeLandkreiseTests
test_laedt_die_echte_landkreisliste_nicht_leer
Prüft, dass _lade_landkreise die echte landkreise.json als nicht-leere Liste von (Kennzahl, Name)-Tupeln liefert.grünnie geprüft
LadeLandkreiseTests
test_fehlende_datei_liefert_leere_liste
Prüft, dass eine nicht lesbare Datenquelle eine leere Liste liefert, statt eine Ausnahme zu werfen.grünnie geprüft

Tests für sn_basis/modules/LayerLoader.py (Layer erzeugen/filtern/laden, Issue #63).

CreateLayerTests 7TransformGeometryTests 3TransformExtentTests 2FilterByExtentTests 6FilterByLayerTests 4AddToProjectTests 3
flowchart TD
  root(["test_layerloader.py"])
  class root rootnode
  root --> g1["CreateLayerTests (7)"]
  class g1 groupnode
  g1 --> t1("wfs_baut_uri_ohne_getfeature_parameter")
  g1 --> t2("wfs_mit_url_praefix_wird_nicht_doppelt_gesetzt")
  g1 --> t3("wms_baut_url_praefix_und_nutzt_rasterlayer")
  g1 --> t4("rest_featureserver_ergaenzt_layer_index")
  g1 --> t5("ogr_provider_nutzt_link_direkt")
  g1 --> t6("ungueltiger_layer_meldet_layer_nicht_verfuegbar")
  g1 --> t7("ausnahme_beim_erstellen_wird_abgefangen")
  root --> g2["TransformGeometryTests (3)"]
  class g2 groupnode
  g2 --> t8("fehlender_layer_liefert_geometrie_unveraendert")
  g2 --> t9("gleiche_crs_liefert_geometrie_unveraendert")
  g2 --> t10("unterschiedliche_crs_klont_und_transformiert_geometrie")
  root --> g3["TransformExtentTests (2)"]
  class g3 groupnode
  g3 --> t11("gleiche_crs_liefert_extent_unveraendert")
  g3 --> t12("unterschiedliche_crs_nutzt_coordinate_transform")
  root --> g4["FilterByExtentTests (6)"]
  class g4 groupnode
  g4 --> t13("ungueltiger_layer_wird_unveraendert_zurueckgegeben")
  g4 --> t14("ohne_extent_wird_layer_unveraendert_zurueckgegeben")
  g4 --> t15("falscher_layertyp_wird_unveraendert_zurueckgegeben")
  g4 --> t16("keine_treffer_liefert_none")
  g4 --> t17("abbruch_liefert_none_und_meldet_needs_user_action")
  g4 --> t18("erfolgreicher_filter_liefert_neuen_layer_mit_features")
  root --> g5["FilterByLayerTests (4)"]
  class g5 groupnode
  g5 --> t19("ungueltiger_layer_oder_filterlayer_wird_unveraendert_zurueckgegeben")
  g5 --> t20("filterlayer_ohne_features_liefert_none")
  g5 --> t21("erfolgreicher_geometriefilter_liefert_neuen_layer")
  g5 --> t22("keine_ueberschneidung_liefert_none")
  root --> g6["AddToProjectTests (3)"]
  class g6 groupnode
  g6 --> t23("gueltiger_layer_wird_dem_projekt_hinzugefuegt")
  g6 --> t24("ungueltiger_layer_wird_nicht_hinzugefuegt")
  g6 --> t25("none_layer_wird_nicht_hinzugefuegt")
  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
  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
CreateLayerTests
test_wfs_baut_uri_ohne_getfeature_parameter
Prüft, dass für WFS die GetFeature-spezifischen Parameter aus der URI entfernt werden.grünnie geprüft
CreateLayerTests
test_wfs_mit_url_praefix_wird_nicht_doppelt_gesetzt
Prüft, dass ein bereits vorhandenes 'url='-Präfix im WFS-Link nicht verdoppelt wird.grünnie geprüft
CreateLayerTests
test_wms_baut_url_praefix_und_nutzt_rasterlayer
Prüft, dass WMS-Layer über QgsRasterLayer mit 'url='-Präfix erzeugt werden.grünnie geprüft
CreateLayerTests
test_rest_featureserver_ergaenzt_layer_index
Prüft, dass ein REST-Link auf '.../FeatureServer' automatisch um '/0' ergänzt wird.grünnie geprüft
CreateLayerTests
test_ogr_provider_nutzt_link_direkt
Prüft, dass ein OGR-Provider den Link unverändert an QgsVectorLayer übergibt.grünnie geprüft
CreateLayerTests
test_ungueltiger_layer_meldet_layer_nicht_verfuegbar
Prüft, dass ein ungültig erzeugter Layer als 'layer_nicht_verfuegbar' gemeldet wird und None liefert.grünnie geprüft
CreateLayerTests
test_ausnahme_beim_erstellen_wird_abgefangen
Prüft, dass eine Ausnahme beim Layer-Erstellen abgefangen und als Fehlerergebnis gemeldet wird.grünnie geprüft
TransformGeometryTests
test_fehlender_layer_liefert_geometrie_unveraendert
Prüft, dass ohne Quell- oder Ziel-Layer die Geometrie unverändert zurückgegeben wird.grünnie geprüft
TransformGeometryTests
test_gleiche_crs_liefert_geometrie_unveraendert
Prüft, dass bei identischem CRS von Quelle und Ziel keine Transformation stattfindet.grünnie geprüft
TransformGeometryTests
test_unterschiedliche_crs_klont_und_transformiert_geometrie
Prüft, dass bei unterschiedlichem CRS eine geklonte, transformierte Geometrie geliefert wird.grünnie geprüft
TransformExtentTests
test_gleiche_crs_liefert_extent_unveraendert
Prüft, dass bei identischem CRS von Quelle und Ziel der Extent unverändert bleibt.grünnie geprüft
TransformExtentTests
test_unterschiedliche_crs_nutzt_coordinate_transform
Prüft, dass bei unterschiedlichem CRS der Extent über QgsCoordinateTransform umgerechnet wird.grünnie geprüft
FilterByExtentTests
test_ungueltiger_layer_wird_unveraendert_zurueckgegeben
Prüft, dass ein ungültiger Layer von filter_by_extent unverändert zurückgegeben wird.grünnie geprüft
FilterByExtentTests
test_ohne_extent_wird_layer_unveraendert_zurueckgegeben
Prüft, dass ohne Extent (None) der Layer unverändert zurückgegeben wird.grünnie geprüft
FilterByExtentTests
test_falscher_layertyp_wird_unveraendert_zurueckgegeben
Prüft, dass ein Nicht-Vektor-Layer (z. B. Rasterlayer) unverändert zurückgegeben wird.grünnie geprüft
FilterByExtentTests
test_keine_treffer_liefert_none
Prüft, dass ein Raumfilter ohne Treffer None statt eines leeren Layers liefert.grünnie geprüft
FilterByExtentTests
test_abbruch_liefert_none_und_meldet_needs_user_action
Prüft, dass ein Abbruch während des Raumfilters None liefert und gemeldet wird.grünnie geprüft
FilterByExtentTests
test_erfolgreicher_filter_liefert_neuen_layer_mit_features
Prüft, dass ein erfolgreicher BBOX-Filter einen neuen Speicherlayer mit den gefundenen Features liefert.grünnie geprüft
FilterByLayerTests
test_ungueltiger_layer_oder_filterlayer_wird_unveraendert_zurueckgegeben
Prüft, dass ein ungültiger Haupt- oder Filter-Layer unverändert zurückgegeben wird.grünnie geprüft
FilterByLayerTests
test_filterlayer_ohne_features_liefert_none
Prüft, dass ein Filter-Layer ohne Features (leere Vereinigungsgeometrie) None liefert.grünnie geprüft
FilterByLayerTests
test_erfolgreicher_geometriefilter_liefert_neuen_layer
Prüft, dass ein erfolgreicher Geometriefilter einen neuen Speicherlayer mit den passenden Features liefert.grünnie geprüft
FilterByLayerTests
test_keine_ueberschneidung_liefert_none
Prüft, dass ohne überschneidende Features None statt eines leeren Layers geliefert wird.grünnie geprüft
AddToProjectTests
test_gueltiger_layer_wird_dem_projekt_hinzugefuegt
Prüft, dass ein gültiger Layer über QgsProject.instance().addMapLayer hinzugefügt wird.grünnie geprüft
AddToProjectTests
test_ungueltiger_layer_wird_nicht_hinzugefuegt
Prüft, dass ein ungültiger Layer nicht ans Projekt übergeben wird.grünnie geprüft
AddToProjectTests
test_none_layer_wird_nicht_hinzugefuegt
Prüft, dass ein fehlender Layer (None) nicht ans Projekt übergeben wird.grünnie geprüft

— (Docstring fehlt)

TestLayerpruefer 10
flowchart TD
  root(["test_layerpruefer.py"])
  class root rootnode
  root --> g1["TestLayerpruefer (10)"]
  class g1 groupnode
  g1 --> t1("layer_exists")
  g1 --> t2("layer_unsichtbar")
  g1 --> t3("falscher_layertyp")
  g1 --> t4("falscher_geotyp")
  g1 --> t5("layer_leer")
  g1 --> t6("falsches_crs")
  g1 --> t7("felder_fehlen")
  g1 --> t8("datenquelle_unerwartet")
  g1 --> t9("layer_nicht_editierbar")
  g1 --> t10("layer_ok")
  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
  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
TestLayerpruefer
test_layer_exists
Prüft, dass ein nicht vorhandener Layer als 'layer_nicht_gefunden' abgelehnt wird.grüngeprüft am 2026-09-17
TestLayerpruefer
test_layer_unsichtbar
Prüft, dass ein unsichtbarer Layer bei geforderter Sichtbarkeit als 'layer_unsichtbar' abgelehnt wird.grüngeprüft am 2026-09-17
TestLayerpruefer
test_falscher_layertyp
Prüft, dass ein Layer mit abweichendem Layertyp (Raster statt Vektor) als 'falscher_layertyp' abgelehnt wird.grüngeprüft am 2026-09-17
TestLayerpruefer
test_falscher_geotyp
Prüft, dass ein Layer mit abweichendem Geometrietyp (Punkt statt Polygon) als 'falscher_geotyp' abgelehnt wird.grüngeprüft am 2026-09-17
TestLayerpruefer
test_layer_leer
Prüft, dass ein Layer ohne Features als 'layer_leer' abgelehnt wird.grüngeprüft am 2026-09-17
TestLayerpruefer
test_falsches_crs
Prüft, dass ein Layer mit abweichendem Koordinatenbezugssystem als 'falsches_crs' abgelehnt wird.grüngeprüft am 2026-09-17
TestLayerpruefer
test_felder_fehlen
Prüft, dass ein Layer mit fehlenden Pflichtfeldern als 'felder_fehlen' abgelehnt wird.grüngeprüft am 2026-09-17
TestLayerpruefer
test_datenquelle_unerwartet
Prüft, dass eine Datenquelle außerhalb der erlaubten Liste als 'datenquelle_unerwartet' abgelehnt wird.grüngeprüft am 2026-09-17
TestLayerpruefer
test_layer_nicht_editierbar
Prüft, dass ein nicht editierbarer Layer bei geforderter Editierbarkeit als 'layer_nicht_editierbar' abgelehnt wird.grüngeprüft am 2026-09-17
TestLayerpruefer
test_layer_ok
Prüft, dass ein Layer, der alle Anforderungen erfüllt, als 'ok' bestätigt wird.grüngeprüft am 2026-09-17

— (Docstring fehlt)

TestLinkpruefer 6
flowchart TD
  root(["test_linkpruefer.py"])
  class root rootnode
  root --> g1["TestLinkpruefer (6)"]
  class g1 groupnode
  g1 --> t1("leere_eingabe")
  g1 --> t2("remote_link_ok")
  g1 --> t3("remote_link_error")
  g1 --> t4("remote_link_network_error")
  g1 --> t5("local_link_not_found")
  g1 --> t6("local_link_ok")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  class t6 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestLinkpruefer
test_leere_eingabe
Prüft, dass eine leere Eingabe ohne Netzwerk-/Dateizugriff als 'leer' abgelehnt wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_remote_link_ok
Prüft, dass eine erreichbare Remote-URL (HTTP HEAD ohne Fehler) als 'ok' bestätigt wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_remote_link_error
Prüft, dass eine Remote-URL mit Fehlerantwort als 'url_nicht_erreichbar' abgelehnt wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_remote_link_network_error
Prüft, dass eine ausbleibende Netzwerkantwort (None) als 'netzwerkfehler' gemeldet wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_local_link_not_found
Prüft, dass ein nicht existierender lokaler Pfad als 'pfad_nicht_gefunden' abgelehnt wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_local_link_ok
Prüft, dass ein existierender lokaler Pfad als 'ok' bestätigt wird.grüngeprüft am 2026-09-17

Tests für sn_basis/functions/ly_existence_wrapper.py::layer_is_valid/layer_is_usable (Issue #65).

LayerIsValidTests 5LayerIsUsableTests 3
flowchart TD
  root(["test_ly_existence_wrapper.py"])
  class root rootnode
  root --> g1["LayerIsValidTests (5)"]
  class g1 groupnode
  g1 --> t1("none_ist_nicht_gueltig")
  g1 --> t2("objekt_ohne_isvalid_ist_nicht_gueltig")
  g1 --> t3("gueltiger_layer_liefert_true")
  g1 --> t4("ungueltiger_layer_liefert_false")
  g1 --> t5("ausnahme_bei_isvalid_liefert_false")
  root --> g2["LayerIsUsableTests (3)"]
  class g2 groupnode
  g2 --> t6("none_ist_nicht_nutzbar")
  g2 --> t7("gueltiger_layer_ist_nutzbar")
  g2 --> t8("ungueltiger_layer_ist_nicht_nutzbar")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  class t6 ok
  class t7 ok
  class t8 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
LayerIsValidTests
test_none_ist_nicht_gueltig
Prüft, dass layer_is_valid für None False liefert.grünnie geprüft
LayerIsValidTests
test_objekt_ohne_isvalid_ist_nicht_gueltig
Prüft, dass ein Objekt ohne isValid()-Methode als ungültig gilt.grünnie geprüft
LayerIsValidTests
test_gueltiger_layer_liefert_true
Prüft, dass ein Layer mit isValid()==True als gültig erkannt wird.grünnie geprüft
LayerIsValidTests
test_ungueltiger_layer_liefert_false
Prüft, dass ein Layer mit isValid()==False als ungültig erkannt wird.grünnie geprüft
LayerIsValidTests
test_ausnahme_bei_isvalid_liefert_false
Prüft, dass eine Ausnahme in isValid() abgefangen wird und False liefert.grünnie geprüft
LayerIsUsableTests
test_none_ist_nicht_nutzbar
Prüft, dass layer_is_usable für None False liefert.grünnie geprüft
LayerIsUsableTests
test_gueltiger_layer_ist_nutzbar
Prüft, dass ein vorhandener, gültiger Layer als nutzbar gilt.grünnie geprüft
LayerIsUsableTests
test_ungueltiger_layer_ist_nicht_nutzbar
Prüft, dass ein vorhandener, aber ungültiger Layer als nicht nutzbar gilt.grünnie geprüft

Tests für sn_basis/functions/ly_style_wrapper.py::apply_style_from_path (Issue #65).

ApplyStyleFromPathTests 4
flowchart TD
  root(["test_ly_style_wrapper.py"])
  class root rootnode
  root --> g1["ApplyStyleFromPathTests (4)"]
  class g1 groupnode
  g1 --> t1("fehlender_layer_liefert_false")
  g1 --> t2("erfolgreiches_laden_liefert_true_und_triggert_repaint")
  g1 --> t3("fehlgeschlagenes_laden_liefert_false_ohne_repaint")
  g1 --> t4("ausnahme_beim_laden_wird_abgefangen")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
ApplyStyleFromPathTests
test_fehlender_layer_liefert_false
Prüft, dass ein fehlender Layer (None) False liefert, ohne einen Stil zu laden.grünnie geprüft
ApplyStyleFromPathTests
test_erfolgreiches_laden_liefert_true_und_triggert_repaint
Prüft, dass ein erfolgreich geladener Stil True liefert und den Layer neu zeichnet.grünnie geprüft
ApplyStyleFromPathTests
test_fehlgeschlagenes_laden_liefert_false_ohne_repaint
Prüft, dass ein fehlgeschlagenes Laden False liefert, ohne den Layer neu zu zeichnen.grünnie geprüft
ApplyStyleFromPathTests
test_ausnahme_beim_laden_wird_abgefangen
Prüft, dass eine Ausnahme beim Laden des Stils abgefangen wird und False liefert.grünnie geprüft

Tests für sn_basis/functions/message_wrapper.py (Issue #65).

GetMessageBarTests 2PushMessageTests 2
flowchart TD
  root(["test_message_wrapper.py"])
  class root rootnode
  root --> g1["GetMessageBarTests (2)"]
  class g1 groupnode
  g1 --> t1("liefert_objekt_mit_pushmessage_methode")
  g1 --> t2("faellt_bei_fehlerhaftem_iface_auf_mock_bar_zurueck")
  root --> g2["PushMessageTests (2)"]
  class g2 groupnode
  g2 --> t3("liefert_dict_mit_titel_text_level_und_dauer")
  g2 --> t4("fehler_in_der_message_bar_wird_abgefangen")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
GetMessageBarTests
test_liefert_objekt_mit_pushmessage_methode
Prüft, dass _get_message_bar ein Objekt mit aufrufbarer pushMessage()-Methode liefert.grünnie geprüft
GetMessageBarTests
test_faellt_bei_fehlerhaftem_iface_auf_mock_bar_zurueck
Prüft, dass ein Fehler beim Zugriff auf iface.messageBar() auf eine funktionierende Mock-MessageBar zurückfällt.grünnie geprüft
PushMessageTests
test_liefert_dict_mit_titel_text_level_und_dauer
Prüft, dass push_message im Mock-Modus ein Dict mit den übergebenen Werten liefert.grünnie geprüft
PushMessageTests
test_fehler_in_der_message_bar_wird_abgefangen
Prüft, dass eine fehlschlagende MessageBar push_message nicht zum Absturz bringt, sondern None liefert.grünnie geprüft

— (Docstring fehlt)

TestPrintLayout 5
flowchart TD
  root(["test_print_layout.py"])
  class root rootnode
  root --> g1["TestPrintLayout (5)"]
  class g1 groupnode
  g1 --> t1("create_legend_item_links_map_and_enables_map_filtering")
  g1 --> t2("create_legend_item_does_not_copy_project_layers_into_legend_model")
  g1 --> t3("configure_legend_size_uses_content_adaptive_size")
  g1 --> t4("configure_hauptkarte_grids_uses_wrapper_constants")
  g1 --> t5("create_single_page_layout_keeps_legend_linked_to_hauptkarte_and_theme")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestPrintLayout
test_create_legend_item_links_map_and_enables_map_filtering
Prüft, dass eine erzeugte Legende mit der übergebenen Karte verknüpft ist und automatisch nach deren Sichtbarkeit gefiltert wird.grünnie geprüft
TestPrintLayout
test_create_legend_item_does_not_copy_project_layers_into_legend_model
Prüft, dass eine neu erzeugte Legende keine Projekt-Layer in ihr Legendenmodell übernimmt (leere Root-Gruppe).grünnie geprüft
TestPrintLayout
test_configure_legend_size_uses_content_adaptive_size
Prüft, dass die Legendengröße inhaltsadaptiv bestimmt wird (kein manuelles Resize) und die ermittelte Höhe zurückgegeben wird.grünnie geprüft
TestPrintLayout
test_configure_hauptkarte_grids_uses_wrapper_constants
Prüft, dass das Gitternetz der Hauptkarte mit den erwarteten Stil-, Rahmen- und Beschriftungskonstanten (nur rechts/unten beschriftet, Schriftgröße und Hintergrund) konfiguriert wird.grünnie geprüft
TestPrintLayout
test_create_single_page_layout_keeps_legend_linked_to_hauptkarte_and_theme
Prüft, dass ein einseitiges Layout die Hauptkarte auf das übergebene Kartenthema festlegt und die Legende mit dieser Karte verknüpft bleibt.grünnie geprüft

— (Docstring fehlt)

TestPrintLogic 17
flowchart TD
  root(["test_print_logic.py"])
  class root rootnode
  root --> g1["TestPrintLogic (17)"]
  class g1 groupnode
  g1 --> t1("get_baufreigabe_page_dimensions_prefers_a4_for_small_extent")
  g1 --> t2("get_baufreigabe_page_dimensions_escalates_to_a3")
  g1 --> t3("get_baufreigabe_page_dimensions_respects_a4_as_maximum_with_fallback")
  g1 --> t4("get_baufreigabe_page_dimensions_falls_back_to_a3_for_oversize_extent")
  g1 --> t5("select_standard_page_layout_uses_a4_as_minimum_sheet")
  g1 --> t6("select_standard_page_layout_limits_hauptkarte_to_a3")
  g1 --> t7("select_standard_page_layout_returns_none_if_a3_is_too_small")
  g1 --> t8("get_standard_layout_dimensions_uses_a4_and_forces_fit_for_small_extent")
  g1 --> t9("get_standard_layout_dimensions_caps_endlosrolle_width_at_2000_mm")
  g1 --> t10("apply_standard_minimum_a4_fallback_for_small_page")
  g1 --> t11("apply_standard_minimum_a4_fallback_keeps_large_page")
  g1 --> t12("does_plot_fit_page_true_for_standard_a4")
  g1 --> t13("does_plot_fit_page_false_if_objects_exceed_page")
  g1 --> t14("set_druckbereich_accepts_wie_kartenfenster")
  g1 --> t15("get_canvas_extent_returns_valid_extent")
  g1 --> t16("resolve_extent_uses_canvas_extent_without_buffer")
  g1 --> t17("resolve_extent_uses_rectangle_extent_without_buffer")
  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
  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
TestPrintLogic
test_get_baufreigabe_page_dimensions_prefers_a4_for_small_extent
Prüft, dass für einen kleinen Kartenausschnitt (Baufreigabe) das Format DIN A4 ohne Fallback gewählt wird.grünnie geprüft
TestPrintLogic
test_get_baufreigabe_page_dimensions_escalates_to_a3
Prüft, dass ein größerer Kartenausschnitt (Baufreigabe) auf DIN A3 eskaliert wird.grünnie geprüft
TestPrintLogic
test_get_baufreigabe_page_dimensions_respects_a4_as_maximum_with_fallback
Prüft, dass bei auf DIN A4 begrenztem Höchstformat ein eigentlich A3-großer Ausschnitt mit Fallback-Kennzeichnung auf A4 reduziert wird.grünnie geprüft
TestPrintLogic
test_get_baufreigabe_page_dimensions_falls_back_to_a3_for_oversize_extent
Prüft, dass ein Ausschnitt, der auch DIN A3 übersteigt, mit Fallback-Kennzeichnung auf DIN A3 begrenzt wird.grünnie geprüft
TestPrintLogic
test_select_standard_page_layout_uses_a4_as_minimum_sheet
Prüft, dass für einen kleinen Ausschnitt trotz Höchstgrenze DIN A3 mindestens DIN A4 als Blattgröße gewählt wird.grünnie geprüft
TestPrintLogic
test_select_standard_page_layout_limits_hauptkarte_to_a3
Prüft, dass ein die Fläche voll ausnutzender Ausschnitt auf DIN A3 als größtes zulässiges Format begrenzt wird.grünnie geprüft
TestPrintLogic
test_select_standard_page_layout_returns_none_if_a3_is_too_small
Prüft, dass kein Layout gewählt wird (None), wenn der Ausschnitt selbst DIN A3 als Höchstformat übersteigt.grünnie geprüft
TestPrintLogic
test_get_standard_layout_dimensions_uses_a4_and_forces_fit_for_small_extent
Prüft, dass für einen kleinen Ausschnitt DIN A4 gewählt und das Einpassen (force_fit) erzwungen wird.grünnie geprüft
TestPrintLogic
test_get_standard_layout_dimensions_caps_endlosrolle_width_at_2000_mm
Prüft, dass bei aktiviertem Formfaktor (Endlosrolle) die Seitenbreite auf die maximale Rollenbreite (2000 mm) begrenzt wird.grünnie geprüft
TestPrintLogic
test_apply_standard_minimum_a4_fallback_for_small_page
Prüft, dass eine zu kleine Seite auf die A4-Mindestgröße angehoben und als erzwungen (forced) markiert wird.grünnie geprüft
TestPrintLogic
test_apply_standard_minimum_a4_fallback_keeps_large_page
Prüft, dass eine bereits ausreichend große Seite (A3) unverändert bleibt und nicht als erzwungen markiert wird.grünnie geprüft
TestPrintLogic
test_does_plot_fit_page_true_for_standard_a4
Prüft, dass ein Kartenobjekt, das in eine DIN A4-Seite passt, als passend erkannt wird.grünnie geprüft
TestPrintLogic
test_does_plot_fit_page_false_if_objects_exceed_page
Prüft, dass ein Kartenobjekt, das die Seitenbreite überschreitet, als nicht passend erkannt wird.grünnie geprüft
TestPrintLogic
test_set_druckbereich_accepts_wie_kartenfenster
Prüft, dass die Auswahl 'wie Kartenfenster' als Projektvariable 'druckbereich' gespeichert wird.grünnie geprüft
TestPrintLogic
test_get_canvas_extent_returns_valid_extent
Prüft, dass der aktuelle Kartenausschnitt des Kartenfensters unverändert zurückgegeben wird.grünnie geprüft
TestPrintLogic
test_resolve_extent_uses_canvas_extent_without_buffer
Prüft, dass bei Druckbereich 'wie Kartenfenster' der Kartenausschnitt ohne Puffer und ohne verknüpften Layer übernommen wird.grünnie geprüft
TestPrintLogic
test_resolve_extent_uses_rectangle_extent_without_buffer
Prüft, dass bei Druckbereich 'Rechteck' der gezeichnete Ausschnitt ohne Puffer und ohne verknüpften Layer übernommen wird.grünnie geprüft

Tests für sn_basis/modules/pruef_ergebnis.py::ist_verfahrens_db_aktion/erlaubte_persistierung (Issue #65).

IstVerfahrensDbAktionTests 2ErlaubtePersistierungTests 2
flowchart TD
  root(["test_pruef_ergebnis.py"])
  class root rootnode
  root --> g1["IstVerfahrensDbAktionTests (2)"]
  class g1 groupnode
  g1 --> t1("liefert_true_fuer_alle_verfahrens_db_aktionen")
  g1 --> t2("liefert_false_fuer_andere_aktionen")
  root --> g2["ErlaubtePersistierungTests (2)"]
  class g2 groupnode
  g2 --> t3("liefert_true_fuer_erzeugen_ueberschreiben_anhaengen")
  g2 --> t4("liefert_false_fuer_ueberspringen_und_reines_existieren")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
IstVerfahrensDbAktionTests
test_liefert_true_fuer_alle_verfahrens_db_aktionen
Prüft, dass ist_verfahrens_db_aktion für alle vier Verfahrens-DB-Aktionscodes True liefert.grünnie geprüft
IstVerfahrensDbAktionTests
test_liefert_false_fuer_andere_aktionen
Prüft, dass ist_verfahrens_db_aktion für Nicht-Verfahrens-DB-Aktionen und ohne Aktion False liefert.grünnie geprüft
ErlaubtePersistierungTests
test_liefert_true_fuer_erzeugen_ueberschreiben_anhaengen
Prüft, dass erlaubte_persistierung für Erzeugen/Überschreiben/Anhängen True liefert.grünnie geprüft
ErlaubtePersistierungTests
test_liefert_false_fuer_ueberspringen_und_reines_existieren
Prüft, dass erlaubte_persistierung bei Überspringen und reinem 'datei_existiert' False liefert.grünnie geprüft

— (Docstring fehlt)

TestPruefmanager 24
flowchart TD
  root(["test_pruefmanager.py"])
  class root rootnode
  root --> g1["TestPruefmanager (24)"]
  class g1 groupnode
  g1 --> t1("ok")
  g1 --> t2("leereingabe_erlaubt_ja")
  g1 --> t3("leereingabe_erlaubt_nein")
  g1 --> t4("standarddatei_vorschlagen_ja")
  g1 --> t5("standarddatei_vorschlagen_nein")
  g1 --> t6("temporaer_erlaubt_ja")
  g1 --> t7("temporaer_erlaubt_nein")
  g1 --> t8("layer_unsichtbar_ja")
  g1 --> t9("layer_unsichtbar_nein")
  g1 --> t10("unbekannte_aktion")
  g1 --> t11("datei_existiert_overwrite")
  g1 --> t12("datei_existiert_append")
  g1 --> t13("datei_existiert_cancel")
  g1 --> t14("datei_existiert_in_non_qgis_mode_returns_input")
  g1 --> t15("verfahrensgebiet_layer_existiert_ergaenzen")
  g1 --> t16("verfahrensgebiet_layer_existiert_abbrechen")
  g1 --> t17("verfahrensgebiet_layer_existiert_in_non_qgis_mode_returns_input")
  g1 --> t18("report_error_kritische_aktion_ruft_error_auf")
  g1 --> t19("report_error_warn_aktion_ruft_warning_auf")
  g1 --> t20("report_error_unbekannte_aktion_faellt_auf_warning_zurueck")
  g1 --> t21("frage_ja_nein_im_qgis_modus_fragt_nutzer")
  g1 --> t22("frage_ja_nein_ausserhalb_qgis_liefert_default_ohne_rueckfrage")
  g1 --> t23("frage_text_im_qgis_modus_fragt_nutzer")
  g1 --> t24("frage_text_ausserhalb_qgis_liefert_default_ohne_rueckfrage")
  class t1 ok
  class t2 ok
  class t3 ok
  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
  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
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ünnie geprüft
TestPruefmanager
test_verfahrensgebiet_layer_existiert_abbrechen
Prüft, dass die Nutzerwahl 'abbrechen' bei bestehendem Verfahrensgebiet ok=False mit Aktion 'verfahrensgebiet_abbrechen' liefert.grünnie geprüft
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ünnie geprüft
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ünnie geprüft
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ünnie geprüft
TestPruefmanager
test_report_error_unbekannte_aktion_faellt_auf_warning_zurueck
Prüft, dass eine nicht eingestufte Aktion als Fallback über warning() gemeldet wird.grünnie geprüft
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ünnie geprüft
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ünnie geprüft
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ünnie geprüft
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ünnie geprüft

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

PolygonZuLinieTests 7LayerExistsInGpkgTests 4
flowchart TD
  root(["test_qgiscore_wrapper_helpers.py"])
  class root rootnode
  root --> g1["PolygonZuLinieTests (7)"]
  class g1 groupnode
  g1 --> t1("none_liefert_none")
  g1 --> t2("leere_geometrie_liefert_none")
  g1 --> t3("stufe1_nutzt_boundary_wenn_vorhanden")
  g1 --> t4("stufe2_extrahiert_ringe_bei_einfachem_polygon")
  g1 --> t5("stufe2_extrahiert_alle_ringe_bei_multipolygon")
  g1 --> t6("stufe3_fallback_wenn_keine_ringe_extrahierbar")
  g1 --> t7("alle_stufen_scheitern_liefert_none")
  root --> g2["LayerExistsInGpkgTests (4)"]
  class g2 groupnode
  g2 --> t8("fehlende_datei_liefert_false")
  g2 --> t9("leerer_pfad_oder_layername_liefert_false")
  g2 --> t10("vorhandener_layer_liefert_true")
  g2 --> t11("fehlender_layer_liefert_false")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  class t6 ok
  class t7 ok
  class t8 ok
  class t9 ok
  class t10 ok
  class t11 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
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

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

AddLayerToProjectTests 4
flowchart TD
  root(["test_qgisui_wrapper_helpers.py"])
  class root rootnode
  root --> g1["AddLayerToProjectTests (4)"]
  class g1 groupnode
  g1 --> t1("none_layer_liefert_false")
  g1 --> t2("mock_modus_liefert_true_ohne_projektzugriff")
  g1 --> t3("mit_qgis_fuegt_layer_dem_projekt_hinzu")
  g1 --> t4("mit_qgis_fehler_liefert_false")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
AddLayerToProjectTests
test_none_layer_liefert_false
Prüft, dass add_layer_to_project für einen fehlenden Layer (None) False liefert.grünnie geprüft
AddLayerToProjectTests
test_mock_modus_liefert_true_ohne_projektzugriff
Prüft, dass im Mock-Modus (ohne QGIS) ein gültiger Layer True liefert, ohne das Projekt anzufassen.grünnie geprüft
AddLayerToProjectTests
test_mit_qgis_fuegt_layer_dem_projekt_hinzu
Prüft, dass bei verfügbarem QGIS der Layer über QgsProject.instance().addMapLayer hinzugefügt wird.grünnie geprüft
AddLayerToProjectTests
test_mit_qgis_fehler_liefert_false
Prüft, dass ein Fehler beim Hinzufügen zum Projekt abgefangen wird und False liefert.grünnie geprüft

— (Docstring fehlt)

TestSettingsLogic 4
flowchart TD
  root(["test_settings_logic.py"])
  class root rootnode
  root --> g1["TestSettingsLogic (4)"]
  class g1 groupnode
  g1 --> t1("load")
  g1 --> t2("save")
  g1 --> t3("load_handles_partial_values_with_empty_fallback")
  g1 --> t4("save_empty_string_value_is_persisted")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestSettingsLogic
test_load
Prüft, dass load() jede bekannte Projektvariable genau einmal über get_variable() liest.grüngeprüft am 2026-09-17
TestSettingsLogic
test_save
Prüft, dass save() nur bekannte Variablen-Keys speichert und unbekannte Keys ignoriert.grüngeprüft am 2026-09-17
TestSettingsLogic
test_load_handles_partial_values_with_empty_fallback
Prüft, dass load() für jede Variable den (auch leeren) Wert von get_variable() unverändert übernimmt, selbst wenn nicht alle Variablen im Mock konfiguriert sind.grüngeprüft am 2026-09-17
TestSettingsLogic
test_save_empty_string_value_is_persisted
Prüft, dass save() einen leeren String als gültigen Wert speichert, statt ihn wie einen fehlenden Key zu behandeln.grüngeprüft am 2026-09-17

Tests für sn_basis/ui/tabs/settings_tab.py::save_data/load_data (Issue #65).

SaveDataTests 2LoadDataTests 4
flowchart TD
  root(["test_settings_tab.py"])
  class root rootnode
  root --> g1["SaveDataTests (2)"]
  class g1 groupnode
  g1 --> t1("sammelt_text_und_combobox_werte_inklusive_landkreiskennzahl")
  g1 --> t2("ohne_landkreis_dropdown_wird_keine_kennzahl_ergaenzt")
  root --> g2["LoadDataTests (4)"]
  class g2 groupnode
  g2 --> t3("befuellt_textfelder_aus_gespeicherten_daten")
  g2 --> t4("ohne_gespeicherten_wert_bleibt_textfeld_leer")
  g2 --> t5("waehlt_combobox_eintrag_bei_bekanntem_namen")
  g2 --> t6("unbekannter_gespeicherter_name_waehlt_ersten_eintrag")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  class t6 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
SaveDataTests
test_sammelt_text_und_combobox_werte_inklusive_landkreiskennzahl
Prüft, dass save_data Text- und Dropdown-Werte sammelt und die Landkreiskennzahl separat ergänzt.grünnie geprüft
SaveDataTests
test_ohne_landkreis_dropdown_wird_keine_kennzahl_ergaenzt
Prüft, dass ohne Landkreis-Dropdown im Formular keine 'landkreis_kennzahl' ergänzt wird.grünnie geprüft
LoadDataTests
test_befuellt_textfelder_aus_gespeicherten_daten
Prüft, dass load_data ein Textfeld mit dem gespeicherten Wert befüllt.grünnie geprüft
LoadDataTests
test_ohne_gespeicherten_wert_bleibt_textfeld_leer
Prüft, dass load_data ohne gespeicherten Wert das Textfeld auf einen leeren Text setzt.grünnie geprüft
LoadDataTests
test_waehlt_combobox_eintrag_bei_bekanntem_namen
Prüft, dass load_data im Landkreis-Dropdown den gespeicherten Landkreisnamen auswählt.grünnie geprüft
LoadDataTests
test_unbekannter_gespeicherter_name_waehlt_ersten_eintrag
Prüft, dass load_data bei einem nicht mehr vorhandenen Landkreisnamen auf den ersten Eintrag zurückfällt.grünnie geprüft

— (Docstring fehlt)

TestStilpruefer 4
flowchart TD
  root(["test_stilpruefer.py"])
  class root rootnode
  root --> g1["TestStilpruefer (4)"]
  class g1 groupnode
  g1 --> t1("keine_datei_angegeben")
  g1 --> t2("datei_existiert_mit_qml")
  g1 --> t3("datei_existiert_falsche_endung")
  g1 --> t4("datei_existiert_nicht")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestStilpruefer
test_keine_datei_angegeben
Prüft, dass eine leere Pfadangabe als 'ok' ohne Kontext akzeptiert wird (Stil ist optional).grüngeprüft am 2026-09-17
TestStilpruefer
test_datei_existiert_mit_qml
Prüft, dass eine existierende .qml-Datei als 'stil_anwendbar' bestätigt wird.grüngeprüft am 2026-09-17
TestStilpruefer
test_datei_existiert_falsche_endung
Prüft, dass eine existierende Datei ohne .qml-Endung als 'falsche_endung' abgelehnt wird.grüngeprüft am 2026-09-17
TestStilpruefer
test_datei_existiert_nicht
Prüft, dass ein nicht existierender .qml-Pfad als 'datei_nicht_gefunden' abgelehnt wird.grüngeprüft am 2026-09-17

Unit-Tests für sn_basis.functions.sys_wrapper.get_plugin_root().

TestGetPluginRoot 1JoinPathTests 1EnsureDirTests 2GetattrSafeTests 2
flowchart TD
  root(["test_sys_wrapper.py"])
  class root rootnode
  root --> g1["TestGetPluginRoot (1)"]
  class g1 groupnode
  g1 --> t1("get_plugin_root_folgt_keiner_verzeichnisverknuepfung")
  root --> g2["JoinPathTests (1)"]
  class g2 groupnode
  g2 --> t2("verbindet_mehrere_pfadbestandteile")
  root --> g3["EnsureDirTests (2)"]
  class g3 groupnode
  g3 --> t3("legt_fehlendes_verzeichnis_inklusive_eltern_an")
  g3 --> t4("vorhandenes_verzeichnis_wirft_keinen_fehler")
  root --> g4["GetattrSafeTests (2)"]
  class g4 groupnode
  g4 --> t5("liefert_vorhandenes_attribut")
  g4 --> t6("liefert_default_bei_fehlendem_attribut")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  class t6 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestGetPluginRoot
test_get_plugin_root_folgt_keiner_verzeichnisverknuepfung
Prüft, dass get_plugin_root() bei einem über eine Verzeichnisverknüpfung (wie von link_qgis_profile.py angelegt) erreichten Modul den verlinkten Pfad liefert, statt zum echten Zielverzeichnis aufzulösen (Verfahrensgebiet #50).grüngeprüft am 2026-09-17
JoinPathTests
test_verbindet_mehrere_pfadbestandteile
Prüft, dass join_path mehrere Bestandteile OS-sicher zu einem Path zusammenfügt.grünnie geprüft
EnsureDirTests
test_legt_fehlendes_verzeichnis_inklusive_eltern_an
Prüft, dass ensure_dir ein fehlendes Verzeichnis samt Elternverzeichnissen anlegt.grünnie geprüft
EnsureDirTests
test_vorhandenes_verzeichnis_wirft_keinen_fehler
Prüft, dass ensure_dir bei einem bereits vorhandenen Verzeichnis keinen Fehler wirft.grünnie geprüft
GetattrSafeTests
test_liefert_vorhandenes_attribut
Prüft, dass getattr_safe ein vorhandenes Attribut liefert.grünnie geprüft
GetattrSafeTests
test_liefert_default_bei_fehlendem_attribut
Prüft, dass getattr_safe bei fehlendem Attribut den Default-Wert liefert.grünnie geprüft

Unit-Tests für `sn_basis.functions.text_wrapper`.

TestSanitizeBezeichner 7
flowchart TD
  root(["test_text_wrapper.py"])
  class root rootnode
  root --> g1["TestSanitizeBezeichner (7)"]
  class g1 groupnode
  g1 --> t1("umlaute_bleiben_erhalten")
  g1 --> t2("bindestrich_bleibt_erhalten")
  g1 --> t3("unterstrich_bleibt_erhalten")
  g1 --> t4("leerzeichen_wird_durch_ersatz_zusammengefasst")
  g1 --> t5("fuehrender_und_folgender_ersatz_wird_entfernt")
  g1 --> t6("eigenes_ersatzzeichen_wird_verwendet")
  g1 --> t7("nur_unzulaessige_zeichen_ergibt_leeren_string")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  class t6 ok
  class t7 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
TestSanitizeBezeichner
test_umlaute_bleiben_erhalten
Prüft, dass Umlaute und ß nicht durch den Ersatz entfernt werden.grünnie geprüft
TestSanitizeBezeichner
test_bindestrich_bleibt_erhalten
Prüft, dass ein Bindestrich im Bezeichner erhalten bleibt (Issue #42).grünnie geprüft
TestSanitizeBezeichner
test_unterstrich_bleibt_erhalten
Prüft, dass ein Unterstrich im Bezeichner erhalten bleibt.grünnie geprüft
TestSanitizeBezeichner
test_leerzeichen_wird_durch_ersatz_zusammengefasst
Prüft, dass Leerzeichen (kein zulässiges Zeichen) zu einem Ersatzzeichen werden.grünnie geprüft
TestSanitizeBezeichner
test_fuehrender_und_folgender_ersatz_wird_entfernt
Prüft, dass ein Ersatzzeichen am Anfang oder Ende des Ergebnisses entfernt wird.grünnie geprüft
TestSanitizeBezeichner
test_eigenes_ersatzzeichen_wird_verwendet
Prüft, dass ein abweichendes Ersatzzeichen anstelle von Unterstrich genutzt wird.grünnie geprüft
TestSanitizeBezeichner
test_nur_unzulaessige_zeichen_ergibt_leeren_string
Prüft, dass ein Bezeichner ganz aus unzulässigen Zeichen zu einem leeren String wird.grünnie geprüft

— (Docstring fehlt)

TestVariableWrapper 6
flowchart TD
  root(["test_variable_wrapper.py"])
  class root rootnode
  root --> g1["TestVariableWrapper (6)"]
  class g1 groupnode
  g1 --> t1("set_variable_project_noop_write_is_skipped")
  g1 --> t2("set_variable_project_changed_value_is_written")
  g1 --> t3("set_variable_global_writes_prefixed_name")
  g1 --> t4("get_variable_global_returns_empty_string_fallback")
  g1 --> t5("get_variable_invalid_scope_raises")
  g1 --> t6("set_variable_invalid_scope_raises")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  class t6 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestVariableWrapper
test_set_variable_project_noop_write_is_skipped
Prüft, dass set_variable() im Projekt-Scope nicht schreibt, wenn der neue Wert dem bestehenden entspricht.grünnie geprüft
TestVariableWrapper
test_set_variable_project_changed_value_is_written
Prüft, dass set_variable() im Projekt-Scope bei geändertem Wert mit dem Präfix 'sn_' geschrieben wird.grünnie geprüft
TestVariableWrapper
test_set_variable_global_writes_prefixed_name
Prüft, dass set_variable() im globalen Scope den Variablennamen mit 'sn_' vorangestellt schreibt.grünnie geprüft
TestVariableWrapper
test_get_variable_global_returns_empty_string_fallback
Prüft, dass get_variable() im globalen Scope für eine nicht gesetzte Variable einen leeren String liefert.grünnie geprüft
TestVariableWrapper
test_get_variable_invalid_scope_raises
Prüft, dass get_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst.grünnie geprüft
TestVariableWrapper
test_set_variable_invalid_scope_raises
Prüft, dass set_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst.grünnie geprüft

Tests für sn_basis/functions/verfahrensgebiet_manager.py (zentrale Layer-Verfolgung, Issue #65).

TestVerfahrensgebietManager 5OnHandlerTests 5ListenerSetupTests 3
flowchart TD
  root(["test_verfahrensgebiet_manager.py"])
  class root rootnode
  root --> g1["TestVerfahrensgebietManager (5)"]
  class g1 groupnode
  g1 --> t1("get_verfahrensgebiet_layer_id_returns_value")
  g1 --> t2("get_verfahrensgebiet_layer_id_returns_none_for_empty_value")
  g1 --> t3("set_verfahrensgebiet_layer_id_writes_project_variable")
  g1 --> t4("update_without_layer_does_not_write_when_already_empty")
  g1 --> t5("update_with_layer_writes_variable")
  root --> g2["OnHandlerTests (5)"]
  class g2 groupnode
  g2 --> t6("on_project_changed_ohne_layer_setzt_variable_leer")
  g2 --> t7("on_project_changed_mit_layer_setzt_variable")
  g2 --> t8("on_layers_added_findet_neuen_layer")
  g2 --> t9("on_layer_removed_bei_aktuellem_layer_sucht_neu")
  g2 --> t10("on_layer_removed_bei_anderem_layer_aendert_nichts")
  root --> g3["ListenerSetupTests (3)"]
  class g3 groupnode
  g3 --> t11("setup_ohne_qgis_tut_nichts")
  g3 --> t12("setup_verbindet_signale_und_ist_idempotent")
  g3 --> t13("teardown_trennt_alle_signale_und_ist_idempotent")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  class t6 ok
  class t7 ok
  class t8 ok
  class t9 ok
  class t10 ok
  class t11 ok
  class t12 ok
  class t13 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestVerfahrensgebietManager
test_get_verfahrensgebiet_layer_id_returns_value
Prüft, dass get_verfahrensgebiet_layer_id() die in der Projektvariable gespeicherte Layer-ID liefert.grünnie geprüft
TestVerfahrensgebietManager
test_get_verfahrensgebiet_layer_id_returns_none_for_empty_value
Prüft, dass get_verfahrensgebiet_layer_id() bei leerer Projektvariable None statt eines leeren Strings liefert.grünnie geprüft
TestVerfahrensgebietManager
test_set_verfahrensgebiet_layer_id_writes_project_variable
Prüft, dass set_verfahrensgebiet_layer_id() die Layer-ID als Projektvariable 'verfahrensgebiet_layer' speichert.grünnie geprüft
TestVerfahrensgebietManager
test_update_without_layer_does_not_write_when_already_empty
Prüft, dass ohne gefundenen Verfahrensgebiet-Layer keine Schreibaktion erfolgt, wenn die Variable bereits leer ist.grünnie geprüft
TestVerfahrensgebietManager
test_update_with_layer_writes_variable
Prüft, dass ein gefundener Verfahrensgebiet-Layer seine ID als Projektvariable speichert.grünnie geprüft
OnHandlerTests
test_on_project_changed_ohne_layer_setzt_variable_leer
Prüft, dass _on_project_changed die Variable leert, wenn kein Verfahrensgebiet-Layer existiert.grünnie geprüft
OnHandlerTests
test_on_project_changed_mit_layer_setzt_variable
Prüft, dass _on_project_changed die Layer-ID eines gefundenen Verfahrensgebiet-Layers übernimmt.grünnie geprüft
OnHandlerTests
test_on_layers_added_findet_neuen_layer
Prüft, dass _on_layers_added nach neu hinzugefügten Layern sucht und die Variable aktualisiert.grünnie geprüft
OnHandlerTests
test_on_layer_removed_bei_aktuellem_layer_sucht_neu
Prüft, dass das Entfernen des aktuell aktiven Verfahrensgebiet-Layers eine Neusuche auslöst.grünnie geprüft
OnHandlerTests
test_on_layer_removed_bei_anderem_layer_aendert_nichts
Prüft, dass das Entfernen eines anderen Layers keine Neusuche auslöst.grünnie geprüft
ListenerSetupTests
test_setup_ohne_qgis_tut_nichts
Prüft, dass setup_verfahrensgebiet_listener ohne QGIS keine Signale registriert.grünnie geprüft
ListenerSetupTests
test_setup_verbindet_signale_und_ist_idempotent
Prüft, dass setup_verfahrensgebiet_listener die Projektsignale verbindet und ein zweiter Aufruf nichts doppelt registriert.grünnie geprüft
ListenerSetupTests
test_teardown_trennt_alle_signale_und_ist_idempotent
Prüft, dass teardown_verfahrensgebiet_listener alle Signale trennt und mehrfacher Aufruf nicht fehlschlägt.grünnie geprüft

Ungetestete Funktionen (strukturell) – 115 von 229

Heuristik: Name kommt in keiner Testdatei des Pakets vor. Details siehe docs/tests/testkatalog.md.

DateiFunktion/MethodeZeile
functions/dialog_wrapper.pyshow_info_dialog42
functions/dialog_wrapper.pyask_detailpruefung_oder_vg_laden185
functions/dialog_wrapper.pyask_detailpruefung_oder_abbrechen235
functions/dialog_wrapper.pyProgressDialog.set_total328
functions/dialog_wrapper.pyProgressDialog.set_value336
functions/dialog_wrapper.pyProgressDialog.set_label348
functions/dialog_wrapper.pyProgressDialog.is_canceled357
functions/dialog_wrapper.pyProgressDialog.raise_to_front373
functions/dialog_wrapper.pycreate_progress_dialog390
functions/message_wrapper.pyinfo67
functions/message_wrapper.pysuccess82
functions/os_wrapper.pynormalize_path43
functions/os_wrapper.pyget_home_dir53
functions/os_wrapper.pyis_absolute_path60
functions/os_wrapper.pybasename68
functions/os_wrapper.pyis_case_sensitive_fs80
functions/os_wrapper.pypath_suffix96
functions/qgisui_wrapper.pyget_main_window131
functions/qgisui_wrapper.pyadd_menu178
functions/qgisui_wrapper.pyremove_menu188
functions/qgisui_wrapper.pyadd_toolbar201
functions/qgisui_wrapper.pyremove_toolbar208
functions/qt_wrapper.pyexec_dialog60
functions/qt_wrapper.pydebug_qt_status64
modules/DataGrabber.pyDataGrabber.set_source68
modules/DataGrabber.pyDataGrabber._process_database_source309
modules/DataGrabber.pyDataGrabber._process_service_source320
modules/DataGrabber.pyDataGrabber._aggregate_results330
modules/Dateipruefer.pyDateipruefer._ist_leer98
modules/Dateipruefer.pyDateipruefer._handle_leere_eingabe227
modules/Datenschreiber.pyDatenschreiber._store_style_in_gpkg77
modules/LayerLoader.pyLayerLoader._was_canceled42
modules/LayerLoader.pyLayerLoader._process_events50
modules/linkpruefer.pyLinkpruefer._ist_url41
modules/linkpruefer.pyLinkpruefer._pruefe_url81
modules/linkpruefer.pyLinkpruefer._pruefe_dateipfad115
modules/print_layout.pyPrintLayout._create_map_item98
modules/print_layout.pyPrintLayout._set_item_frame_stroke_width119
modules/print_layout.pyPrintLayout._fit_extent_to_map_item154
modules/print_layout.pyPrintLayout.add_text_label211
modules/print_layout.pyPrintLayout._setup_layout_objects242
modules/print_layout.pyPrintLayout._create_label_item373
modules/print_layout.pyPrintLayout._resolve_visible_map_layers470
modules/print_layout.pyPrintLayout._apply_grid_common_settings791
modules/print_layout.pyPrintLayout._safe_grid_call797
modules/print_layout.pyPrintLayout._apply_grid_annotation_text_style808
modules/print_layout.pyPrintLayout._create_rectangle_box_item908
modules/print_layout_baufreigabe.pyPrintLayoutBaufreigabe.create_baufreigabe_layout90
modules/print_layout_baufreigabe.pyPrintLayoutBaufreigabe._setup_layout_objects_baufreigabe262
modules/print_layout_baufreigabe.pyPrintLayoutBaufreigabe._calc_atlas_margin_percent394
modules/print_logic.pyPrintLogic._failed_result123
modules/print_logic.pyPrintLogic._show_target_size_too_small126
modules/print_logic.pyPrintLogic._is_enabled_flag133
modules/print_logic.pyPrintLogic._resolve_layer_from_project138
modules/print_logic.pyPrintLogic._resolve_active_layer158
modules/print_logic.pyPrintLogic._get_druckpuffer_cm167
modules/print_logic.pyPrintLogic._get_druckpuffer_m175
modules/print_logic.pyPrintLogic._import_qgis_symbol178
modules/print_logic.pyPrintLogic._build_rectangle185
modules/print_logic.pyPrintLogic._clone_extent194
modules/print_logic.pyPrintLogic._get_existing_layer_by_name260
modules/print_logic.pyPrintLogic._create_druckrechteck_layer273
modules/print_logic.pyPrintLogic._clear_layer_features301
modules/print_logic.pyPrintLogic.create_atlas_layer_from_selection325
modules/print_logic.pyPrintLogic.configure_atlas_for_baufreigabe_layout468
modules/print_logic.pyPrintLogic._store_druckrechteck614
modules/print_logic.pyPrintLogic.activate_druckrechteck_capture662
modules/print_logic.pyPrintLogic._resolve_selection_layer792
modules/print_logic.pyPrintLogic._get_selected_extent805
modules/print_logic.pyPrintLogic.set_kartenname_for_auswahl961
modules/print_logic.pyPrintLogic.set_plotmassstab_for_auswahl965
modules/print_logic.pyPrintLogic.set_view_for_auswahl976
modules/print_logic.pyPrintLogic.set_zielgroesse_for_auswahl982
modules/print_logic.pyPrintLogic.set_formfaktor985
modules/print_logic.pyPrintLogic._get_plot_dimensions_mm1052
modules/print_logic.pyPrintLogic._get_required_map_dimensions_mm1061
modules/print_logic.pyPrintLogic.druckvorlage_anlegen1161
modules/pruef_ergebnis.pypruef_ergebnis.dateipfad167
modules/Pruefmanager.pyPruefmanager.report_summary45
modules/Pruefmanager.pyPruefmanager.zeige_hinweis62
modules/Pruefmanager.pyPruefmanager._handle_datei_existiert83
modules/Pruefmanager.pyPruefmanager._handle_verfahrensgebiet_layer_existiert230
modules/Pruefmanager.pyPruefmanager._ask_use_or_replace_pufferlayer273
ui/navigation.pyNavigation.init_ui33
ui/navigation.pyNavigation.add_action68
ui/navigation.pyNavigation.finalize_menu_and_toolbar81
ui/navigation.pyNavigation.set_active_plugin94
ui/navigation.pyNavigation.remove_action104
ui/navigation.pyNavigation.remove_all115
ui/tabs/print_tab.pyPrintTab.set_services94
ui/tabs/print_tab.pyPrintTab._build_ui115
ui/tabs/print_tab.pyPrintTab._restore_state267
ui/tabs/print_tab.pyPrintTab._on_kartenname_changed334
ui/tabs/print_tab.pyPrintTab._on_massstab_changed347
ui/tabs/print_tab.pyPrintTab._on_thema_changed352
ui/tabs/print_tab.pyPrintTab._on_zielgroesse_changed357
ui/tabs/print_tab.pyPrintTab._on_formfaktor_changed362
ui/tabs/print_tab.pyPrintTab._on_druckbereich_changed368
ui/tabs/print_tab.pyPrintTab._on_atlas_erzeugen_changed377
ui/tabs/print_tab.pyPrintTab._on_druckpuffer_clicked392
ui/tabs/print_tab.pyPrintTab._format_druckpuffer_label425
ui/tabs/print_tab.pyPrintTab._on_vorlage_erstellen428
ui/tabs/print_tab.pyPrintTab._disconnect_project_signals441
ui/tabs/print_tab.pyPrintTab._connect_project_signals464
ui/tabs/print_tab.pyPrintTab._toggle_atlas489
ui/tabs/print_tab.pyPrintTab._restore_atlas_layer_selection495
ui/tabs/print_tab.pyPrintTab._disconnect_theme_collection_signals519
ui/tabs/print_tab.pyPrintTab._connect_theme_collection_signals538
ui/tabs/print_tab.pyPrintTab._refresh_thema_combo_live565
ui/tabs/print_tab.pyPrintTab._get_gespeicherte_themen585
ui/tabs/print_tab.pyPrintTab._get_current_canvas_scale602
ui/tabs/print_tab.pyPrintTab._on_atlas_layer_changed612
ui/tabs/print_tab.pyPrintTab._on_auswahl_as_atlas_clicked641
ui/tabs/print_tab.pyPrintTab._populate_atlas_layer_combo679
ui/tabs/settings_tab.pySettingsTab._build_input118

sn_verfahrensgebiet

Fachplugin · Ordner Plugin_SN_Verfahrensgebiet · 12 Testdateien · 208 Testfälle

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
  root --> g1["TestBaueFlurstueckCsv (12)"]
  class g1 groupnode
  g1 --> t1("normalfall_mit_fuehrenden_nullen")
  g1 --> t2("nenner_null_wird_zu_unterstrichen")
  g1 --> t3("nenner_leer_wird_zu_unterstrichen")
  g1 --> t4("gemarkung_ohne_fuehrende_nullen_wird_aufgefuellt")
  g1 --> t5("ungueltiges_format_gibt_none")
  g1 --> t6("leerer_wert_gibt_none")
  g1 --> t7("nenner_9001_wird_zu_buchstabe_a")
  g1 --> t8("nenner_9002_wird_zu_buchstabe_b")
  g1 --> t9("nenner_9026_wird_zu_buchstabe_z")
  g1 --> t10("nenner_ausserhalb_buchstaben_bereich_bleibt_numerisch")
  g1 --> t11("nenner_9001_mit_fuehrenden_nullen_wird_erkannt")
  g1 --> t12("einstellige_folge_wird_auf_2_stellen_aufgefuellt")
  root --> g2["TestBaueFlurstueckCsvListe (1)"]
  class g2 groupnode
  g2 --> t13("nur_gueltige_zeilen_in_liste")
  root --> g3["TestHoleVerfahrensgebietLayer (3)"]
  class g3 groupnode
  g3 --> t14("layer_per_name_hat_vorrang_vor_combo_auswahl")
  g3 --> t15("combo_auswahl_als_fallback_ohne_namens_layer")
  g3 --> t16("kein_layer_gibt_none")
  root --> g4["TestFordereManuellesLadenAn (2)"]
  class g4 groupnode
  g4 --> t17("ohne_vef_vkzf_nennt_fehlende_kennzeichen")
  g4 --> t18("mit_vef_vkzf_nennt_verfahrensnummer")
  root --> g5["TestTry3Bootstrap (1)"]
  class g5 groupnode
  g5 --> t19("setzt_verfahrensnummer_und_fordert_manuelles_laden_an")
  root --> g6["TestBeteiligungPruefenDispatch (2)"]
  class g6 groupnode
  g6 --> t20("layer_ohne_kennzeichen_fordert_manuelles_laden_an")
  g6 --> t21("kein_layer_setzt_verfahrensnummer_und_fordert_laden_an")
  root --> g7["TestLadeBeteiligungCsv (4)"]
  class g7 groupnode
  g7 --> t22("dialog_abgebrochen_gibt_none")
  g7 --> t23("fehlende_flurstueck_spalte_wirft_fehler")
  g7 --> t24("leere_datei_wirft_fehler")
  g7 --> t25("erfolgsfall_gibt_zeilen_und_spalten_zurueck")
  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
  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
TestBaueFlurstueckCsv
test_normalfall_mit_fuehrenden_nullen
— (Docstring fehlt)grünnie geprüft
TestBaueFlurstueckCsv
test_nenner_null_wird_zu_unterstrichen
— (Docstring fehlt)grünnie geprüft
TestBaueFlurstueckCsv
test_nenner_leer_wird_zu_unterstrichen
— (Docstring fehlt)grünnie geprüft
TestBaueFlurstueckCsv
test_gemarkung_ohne_fuehrende_nullen_wird_aufgefuellt
— (Docstring fehlt)grünnie geprüft
TestBaueFlurstueckCsv
test_ungueltiges_format_gibt_none
— (Docstring fehlt)grünnie geprüft
TestBaueFlurstueckCsv
test_leerer_wert_gibt_none
— (Docstring fehlt)grünnie geprüft
TestBaueFlurstueckCsv
test_nenner_9001_wird_zu_buchstabe_a
— (Docstring fehlt)grünnie geprüft
TestBaueFlurstueckCsv
test_nenner_9002_wird_zu_buchstabe_b
— (Docstring fehlt)grünnie geprüft
TestBaueFlurstueckCsv
test_nenner_9026_wird_zu_buchstabe_z
— (Docstring fehlt)grünnie geprüft
TestBaueFlurstueckCsv
test_nenner_ausserhalb_buchstaben_bereich_bleibt_numerisch
— (Docstring fehlt)grünnie geprüft
TestBaueFlurstueckCsv
test_nenner_9001_mit_fuehrenden_nullen_wird_erkannt
— (Docstring fehlt)grünnie geprüft
TestBaueFlurstueckCsv
test_einstellige_folge_wird_auf_2_stellen_aufgefuellt
— (Docstring fehlt)grünnie geprüft
TestBaueFlurstueckCsvListe
test_nur_gueltige_zeilen_in_liste
— (Docstring fehlt)grünnie geprüft
TestHoleVerfahrensgebietLayer
test_layer_per_name_hat_vorrang_vor_combo_auswahl
— (Docstring fehlt)grünnie geprüft
TestHoleVerfahrensgebietLayer
test_combo_auswahl_als_fallback_ohne_namens_layer
— (Docstring fehlt)grünnie geprüft
TestHoleVerfahrensgebietLayer
test_kein_layer_gibt_none
— (Docstring fehlt)grünnie geprüft
TestFordereManuellesLadenAn
test_ohne_vef_vkzf_nennt_fehlende_kennzeichen
— (Docstring fehlt)grünnie geprüft
TestFordereManuellesLadenAn
test_mit_vef_vkzf_nennt_verfahrensnummer
— (Docstring fehlt)grünnie geprüft
TestTry3Bootstrap
test_setzt_verfahrensnummer_und_fordert_manuelles_laden_an
— (Docstring fehlt)grünnie geprüft
TestBeteiligungPruefenDispatch
test_layer_ohne_kennzeichen_fordert_manuelles_laden_an
— (Docstring fehlt)grünnie geprüft
TestBeteiligungPruefenDispatch
test_kein_layer_setzt_verfahrensnummer_und_fordert_laden_an
— (Docstring fehlt)grünnie geprüft
TestLadeBeteiligungCsv
test_dialog_abgebrochen_gibt_none
— (Docstring fehlt)grünnie geprüft
TestLadeBeteiligungCsv
test_fehlende_flurstueck_spalte_wirft_fehler
— (Docstring fehlt)grünnie geprüft
TestLadeBeteiligungCsv
test_leere_datei_wirft_fehler
— (Docstring fehlt)grünnie geprüft
TestLadeBeteiligungCsv
test_erfolgsfall_gibt_zeilen_und_spalten_zurueck
— (Docstring fehlt)grünnie geprüft

— (Docstring fehlt)

TestDockWidget 2
flowchart TD
  root(["test_dockwidget.py"])
  class root rootnode
  root --> g1["TestDockWidget (2)"]
  class g1 groupnode
  g1 --> t1("init_tabs_with_services_injects_available_services")
  g1 --> t2("init_tabs_with_services_reports_errors")
  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
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
  root(["test_flurstueck_alkis.py"])
  class root rootnode
  root --> g1["TestFlurstueckAlkis (11)"]
  class g1 groupnode
  g1 --> t1("user_cancel_returns_none")
  g1 --> t2("empty_text_after_confirmation_returns_none")
  g1 --> t3("invalid_wfs_layer_returns_none")
  g1 --> t4("success_returns_layer_and_first_status")
  g1 --> t5("sql_filter_contains_all_schluessel")
  g1 --> t6("existing_layer_reload_yes")
  g1 --> t7("existing_layer_abbrechen_returns_none")
  g1 --> t8("vorgabe_schluessel_prefills_default_text")
  g1 --> t9("vorgabe_namen_appears_in_label")
  g1 --> t10("backwards_compatible_no_new_params")
  g1 --> t11("ohne_schluessel_abfrage_ueberspringt_ask_text")
  root --> g2["TestFlurstueckAlkisAnhaengenDedup (3)"]
  class g2 groupnode
  g2 --> t12("append_ueberspringt_bereits_vorhandene_flurstuecke")
  g2 --> t13("append_ohne_kennzeichen_feld_haengt_alles_an")
  g2 --> t14("ohne_schluessel_abfrage_append_dedup")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 warn
  class t5 warn
  class t6 warn
  class t7 ok
  class t8 warn
  class t9 warn
  class t10 warn
  class t11 ok
  class t12 ok
  class t13 ok
  class t14 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
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
  root(["test_gemarkung_alkis.py"])
  class root rootnode
  root --> g1["TestExtractSchluesselUndName (4)"]
  class g1 groupnode
  g1 --> t1("standard_attribute")
  g1 --> t2("fallback_attribute")
  g1 --> t3("missing_attribute_returns_empty")
  g1 --> t4("none_value_returns_empty")
  root --> g2["TestGemarkungSchluesselbbox (6)"]
  class g2 groupnode
  g2 --> t5("success_bbox_filter")
  g2 --> t6("fallback_when_bbox_fails")
  g2 --> t7("both_layers_fail_returns_empty")
  g2 --> t8("deduplication_and_sorting")
  g2 --> t9("feature_without_schluessel_skipped")
  g2 --> t10("exception_returns_empty")
  root --> g3["TestGemarkungSchluesselnurNummern (2)"]
  class g3 groupnode
  g3 --> t11("returns_only_nummern")
  g3 --> t12("empty_input_returns_empty")
  root --> g4["TestLadeGemarkungenlayer (2)"]
  class g4 groupnode
  g4 --> t13("returns_layer_when_service_reachable")
  g4 --> t14("returns_none_when_service_unreachable")
  class t1 warn
  class t2 warn
  class t3 ok
  class t4 ok
  class t5 skip
  class t6 skip
  class t7 skip
  class t8 skip
  class t9 skip
  class t10 skip
  class t11 skip
  class t12 skip
  class t13 ok
  class t14 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
TestExtractSchluesselUndName
test_standard_attribute
— (Docstring fehlt)rotnie geprüft
TestExtractSchluesselUndName
test_fallback_attribute
— (Docstring fehlt)rotnie geprüft
TestExtractSchluesselUndName
test_missing_attribute_returns_empty
— (Docstring fehlt)grünnie geprüft
TestExtractSchluesselUndName
test_none_value_returns_empty
— (Docstring fehlt)grünnie geprüft
TestGemarkungSchluesselbbox
test_success_bbox_filter
WFS-BBox-Filter liefert Features → korrekte Tupel-Liste.übersp.nie geprüft
TestGemarkungSchluesselbbox
test_fallback_when_bbox_fails
BBox-Filter schlägt fehl → Fallback auf Volllade + client-seitige Filterung.übersp.nie geprüft
TestGemarkungSchluesselbbox
test_both_layers_fail_returns_empty
Beide Lade-Strategien scheitern → leere Liste.übersp.nie geprüft
TestGemarkungSchluesselbbox
test_deduplication_and_sorting
Doppelte Schlüssel werden dedupliziert, Ergebnis ist sortiert.übersp.nie geprüft
TestGemarkungSchluesselbbox
test_feature_without_schluessel_skipped
Feature ohne Schlüssel-Attribut wird übersprungen.übersp.nie geprüft
TestGemarkungSchluesselbbox
test_exception_returns_empty
Exception im Ladevorgang → leere Liste (kein Crash).übersp.nie geprüft
TestGemarkungSchluesselnurNummern
test_returns_only_nummern
— (Docstring fehlt)übersp.nie geprüft
TestGemarkungSchluesselnurNummern
test_empty_input_returns_empty
— (Docstring fehlt)übersp.nie geprüft
TestLadeGemarkungenlayer
test_returns_layer_when_service_reachable
Dienst erreichbar (isValid=True) → Layer-Objekt zurückgegeben.grünnie geprüft
TestLadeGemarkungenlayer
test_returns_none_when_service_unreachable
Dienst nicht erreichbar (isValid=False) → None zurückgegeben.grünnie geprüft

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

TestExtrahiereGmlIds 5TestGrenzpunktAlkis 7TestGrenzpunkteGemarkungsweiseStil 1
flowchart TD
  root(["test_grenzpunkt_alkis.py"])
  class root rootnode
  root --> g1["TestExtrahiereGmlIds (5)"]
  class g1 groupnode
  g1 --> t1("xlink_href_format")
  g1 --> t2("plain_gml_id")
  g1 --> t3("empty_value_skipped")
  g1 --> t4("deduplication")
  g1 --> t5("sorted_output")
  root --> g2["TestGrenzpunktAlkis (7)"]
  class g2 groupnode
  g2 --> t6("no_vg_layer_returns_none")
  g2 --> t7("invalid_punktort_layer")
  g2 --> t8("empty_punktort_layer")
  g2 --> t9("no_gml_ids_returns_pta_only")
  g2 --> t10("grenzpunkt_batch_empty")
  g2 --> t11("success_returns_both_layers")
  g2 --> t12("extent_derived_from_vg_layer")
  root --> g3["TestGrenzpunkteGemarkungsweiseStil (1)"]
  class g3 groupnode
  g3 --> t13("stil_wird_nach_dem_laden_auf_den_ergebnis_layer_angewendet")
  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 warn
  class t10 warn
  class t11 warn
  class t12 warn
  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
TestExtrahiereGmlIds
test_xlink_href_format
URN-Format 'urn:adv:oid:DEABC123' → nur 'DEABC123' extrahiert.grünnie geprüft
TestExtrahiereGmlIds
test_plain_gml_id
Plain-GML-ID ohne Doppelpunkt → direkt übernommen.grünnie geprüft
TestExtrahiereGmlIds
test_empty_value_skipped
Leerer gehoertZu-Wert wird übersprungen.grünnie geprüft
TestExtrahiereGmlIds
test_deduplication
Doppelte Referenzen werden dedupliziert.grünnie geprüft
TestExtrahiereGmlIds
test_sorted_output
Rückgabe ist aufsteigend sortiert.grünnie geprüft
TestGrenzpunktAlkis
test_no_vg_layer_returns_none
— (Docstring fehlt)grünnie geprüft
TestGrenzpunktAlkis
test_invalid_punktort_layer
— (Docstring fehlt)grünnie geprüft
TestGrenzpunktAlkis
test_empty_punktort_layer
— (Docstring fehlt)grünnie geprüft
TestGrenzpunktAlkis
test_no_gml_ids_returns_pta_only
— (Docstring fehlt)rotnie geprüft
TestGrenzpunktAlkis
test_grenzpunkt_batch_empty
— (Docstring fehlt)rotnie geprüft
TestGrenzpunktAlkis
test_success_returns_both_layers
— (Docstring fehlt)rotnie geprüft
TestGrenzpunktAlkis
test_extent_derived_from_vg_layer
Wenn kein extent übergeben → Extent aus VG-Layer holen.rotnie geprüft
TestGrenzpunkteGemarkungsweiseStil
test_stil_wird_nach_dem_laden_auf_den_ergebnis_layer_angewendet
Prüft, dass grenzpunkte_gemarkungsweise() nach dem Laden apply_style() mit dem neuen ALKIS-Grenzpunkt-Stil auf den fertigen Join-Layer anwendet (#53).grünnie geprüft

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

TestExtrahiereKnickpunkte 4TestKnickpunktPruefungInputvalidierung 3TestKnickpunktPruefungKlassifizierung 2TestFehlendKnickpunkteViaVerbindungslinien 4
flowchart TD
  root(["test_knickpunkt_pruefung.py"])
  class root rootnode
  root --> g1["TestExtrahiereKnickpunkte (4)"]
  class g1 groupnode
  g1 --> t1("leerer_layer_gibt_leere_liste")
  g1 --> t2("keine_gueltige_geometrie_gibt_leere_liste")
  g1 --> t3("feature_mit_leerer_geometrie_gibt_leere_liste")
  g1 --> t4("qgis_nicht_verfuegbar_gibt_leere_liste")
  root --> g2["TestKnickpunktPruefungInputvalidierung (3)"]
  class g2 groupnode
  g2 --> t5("keine_knickpunkte_gibt_none_zurueck")
  g2 --> t6("kein_punktort_layer_gibt_none_zurueck")
  g2 --> t7("abbruch_via_progress_gibt_none_zurueck")
  root --> g3["TestKnickpunktPruefungKlassifizierung (2)"]
  class g3 groupnode
  g3 --> t8("identischer_punkt_wird_gruen_gezaehlt")
  g3 --> t9("kein_pta_an_knickpunkt_wird_rot_gezaehlt")
  root --> g4["TestFehlendKnickpunkteViaVerbindungslinien (4)"]
  class g4 groupnode
  g4 --> t10("leere_union_gibt_null_zurueck")
  g4 --> t11("weniger_als_zwei_pta_auf_ring_kein_orange")
  g4 --> t12("ungematchter_pta_im_puffer_wird_orange")
  g4 --> t13("ungematchter_pta_ausserhalb_puffer_kein_orange")
  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
TestExtrahiereKnickpunkte
test_leerer_layer_gibt_leere_liste
— (Docstring fehlt)grünnie geprüft
TestExtrahiereKnickpunkte
test_keine_gueltige_geometrie_gibt_leere_liste
— (Docstring fehlt)grünnie geprüft
TestExtrahiereKnickpunkte
test_feature_mit_leerer_geometrie_gibt_leere_liste
— (Docstring fehlt)grünnie geprüft
TestExtrahiereKnickpunkte
test_qgis_nicht_verfuegbar_gibt_leere_liste
Wenn qgis.core kein QgsPointXY hat (ImportError in Funktion), leere Liste.grünnie geprüft
TestKnickpunktPruefungInputvalidierung
test_keine_knickpunkte_gibt_none_zurueck
— (Docstring fehlt)grünnie geprüft
TestKnickpunktPruefungInputvalidierung
test_kein_punktort_layer_gibt_none_zurueck
— (Docstring fehlt)grünnie geprüft
TestKnickpunktPruefungInputvalidierung
test_abbruch_via_progress_gibt_none_zurueck
— (Docstring fehlt)grünnie geprüft
TestKnickpunktPruefungKlassifizierung
test_identischer_punkt_wird_gruen_gezaehlt
PunktortTA exakt am Knickpunkt → identisch_count == 1.grünnie geprüft
TestKnickpunktPruefungKlassifizierung
test_kein_pta_an_knickpunkt_wird_rot_gezaehlt
Kein PunktortTA am Knickpunkt → kein_pta_count == 1.grünnie geprüft
TestFehlendKnickpunkteViaVerbindungslinien
test_leere_union_gibt_null_zurueck
bror_union.isEmpty() == True → (0, []).grünnie geprüft
TestFehlendKnickpunkteViaVerbindungslinien
test_weniger_als_zwei_pta_auf_ring_kein_orange
Nur 1 gematchter PunktortTA auf Ring → keine fehlenden Knickpunkte.grünnie geprüft
TestFehlendKnickpunkteViaVerbindungslinien
test_ungematchter_pta_im_puffer_wird_orange
Nicht-gematchter PunktortTA innerhalb 3-cm-Puffer → orange gezählt.grünnie geprüft
TestFehlendKnickpunkteViaVerbindungslinien
test_ungematchter_pta_ausserhalb_puffer_kein_orange
Nicht-gematchter PunktortTA außerhalb Puffer → nicht orange gezählt.grünnie geprüft

— (Docstring fehlt)

TestPluginMain 4
flowchart TD
  root(["test_main.py"])
  class root rootnode
  root --> g1["TestPluginMain (4)"]
  class g1 groupnode
  g1 --> t1("init_sets_services_and_names")
  g1 --> t2("initGui_registers_action_when_basis_ui_exists")
  g1 --> t3("run_creates_dock_and_marks_toolbar_active")
  g1 --> t4("unload_removes_dock_and_action")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestPluginMain
test_init_sets_services_and_names
— (Docstring fehlt)grünnie geprüft
TestPluginMain
test_initGui_registers_action_when_basis_ui_exists
— (Docstring fehlt)grünnie geprüft
TestPluginMain
test_run_creates_dock_and_marks_toolbar_active
— (Docstring fehlt)grünnie geprüft
TestPluginMain
test_unload_removes_dock_and_action
— (Docstring fehlt)grünnie geprüft

— (Docstring fehlt)

TestVerfahrensgebietAlkis 8
flowchart TD
  root(["test_verfahrensgebiet_alkis.py"])
  class root rootnode
  root --> g1["TestVerfahrensgebietAlkis (8)"]
  class g1 groupnode
  g1 --> t1("check_existing_layer_first_load")
  g1 --> t2("check_existing_layer_keep_existing")
  g1 --> t3("verfahrensgebiet_alkis_fails_when_verfahrensnummer_missing")
  g1 --> t4("verfahrensgebiet_alkis_fails_on_invalid_wfs_layer")
  g1 --> t5("verfahrensgebiet_alkis_success_single_kombination")
  g1 --> t6("verfahrensgebiet_alkis_multi_kombination_dialog_auswahl")
  g1 --> t7("verfahrensgebiet_alkis_multi_kombination_dialog_abbruch")
  g1 --> t8("verfahrensgebiet_alkis_multi_kombination_mehrfachauswahl")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  class t6 ok
  class t7 ok
  class t8 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestVerfahrensgebietAlkis
test_check_existing_layer_first_load
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkis
test_check_existing_layer_keep_existing
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkis
test_verfahrensgebiet_alkis_fails_when_verfahrensnummer_missing
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkis
test_verfahrensgebiet_alkis_fails_on_invalid_wfs_layer
— (Docstring fehlt)grünnie geprüft
TestVerfahrensgebietAlkis
test_verfahrensgebiet_alkis_success_single_kombination
Einzelne (adv_name, bezeichnung)-Kombination → kein Dialog, Memory-Layer zurück.grünnie geprüft
TestVerfahrensgebietAlkis
test_verfahrensgebiet_alkis_multi_kombination_dialog_auswahl
Zwei verschiedene Kombinationen → Dialog wird gezeigt, gewählte Features genutzt.grünnie geprüft
TestVerfahrensgebietAlkis
test_verfahrensgebiet_alkis_multi_kombination_dialog_abbruch
Zwei verschiedene Kombinationen → Nutzer bricht Dialog ab → NONE.grünnie geprüft
TestVerfahrensgebietAlkis
test_verfahrensgebiet_alkis_multi_kombination_mehrfachauswahl
Zwei verschiedene Kombinationen → beide ausgewählt → beide Feature-Gruppen genutzt.grünnie geprüft

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

TestSelectByLocation 3TestFuegeVkzFeldHinzu 3TestFlaechenvergleich 8TestVerfahrensgebietAlkisKomplett 16
flowchart TD
  root(["test_verfahrensgebiet_alkis_komplett.py"])
  class root rootnode
  root --> g1["TestSelectByLocation (3)"]
  class g1 groupnode
  g1 --> t1("processing_not_available_returns_zero")
  g1 --> t2("processing_success_returns_count")
  g1 --> t3("processing_exception_returns_zero")
  root --> g2["TestFuegeVkzFeldHinzu (3)"]
  class g2 groupnode
  g2 --> t4("empty_vkz_does_nothing")
  g2 --> t5("none_vkz_does_nothing")
  g2 --> t6("vkz_field_added")
  root --> g3["TestFlaechenvergleich (8)"]
  class g3 groupnode
  g3 --> t7("gleiche_flaeche_stimmt_ueberein")
  g3 --> t8("verschiedene_flaeche_stimmt_nicht_ueberein")
  g3 --> t9("differenz_innerhalb_toleranz")
  g3 --> t10("differenz_ausserhalb_toleranz")
  g3 --> t11("flaechen_werte_korrekt")
  g3 --> t12("lese_toleranz_default_ist_null")
  g3 --> t13("lese_toleranz_parst_string")
  g3 --> t14("lese_toleranz_ungueltig_fallback_null")
  root --> g4["TestVerfahrensgebietAlkisKomplett (16)"]
  class g4 groupnode
  g4 --> t15("vg_alkis_none_aborts")
  g4 --> t16("flst_none_aborts")
  g4 --> t17("no_selection_returns_none_enriched")
  g4 --> t18("invalid_enriched_layer_returns_none")
  g4 --> t19("progress_cancel_after_step1_returns_none")
  g4 --> t20("success_flaechen_match_zeigt_info")
  g4 --> t21("no_vkz_variable_passes_empty_string")
  g4 --> t22("flaechen_abweichung_abbrechen_kein_detailcheck")
  g4 --> t23("flaechen_abweichung_als_vg_laden")
  g4 --> t24("flaechen_abweichung_detailpruefung_startet_knickpruefung")
  g4 --> t25("bror_layer_bleibt_bei_erfolg_im_projekt")
  g4 --> t26("bror_layer_wird_bei_fehler_entfernt")
  g4 --> t27("kein_vkz_kein_landkreis_dialog_abgebrochen")
  g4 --> t28("kein_vkz_kein_landkreis_dialog_liefert_landkreis")
  g4 --> t29("landkreis_modus_wird_bei_fehlender_vkz_verwendet")
  g4 --> t30("landkreis_modus_nur_laden_ueberspringt_dialog2")
  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
  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
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
  root(["test_verfahrensgebiet_edit_service.py"])
  class root rootnode
  root --> g1["TestPruefeFlurstueckLayer (3)"]
  class g1 groupnode
  g1 --> t1("layer_ok_passes")
  g1 --> t2("layer_missing_field_fails")
  g1 --> t3("layer_wrong_geometry_fails")
  root --> g2["TestPruefeAuswahl (3)"]
  class g2 groupnode
  g2 --> t4("no_selection_fails")
  g2 --> t5("with_selection_passes")
  g2 --> t6("selectedFeatureCount_exception_treated_as_zero")
  root --> g3["TestGetKennzeichenMenge (3)"]
  class g3 groupnode
  g3 --> t7("returns_set_of_ids")
  g3 --> t8("empty_layer_returns_empty_set")
  g3 --> t9("single_kennzeichen_without_comma")
  root --> g4["TestErstelle (3)"]
  class g4 groupnode
  g4 --> t10("success_counts")
  g4 --> t11("partial_failure_on_empty_geometry")
  g4 --> t12("all_fail_on_empty_geometries")
  root --> g5["TestErgaenzeVerfahrensgebiet (3)"]
  class g5 groupnode
  g5 --> t13("adds_only_new_ids")
  g5 --> t14("skip_empty_geometry_counts_as_failed")
  g5 --> t15("all_already_present")
  root --> g6["TestEntferneAusVerfahrensgebiet (5)"]
  class g6 groupnode
  g6 --> t16("removes_present_ids")
  g6 --> t17("counts_ids_not_in_layer")
  g6 --> t18("none_present_in_layer")
  g6 --> t19("empty_selection_removes_nothing")
  g6 --> t20("removes_last_id_deletes_feature")
  root --> g7["TestErsetze (1)"]
  class g7 groupnode
  g7 --> t21("ersetze_delegates_to_erstelle")
  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
  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
TestPruefeFlurstueckLayer
test_layer_ok_passes
Gültiger Polygon-Vektor-Layer mit Pflichtfeldern → ok=True.grünnie geprüft
TestPruefeFlurstueckLayer
test_layer_missing_field_fails
Layer ohne Pflichtfelder → ok=False, aktion=felder_fehlen.grünnie geprüft
TestPruefeFlurstueckLayer
test_layer_wrong_geometry_fails
Layer mit falschem Geometrietyp → ok=False, aktion=falscher_geotyp.grünnie geprüft
TestPruefeAuswahl
test_no_selection_fails
— (Docstring fehlt)grünnie geprüft
TestPruefeAuswahl
test_with_selection_passes
— (Docstring fehlt)grünnie geprüft
TestPruefeAuswahl
test_selectedFeatureCount_exception_treated_as_zero
— (Docstring fehlt)grünnie geprüft
TestGetKennzeichenMenge
test_returns_set_of_ids
Kommagetrennte Kennzeichen im Single-Feature werden korrekt geparst.grünnie geprüft
TestGetKennzeichenMenge
test_empty_layer_returns_empty_set
— (Docstring fehlt)grünnie geprüft
TestGetKennzeichenMenge
test_single_kennzeichen_without_comma
Einzelnes Kennzeichen ohne Komma wird korrekt erkannt.grünnie geprüft
TestErstelle
test_success_counts
3 gültige Features → erfolgreich=3, fehlgeschlagen=0, 1 Union-Feature im Layer.grünnie geprüft
TestErstelle
test_partial_failure_on_empty_geometry
2 ok + 1 leere Geometrie → erfolgreich=2, fehlgeschlagen=1.grünnie geprüft
TestErstelle
test_all_fail_on_empty_geometries
Alle Features haben leere Geometrie → erfolgreich=0, kein Feature im Layer.grünnie geprüft
TestErgaenzeVerfahrensgebiet
test_adds_only_new_ids
Auswahl enthält 1 neue + 1 bereits vorhandene ID → hinzugefügt=1.grünnie geprüft
TestErgaenzeVerfahrensgebiet
test_skip_empty_geometry_counts_as_failed
Neue ID mit leerer Geometrie → fehlgeschlagen=1, hinzugefügt=0.grünnie geprüft
TestErgaenzeVerfahrensgebiet
test_all_already_present
Alle ausgewählten IDs bereits vorhanden → bereits_vorhanden=n, hinzugefügt=0.grünnie geprüft
TestEntferneAusVerfahrensgebiet
test_removes_present_ids
Auswahl enthält 1 vorhandene ID → entfernt=1, nicht_enthalten=0.grünnie geprüft
TestEntferneAusVerfahrensgebiet
test_counts_ids_not_in_layer
Auswahl enthält ID, die nicht im Verfahrensgebiet ist → nicht_enthalten=1.grünnie geprüft
TestEntferneAusVerfahrensgebiet
test_none_present_in_layer
Auswahl hat IDs, die alle nicht im Layer sind → entfernt=0, nicht_enthalten=n.grünnie geprüft
TestEntferneAusVerfahrensgebiet
test_empty_selection_removes_nothing
Leere Auswahl → nichts entfernt, nichts nicht_enthalten.grünnie geprüft
TestEntferneAusVerfahrensgebiet
test_removes_last_id_deletes_feature
Wird das letzte Kennzeichen entfernt, wird das Feature gelöscht.grünnie geprüft
TestErsetze
test_ersetze_delegates_to_erstelle
ersetze_verfahrensgebiet gibt dasselbe Ergebnis wie erstelle zurück.grünnie geprüft

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

TestFindShp 4TestErstelleMemoryLayerAusShp 3TestLadeVgAusZip 6TestVerfahrensgebietShapeKomplett 18
flowchart TD
  root(["test_verfahrensgebiet_shape_komplett.py"])
  class root rootnode
  root --> g1["TestFindShp (4)"]
  class g1 groupnode
  g1 --> t1("findet_shp_in_root")
  g1 --> t2("findet_shp_in_unterordner")
  g1 --> t3("kein_shp_gibt_none_zurueck")
  g1 --> t4("case_insensitive_erkennung")
  root --> g2["TestErstelleMemoryLayerAusShp (3)"]
  class g2 groupnode
  g2 --> t5("leere_geometrien_geben_none")
  g2 --> t6("keine_features_gibt_none")
  g2 --> t7("attribute_von_erstem_feature_werden_gesetzt")
  root --> g3["TestLadeVgAusZip (6)"]
  class g3 groupnode
  g3 --> t8("dialog_abgebrochen_gibt_none_zurueck")
  g3 --> t9("zip_fehler_gibt_none_und_warning")
  g3 --> t10("kein_shp_in_zip_gibt_none_und_warning")
  g3 --> t11("invalider_qgslayer_gibt_none_und_warning")
  g3 --> t12("leere_geometrien_geben_none_und_warning")
  g3 --> t13("erfolg_gibt_memory_layer_zurueck")
  root --> g4["TestVerfahrensgebietShapeKomplett (18)"]
  class g4 groupnode
  g4 --> t14("lade_zip_none_aborts")
  g4 --> t15("shape_vg_sofort_ins_projekt_nach_laden")
  g4 --> t16("shape_vg_wird_bei_abbruch_aus_projekt_entfernt")
  g4 --> t17("shape_vg_bleibt_im_projekt_bei_erfolg")
  g4 --> t18("flst_none_aborts")
  g4 --> t19("keine_flurstuecke_selektiert_gibt_warning")
  g4 --> t20("flaechen_uebereinstimmung_gibt_info_und_kein_dialog")
  g4 --> t21("abweichung_abbrechen_gibt_shape_vg_zurueck")
  g4 --> t22("abweichung_detailpruefung_ruft_knickpunkt_pruefung_auf")
  g4 --> t23("punktort_ta_none_gibt_shape_vg_zurueck_und_zeigt_fehler")
  g4 --> t24("temp_layer_wird_stets_entfernt")
  g4 --> t25("bror_layer_ist_stets_none")
  g4 --> t26("bror_geladen_und_zurueckgegeben_wenn_vkz_gesetzt")
  g4 --> t27("bror_wird_vor_shape_vg_ins_projekt_eingefuegt")
  g4 --> t28("bror_wird_bei_abbruch_aus_projekt_entfernt")
  g4 --> t29("verfahrensgebiet_alkis_nicht_aufgerufen_wenn_vkz_leer")
  g4 --> t30("bror_als_erstes_argument_beim_flaechenvergleich")
  g4 --> t31("fallback_auf_temp_enriched_wenn_bror_ladeversagen")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  class t5 ok
  class t6 ok
  class t7 ok
  class t8 warn
  class t9 warn
  class t10 warn
  class t11 warn
  class t12 warn
  class t13 warn
  class t14 ok
  class t15 warn
  class t16 warn
  class t17 ok
  class t18 ok
  class t19 ok
  class t20 warn
  class t21 warn
  class t22 warn
  class t23 warn
  class t24 ok
  class t25 ok
  class t26 warn
  class t27 warn
  class t28 warn
  class t29 ok
  class t30 warn
  class t31 warn
  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
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
  root(["test_working_tab.py"])
  class root rootnode
  root --> g1["TestWorkingTab (24)"]
  class g1 groupnode
  g1 --> t1("set_busy_updates_button_state")
  g1 --> t2("on_verf_layer_changed_valid_sets_variable")
  g1 --> t3("on_verf_layer_changed_none_clears_variable")
  g1 --> t4("handle_verf_alkis_success_path")
  g1 --> t5("handle_verf_alkis_failure_clears_layer_var")
  g1 --> t6("handle_flurst_alkis_first_load_uebernimmt_layer")
  g1 --> t7("handle_flurst_aus_gemarkungen_ruft_flurstueck_alkis_ohne_schluessel_abfrage")
  g1 --> t8("handle_flurst_aus_gemarkungen_abbruch_zeigt_keine_zusaetzliche_meldung")
  g1 --> t9("handle_grenz_alkis_success_sets_haken")
  g1 --> t10("handle_grenz_alkis_none_result_sets_no_haken")
  g1 --> t11("handle_flurst_alkis_success_sets_haken_and_style")
  g1 --> t12("handle_flurst_alkis_existing_layer_keep_path")
  g1 --> t13("handle_flurst_alkis_invalid_input_returns_early")
  g1 --> t14("handle_verfahrensgebiet_from_selection_requires_active_layer")
  g1 --> t15("handle_verfahrensgebiet_from_selection_requires_required_fields")
  g1 --> t16("handle_verfahrensgebiet_from_selection_requires_selection")
  g1 --> t17("handle_verfahrensgebiet_from_selection_new_layer_success")
  g1 --> t18("handle_verfahrensgebiet_from_selection_existing_layer_ergaenzen_dispatch")
  g1 --> t19("handle_verfahrensgebiet_from_selection_existing_layer_entfernen_dispatch")
  g1 --> t20("handle_verfahrensgebiet_from_selection_existing_layer_ersetzen_dispatch")
  g1 --> t21("aus_liste_button_shows_not_implemented_hint")
  g1 --> t22("handle_gem_alkis_service_reachable_adds_layer")
  g1 --> t23("handle_gem_alkis_service_unreachable_shows_warning")
  g1 --> t24("handle_gem_alkis_layer_already_exists_shows_info")
  root --> g2["TestHandleVerfShape (9)"]
  class g2 groupnode
  g2 --> t25("status_none_clears_layer_variable")
  g2 --> t26("button_always_re_enabled_on_failure")
  g2 --> t27("verfahrensnummer_nicht_gesetzt_nein_bricht_ab")
  g2 --> t28("verfahrensnummer_nicht_gesetzt_ja_fuehrt_fort")
  g2 --> t29("verfahrensnummer_gesetzt_kein_rueckfrage_dialog")
  g2 --> t30("success_path_applies_style_and_sets_haken")
  g2 --> t31("bror_layer_erhaelt_qml_stil")
  g2 --> t32("enriched_layer_already_in_project_not_added_again")
  g2 --> t33("busy_state_set_during_execution")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 warn
  class t5 ok
  class t6 ok
  class t7 ok
  class t8 ok
  class t9 warn
  class t10 warn
  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 warn
  class t28 warn
  class t29 ok
  class t30 ok
  class t31 ok
  class t32 ok
  class t33 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

Ungetestete Funktionen (strukturell) – 34 von 104

Heuristik: Name kommt in keiner Testdatei des Pakets vor. Details siehe docs/tests/testkatalog.md.

DateiFunktion/MethodeZeile
functions/beteiligung_pruefung.py_baue_nenner_kennzeichen139
functions/beteiligung_pruefung.py_hole_flurstuecke_layer253
functions/beteiligung_pruefung.py_flurstueckskennzeichen_geometrien258
functions/beteiligung_pruefung.py_try1_listenabgleich279
functions/beteiligung_pruefung.py_lese_vef_vkzf380
functions/flurstueck_alkis.py_vorhandene_kennzeichen80
functions/gemarkung_alkis.pygemarkung_schluessel_von_vg_geometrie212
functions/grenzpunkt_alkis.py_punktort_ta_bbox_param115
functions/grenzpunkt_alkis.py_hat_geometrie573
functions/grenzpunkt_alkis.py_lade_gemarkung_extents_mit_puffer637
functions/grenzpunkt_alkis.py_lade_punktort_ta_batches_per_gemarkung784
functions/knickpunkt_pruefung.py_setze_kategorien_symbologie158
functions/knickpunkt_pruefung.pyerstelle_korrigiertes_polygon604
functions/umringspruefung.py_zerlege_in_teile55
functions/umringspruefung.py_setze_kategorien_symbologie112
functions/umringspruefung.pyumringspruefung152
functions/umringstatistik_grenzpunkte.py_setze_kategorien_symbologie74
functions/umringstatistik_grenzpunkte.py_klassifiziere119
functions/umringstatistik_grenzpunkte.pyumringstatistik_grenzpunkte164
functions/verfahrensgebiet_alkis.py_baue_layer_aus_kombinationen144
functions/verfahrensgebiet_alkis_komplett.py_entferne_hilfs_layer100
functions/verfahrensgebiet_alkis_komplett.py_flaeche_des_layers210
functions/verfahrensgebiet_dialoge.pyask_landkreis_objekte101
functions/verfahrensgebiet_shape_komplett.py_normalisiere_feldname110
functions/verfahrensgebiet_shape_komplett.py_finde_fbschl_index132
functions/verfahrensgebiet_shape_komplett.py_ermittle_gebietstyp_aus_fbschl161
functions/verfahrensgebiet_shape_komplett.py_wende_vergleich_stil_an211
functions/verfahrensgebiet_shape_komplett.py_erstelle_vergleich_layer251
functions/verfahrensgebiet_shape_komplett.py_finde_alle_shp342
ui/tabs/working_tab.pyWorkingTab.handle_beteiligung_pruefen297
ui/tabs/working_tab.pyWorkingTab._haken_label349
ui/tabs/working_tab.pyWorkingTab._restore_verf_layer_selection374
ui/tabs/working_tab.pyWorkingTab._uebernimm_flurstuecke_ergebnis390
ui/tabs/working_tab.pyWorkingTab.handle_umringstatistik777

sn_plan41

Fachplugin · Ordner Plugin_SN_Plan41 · 5 Testdateien · 44 Testfälle

— (Docstring fehlt)

TestListenauswerter 4
flowchart TD
  root(["test_listenauswerter.py"])
  class root rootnode
  root --> g1["TestListenauswerter (4)"]
  class g1 groupnode
  g1 --> t1("validate_rows_accepts_valid_row_and_normalizes_provider")
  g1 --> t2("validate_rows_rejects_missing_required_fields")
  g1 --> t3("validate_rows_sets_stildatei_none_on_style_failure")
  g1 --> t4("validate_rows_handles_non_mapping_rows_edge_case")
  class t1 ok
  class t2 ok
  class t3 ok
  class t4 ok
  classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
  classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
  classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
  classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestListenauswerter
test_validate_rows_accepts_valid_row_and_normalizes_provider
— (Docstring fehlt)grünnie geprüft
TestListenauswerter
test_validate_rows_rejects_missing_required_fields
— (Docstring fehlt)grünnie geprüft
TestListenauswerter
test_validate_rows_sets_stildatei_none_on_style_failure
— (Docstring fehlt)grünnie geprüft
TestListenauswerter
test_validate_rows_handles_non_mapping_rows_edge_case
— (Docstring fehlt)grünnie geprüft

— (Docstring fehlt)

TestTabALogic 9
flowchart TD
  root(["test_tab_a_logic.py"])
  class root rootnode
  root --> g1["TestTabALogic (9)"]
  class g1 groupnode
  g1 --> t1("verfahrens_db_set_and_load_roundtrip")
  g1 --> t2("verfahrens_db_clear")
  g1 --> t3("linkliste_set_and_load_existing_path")
  g1 --> t4("linkliste_load_returns_none_when_file_missing")
  g1 --> t5("resolve_linkliste_empty_uses_standard_and_persists")
  g1 --> t6("resolve_linkliste_returns_none_when_pruefmanager_rejects")
  g1 --> t7("resolve_raumfilter_without_filter_returns_none")
  g1 --> t8("resolve_raumfilter_verfahrensgebiet_uses_layer_lookup")
  g1 --> t9("extract_datenabruf_error_maps_merges_reason_maps")
  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
TestTabALogic
test_verfahrens_db_set_and_load_roundtrip
— (Docstring fehlt)grünnie geprüft
TestTabALogic
test_verfahrens_db_clear
— (Docstring fehlt)grünnie geprüft
TestTabALogic
test_linkliste_set_and_load_existing_path
— (Docstring fehlt)grünnie geprüft
TestTabALogic
test_linkliste_load_returns_none_when_file_missing
— (Docstring fehlt)grünnie geprüft
TestTabALogic
test_resolve_linkliste_empty_uses_standard_and_persists
— (Docstring fehlt)grünnie geprüft
TestTabALogic
test_resolve_linkliste_returns_none_when_pruefmanager_rejects
— (Docstring fehlt)grünnie geprüft
TestTabALogic
test_resolve_raumfilter_without_filter_returns_none
— (Docstring fehlt)grünnie geprüft
TestTabALogic
test_resolve_raumfilter_verfahrensgebiet_uses_layer_lookup
— (Docstring fehlt)grünnie geprüft
TestTabALogic
test_extract_datenabruf_error_maps_merges_reason_maps
— (Docstring fehlt)grünnie geprüft

— (Docstring fehlt)

TestTabAPreconditions 3
flowchart TD
  root(["test_tab_a_preconditions.py"])
  class root rootnode
  root --> g1["TestTabAPreconditions (3)"]
  class g1 groupnode
  g1 --> t1("get_verfahrensgebiet_layer_shows_hint_when_layer_id_missing")
  g1 --> t2("get_verfahrensgebiet_layer_shows_hint_when_layer_not_in_project")
  g1 --> t3("pipeline_aborts_and_shows_hint_when_verfahrensgebiet_missing")
  class t1 ok
  class t2 ok
  class t3 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
TestTabAPreconditions
test_get_verfahrensgebiet_layer_shows_hint_when_layer_id_missing
— (Docstring fehlt)grünnie geprüft
TestTabAPreconditions
test_get_verfahrensgebiet_layer_shows_hint_when_layer_not_in_project
— (Docstring fehlt)grünnie geprüft
TestTabAPreconditions
test_pipeline_aborts_and_shows_hint_when_verfahrensgebiet_missing
— (Docstring fehlt)grünnie geprüft

— (Docstring fehlt)

TestTabAUI 3
flowchart TD
  root(["test_tab_a_ui.py"])
  class root rootnode
  root --> g1["TestTabAUI (3)"]
  class g1 groupnode
  g1 --> t1("tab_a_callbacks_can_be_called_without_crash")
  g1 --> t2("tab_a_raumfilter_callback_persists_value")
  g1 --> t3("set_services_initializes_logic_and_injects_data_grabber")
  class t1 ok
  class t2 ok
  class t3 warn
  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
TestTabAUI
test_tab_a_callbacks_can_be_called_without_crash
— (Docstring fehlt)grünnie geprüft
TestTabAUI
test_tab_a_raumfilter_callback_persists_value
— (Docstring fehlt)grünnie geprüft
TestTabAUI
test_set_services_initializes_logic_and_injects_data_grabber
— (Docstring fehlt)rotnie geprüft

Tests für sn_plan41/modules/vln_api_logic.py

TestVlnApiLogicAvailability 2TestVlnApiLogicCredentials 4TestVlnApiLogicLogin 6TestVlnApiLogicVerfahren 2TestVlnApiLogicVkz 4TestVlnApiLogicLoadP41 3TestVlnApiLogicUpload 4
flowchart TD
  root(["test_vln_api_logic.py"])
  class root rootnode
  root --> g1["TestVlnApiLogicAvailability (2)"]
  class g1 groupnode
  g1 --> t1("is_available_reflects_import_state")
  g1 --> t2("is_available_false_when_vln_karten_missing")
  root --> g2["TestVlnApiLogicCredentials (4)"]
  class g2 groupnode
  g2 --> t3("save_api_key_calls_qsettings")
  g2 --> t4("clear_api_key_calls_remove")
  g2 --> t5("load_stored_credentials_returns_api_key_and_mail")
  g2 --> t6("load_stored_credentials_returns_none_for_empty")
  root --> g3["TestVlnApiLogicLogin (6)"]
  class g3 groupnode
  g3 --> t7("login_sets_client_and_saves_key")
  g3 --> t8("login_raises_runtime_error_without_qgis_modules")
  g3 --> t9("login_propagates_api_error")
  g3 --> t10("logout_clears_client")
  g3 --> t11("is_authenticated_false_after_logout")
  g3 --> t12("handle_session_expired_clears_key_and_client")
  root --> g4["TestVlnApiLogicVerfahren (2)"]
  class g4 groupnode
  g4 --> t13("get_verfahren_raises_when_not_authenticated")
  g4 --> t14("get_verfahren_delegates_to_client")
  root --> g5["TestVlnApiLogicVkz (4)"]
  class g5 groupnode
  g5 --> t15("load_stored_vkz_reads_from_project")
  g5 --> t16("load_stored_vkz_returns_none_for_empty")
  g5 --> t17("save_vkz_writes_to_project")
  g5 --> t18("save_vkz_does_nothing_for_none")
  root --> g6["TestVlnApiLogicLoadP41 (3)"]
  class g6 groupnode
  g6 --> t19("load_p41_raises_without_vln_karten")
  g6 --> t20("load_p41_applies_styles_to_polygon_and_line_layers")
  g6 --> t21("load_p41_no_style_for_point_layer")
  root --> g7["TestVlnApiLogicUpload (4)"]
  class g7 groupnode
  g7 --> t22("upload_returns_error_for_layer_without_api_path")
  g7 --> t23("upload_returns_error_for_none_layer")
  g7 --> t24("upload_returns_false_without_qgis_modules")
  g7 --> t25("upload_calls_save_feature_collection")
  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
  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
TestVlnApiLogicAvailability
test_is_available_reflects_import_state
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicAvailability
test_is_available_false_when_vln_karten_missing
Wenn VLN_KARTEN_AVAILABLE=False, liefert is_available() False.grünnie geprüft
TestVlnApiLogicCredentials
test_save_api_key_calls_qsettings
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicCredentials
test_clear_api_key_calls_remove
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicCredentials
test_load_stored_credentials_returns_api_key_and_mail
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicCredentials
test_load_stored_credentials_returns_none_for_empty
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicLogin
test_login_sets_client_and_saves_key
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicLogin
test_login_raises_runtime_error_without_qgis_modules
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicLogin
test_login_propagates_api_error
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicLogin
test_logout_clears_client
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicLogin
test_is_authenticated_false_after_logout
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicLogin
test_handle_session_expired_clears_key_and_client
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicVerfahren
test_get_verfahren_raises_when_not_authenticated
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicVerfahren
test_get_verfahren_delegates_to_client
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicVkz
test_load_stored_vkz_reads_from_project
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicVkz
test_load_stored_vkz_returns_none_for_empty
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicVkz
test_save_vkz_writes_to_project
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicVkz
test_save_vkz_does_nothing_for_none
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicLoadP41
test_load_p41_raises_without_vln_karten
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicLoadP41
test_load_p41_applies_styles_to_polygon_and_line_layers
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicLoadP41
test_load_p41_no_style_for_point_layer
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicUpload
test_upload_returns_error_for_layer_without_api_path
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicUpload
test_upload_returns_error_for_none_layer
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicUpload
test_upload_returns_false_without_qgis_modules
— (Docstring fehlt)grünnie geprüft
TestVlnApiLogicUpload
test_upload_calls_save_feature_collection
— (Docstring fehlt)grünnie geprüft

Ungetestete Funktionen (strukturell) – 39 von 80

Heuristik: Name kommt in keiner Testdatei des Pakets vor. Details siehe docs/tests/testkatalog.md.

DateiFunktion/MethodeZeile
modules/vln_api_client.pyKartenApiClient.load_feature_collection154
modules/vln_api_client.pyKartenApiClient._request176
modules/vln_api_client.pyKartenApiClient._error_detail235
modules/vln_api_logic.pyVlnApiLogic.get_p41_layers233
modules/vln_api_logic.pyVlnApiLogic.remove_p41_layers237
modules/vln_api_logic.pyVlnApiLogic._apply_p41_styles277
modules/vln_api_logic.pyVlnApiLogic.upload_summary347
modules/vln_layer_manager.py_family58
modules/vln_layer_manager.pymemory_layer_from_features73
ui/dockwidget.pyDockWidget._init_tabs_with_services42
ui/tab_a_logic.pyTabALogic._log90
ui/tab_a_logic.pyTabALogic._create_silent_pruefmanager93
ui/tab_a_logic.pyTabALogic._zeige_verfahrensgebiet_hinweis127
ui/tab_a_logic.pyTabALogic._close_progress_dialog139
ui/tab_a_logic.pyTabALogic.write_layer_to_verfahrens_db169
ui/tab_a_logic.pyTabALogic.is_valid_verfahrensgebiet_layer242
ui/tab_a_logic.pyTabALogic._load_dienste_aus_result_dict391
ui/tab_a_logic.pyTabALogic._create_local_layer_from_fetched_features639
ui/tab_a_logic.pyTabALogic._write_html_log779
ui/tab_a_logic.pyTabALogic._clone_layer_with_extent934
ui/tab_a_logic.pyTabALogic._handle_pufferlayer1062
ui/tab_a_logic.pyTabALogic._load_existing_pufferlayer1084
ui/tab_a_logic.pyTabALogic._create_pufferlayer1092
ui/tab_a_logic.pyTabALogic._pufferlayer_exists_in_source1119
ui/tab_a_logic.pyTabALogic.Pufferlayer_erstellen1133
ui/tab_a_ui.pyTabA._build_ui113
ui/tab_a_ui.pyTabA._restore_state274
ui/tab_a_ui.pyTabA._restore_vln_state296
ui/tab_a_ui.pyTabA._toggle_vln_group307
ui/tab_a_ui.pyTabA._update_vln_ui_state311
ui/tab_a_ui.pyTabA._populate_verfahren_combo347
ui/tab_a_ui.pyTabA._on_vln_login374
ui/tab_a_ui.pyTabA._on_vln_logout405
ui/tab_a_ui.pyTabA._on_vln_verfahren_changed416
ui/tab_a_ui.pyTabA._on_p41_laden424
ui/tab_a_ui.pyTabA._on_upload_active498
ui/tab_a_ui.pyTabA._create_new_gpkg595
ui/tab_a_ui.pyTabA._update_group_color608
ui/tab_a_ui.pyTabA._on_load_fachdaten618