From c2ed00a28e46f63134b0aded1aa3824ea25d9aa4 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 26 Oct 2026 20:44:44 +0100 Subject: [PATCH] =?UTF-8?q?Test-Audit=20sn=5Fbasis=20fortgesetzt:=20verfah?= =?UTF-8?q?rensgebiet=5Fmanager.py=20fachlich=20gepr=C3=BCft=20(#76)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 14 Testfälle nach Freigabe als geprüft markiert: test_verfahrensgebiet_manager.py komplett (13 bestehende, davon 2 geschärft und 1 mit präzisiertem Docstring, und 1 neuer, der den Ist-Zustand festhält). Befund: eine manuelle Auswahl des Verfahrensgebiet-Layers wird bei jedem hinzugefügten Layer überschrieben; Issue-Entwurf vorbereitet. Testkatalog neu erzeugt. Co-Authored-By: Claude Opus 5.5 --- docs/status/testpruefungen.json | 56 +++++++++++++++++++++++++++++++++ docs/tests/testkatalog.html | 34 ++++++++++---------- docs/tests/testkatalog.md | 45 +++++++++++++------------- 3 files changed, 97 insertions(+), 38 deletions(-) diff --git a/docs/status/testpruefungen.json b/docs/status/testpruefungen.json index fc93ae1..b96d9c6 100644 --- a/docs/status/testpruefungen.json +++ b/docs/status/testpruefungen.json @@ -1158,5 +1158,61 @@ "sn_basis.tests.test_variable_wrapper.TestVariableWrapper.test_set_variable_project_noop_write_is_skipped": { "datum": "2026-10-26", "hash": "38ee0f7ec99b" + }, + "sn_basis.tests.test_verfahrensgebiet_manager.ListenerSetupTests.test_setup_ohne_qgis_tut_nichts": { + "datum": "2026-10-26", + "hash": "883356ae2dbc" + }, + "sn_basis.tests.test_verfahrensgebiet_manager.ListenerSetupTests.test_setup_verbindet_signale_und_ist_idempotent": { + "datum": "2026-10-26", + "hash": "64e42c4abef8" + }, + "sn_basis.tests.test_verfahrensgebiet_manager.ListenerSetupTests.test_teardown_trennt_alle_signale_und_ist_idempotent": { + "datum": "2026-10-26", + "hash": "ba6d367b3c40" + }, + "sn_basis.tests.test_verfahrensgebiet_manager.OnHandlerTests.test_on_layer_removed_bei_aktuellem_layer_sucht_neu": { + "datum": "2026-10-26", + "hash": "8c2ebafb61a1" + }, + "sn_basis.tests.test_verfahrensgebiet_manager.OnHandlerTests.test_on_layer_removed_bei_anderem_layer_aendert_nichts": { + "datum": "2026-10-26", + "hash": "4453786aea34" + }, + "sn_basis.tests.test_verfahrensgebiet_manager.OnHandlerTests.test_on_layers_added_findet_neuen_layer": { + "datum": "2026-10-26", + "hash": "241487f6103b" + }, + "sn_basis.tests.test_verfahrensgebiet_manager.OnHandlerTests.test_on_layers_added_setzt_manuelle_auswahl_derzeit_zurueck": { + "datum": "2026-10-26", + "hash": "802fe6311c77" + }, + "sn_basis.tests.test_verfahrensgebiet_manager.OnHandlerTests.test_on_project_changed_mit_layer_setzt_variable": { + "datum": "2026-10-26", + "hash": "05a6d3b20d5a" + }, + "sn_basis.tests.test_verfahrensgebiet_manager.OnHandlerTests.test_on_project_changed_ohne_layer_setzt_variable_leer": { + "datum": "2026-10-26", + "hash": "894bf87d5902" + }, + "sn_basis.tests.test_verfahrensgebiet_manager.TestVerfahrensgebietManager.test_get_verfahrensgebiet_layer_id_returns_none_for_empty_value": { + "datum": "2026-10-26", + "hash": "2b9de10a603d" + }, + "sn_basis.tests.test_verfahrensgebiet_manager.TestVerfahrensgebietManager.test_get_verfahrensgebiet_layer_id_returns_value": { + "datum": "2026-10-26", + "hash": "2585e72e5ad4" + }, + "sn_basis.tests.test_verfahrensgebiet_manager.TestVerfahrensgebietManager.test_set_verfahrensgebiet_layer_id_writes_project_variable": { + "datum": "2026-10-26", + "hash": "cba6341e2af5" + }, + "sn_basis.tests.test_verfahrensgebiet_manager.TestVerfahrensgebietManager.test_update_with_layer_writes_variable": { + "datum": "2026-10-26", + "hash": "32595d814af1" + }, + "sn_basis.tests.test_verfahrensgebiet_manager.TestVerfahrensgebietManager.test_update_without_layer_does_not_write_when_already_empty": { + "datum": "2026-10-26", + "hash": "acc0544f207c" } } diff --git a/docs/tests/testkatalog.html b/docs/tests/testkatalog.html index b839df5..6cdca34 100644 --- a/docs/tests/testkatalog.html +++ b/docs/tests/testkatalog.html @@ -123,24 +123,24 @@

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 b5c66dc5bdb2)
+
Quelle: docs/tests/testkatalog.md
Baseline: docs/status/testbaseline.json (SHA-256 aeabc946a7f3)
Prüf-Audit: docs/status/testpruefungen.json (SHA-256 531ba212c582)
-
697Testfälle
-
654grün
+
698Testfälle
+
655grün
35rot (Baseline)
79%mit Docstring
-
42%aktuell geprüft
+
44%aktuell geprüft
55Testdateien
34%ohne Testbezug
Verteilung je Paket
-
sn_basis32 Dateien · 364 Testfälle
+
sn_basis32 Dateien · 365 Testfälle
sn_verfahrensgebiet18 Dateien · 289 Testfälle
sn_plan415 Dateien · 44 Testfälle
@@ -159,11 +159,11 @@

sn_basis

Plattform-Plugin · Ordner Plugin_SN_Basis

- -
32Testdateien
364Testfälle
364grün
0rot (Baseline)
100%mit Docstring
80%geprüft
70ohne Testbezug
+
32Testdateien
365Testfälle
365grün
0rot (Baseline)
100%mit Docstring
83%geprüft
70ohne Testbezug

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

CloseEventTests 5
flowchart TD
   root(["test_base_dockwidget.py"])
   class root rootnode
@@ -1238,7 +1238,7 @@
   classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
   classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
   classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
-  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
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üngeprüft am 2026-10-26
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üngeprüft am 2026-10-26
TestVariableWrapper
test_set_variable_global_writes_prefixed_name
Prüft, dass set_variable() im globalen Scope den Variablennamen mit 'sn_' vorangestellt schreibt.grüngeprüft am 2026-10-26
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 statt None liefert.grüngeprüft am 2026-10-26
TestVariableWrapper
test_get_variable_project_liest_praefixierten_namen
Prüft, dass get_variable() im Projekt-Scope den Namen mit 'sn_' aus dem Scope des aktuellen Projekts liest.grüngeprüft am 2026-10-26
TestVariableWrapper
test_get_variable_invalid_scope_raises
Prüft, dass get_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst.grüngeprüft am 2026-10-26
TestVariableWrapper
test_set_variable_invalid_scope_raises
Prüft, dass set_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst.grüngeprüft am 2026-10-26

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

TestVerfahrensgebietManager 5OnHandlerTests 5ListenerSetupTests 3
flowchart TD
+  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üngeprüft am 2026-10-26
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üngeprüft am 2026-10-26
TestVariableWrapper
test_set_variable_global_writes_prefixed_name
Prüft, dass set_variable() im globalen Scope den Variablennamen mit 'sn_' vorangestellt schreibt.grüngeprüft am 2026-10-26
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 statt None liefert.grüngeprüft am 2026-10-26
TestVariableWrapper
test_get_variable_project_liest_praefixierten_namen
Prüft, dass get_variable() im Projekt-Scope den Namen mit 'sn_' aus dem Scope des aktuellen Projekts liest.grüngeprüft am 2026-10-26
TestVariableWrapper
test_get_variable_invalid_scope_raises
Prüft, dass get_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst.grüngeprüft am 2026-10-26
TestVariableWrapper
test_set_variable_invalid_scope_raises
Prüft, dass set_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst.grüngeprüft am 2026-10-26

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

TestVerfahrensgebietManager 5OnHandlerTests 6ListenerSetupTests 3
flowchart TD
   root(["test_verfahrensgebiet_manager.py"])
   class root rootnode
   root --> g1["TestVerfahrensgebietManager (5)"]
@@ -1248,18 +1248,19 @@
   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)"]
+  root --> g2["OnHandlerTests (6)"]
   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")
+  g2 --> t9("on_layers_added_setzt_manuelle_auswahl_derzeit_zurueck")
+  g2 --> t10("on_layer_removed_bei_aktuellem_layer_sucht_neu")
+  g2 --> t11("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")
+  g3 --> t12("setup_ohne_qgis_tut_nichts")
+  g3 --> t13("setup_verbindet_signale_und_ist_idempotent")
+  g3 --> t14("teardown_trennt_alle_signale_und_ist_idempotent")
   class t1 ok
   class t2 ok
   class t3 ok
@@ -1273,11 +1274,12 @@
   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
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
+ 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üngeprüft am 2026-10-26
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üngeprüft am 2026-10-26
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üngeprüft am 2026-10-26
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üngeprüft am 2026-10-26
TestVerfahrensgebietManager
test_update_with_layer_writes_variable
Prüft, dass ein gefundener Verfahrensgebiet-Layer seine ID als Projektvariable speichert.grüngeprüft am 2026-10-26
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üngeprüft am 2026-10-26
OnHandlerTests
test_on_project_changed_mit_layer_setzt_variable
Prüft, dass _on_project_changed die Layer-ID eines gefundenen Verfahrensgebiet-Layers übernimmt.grüngeprüft am 2026-10-26
OnHandlerTests
test_on_layers_added_findet_neuen_layer
Prüft, dass _on_layers_added projektweit nach einem Layer namens „Verfahrensgebiet" sucht und die Variable aktualisiert.grüngeprüft am 2026-10-26
OnHandlerTests
test_on_layers_added_setzt_manuelle_auswahl_derzeit_zurueck
Prüft, dass _on_layers_added derzeit eine manuelle Auswahl eines anders benannten Layers auf leer zurücksetzt (Ist-Zustand, nicht bestätigt gewünscht).grüngeprüft am 2026-10-26
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üngeprüft am 2026-10-26
OnHandlerTests
test_on_layer_removed_bei_anderem_layer_aendert_nichts
Prüft, dass das Entfernen eines anderen Layers keine Neusuche auslöst.grüngeprüft am 2026-10-26
ListenerSetupTests
test_setup_ohne_qgis_tut_nichts
Prüft, dass setup_verfahrensgebiet_listener ohne QGIS keine Signale registriert.grüngeprüft am 2026-10-26
ListenerSetupTests
test_setup_verbindet_signale_und_ist_idempotent
Prüft, dass setup_verfahrensgebiet_listener alle fünf Projektsignale verbindet und ein zweiter Aufruf nichts doppelt registriert.grüngeprüft am 2026-10-26
ListenerSetupTests
test_teardown_trennt_alle_signale_und_ist_idempotent
Prüft, dass teardown_verfahrensgebiet_listener alle fünf Signale trennt und mehrfacher Aufruf nicht fehlschlägt.grüngeprüft am 2026-10-26

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

DateiFunktion/MethodeZeileStatus
functions/dialog_wrapper.pyshow_info_dialog42beabsichtigt
functions/dialog_wrapper.pyask_detailpruefung_oder_vg_laden192beabsichtigt
functions/dialog_wrapper.pyask_detailpruefung_oder_abbrechen244beabsichtigt
functions/dialog_wrapper.pyProgressDialog.set_total339beabsichtigt
functions/dialog_wrapper.pyProgressDialog.set_value348beabsichtigt
functions/dialog_wrapper.pyProgressDialog.set_label361beabsichtigt
functions/dialog_wrapper.pyProgressDialog.is_canceled371beabsichtigt
functions/dialog_wrapper.pyProgressDialog.raise_to_front389beabsichtigt
functions/dialog_wrapper.pycreate_progress_dialog408beabsichtigt
functions/os_wrapper.pynormalize_path43beabsichtigt
functions/os_wrapper.pyget_home_dir55beabsichtigt
functions/os_wrapper.pyis_absolute_path64beabsichtigt
functions/os_wrapper.pybasename75beabsichtigt
functions/os_wrapper.pypath_suffix106beabsichtigt
functions/qgisui_wrapper.pyadd_toolbar204beabsichtigt
functions/qt_wrapper.pyexec_dialog60beabsichtigt
functions/qt_wrapper.pydebug_qt_status67beabsichtigt
modules/DataGrabber.pyDataGrabber.set_source68beabsichtigt
modules/DataGrabber.pyDataGrabber._process_database_source312beabsichtigt
modules/DataGrabber.pyDataGrabber._process_service_source324beabsichtigt
modules/LayerLoader.pyLayerLoader._was_canceled42beabsichtigt
modules/LayerLoader.pyLayerLoader._process_events51beabsichtigt
modules/Pruefmanager.pyPruefmanager.report_summary45beabsichtigt
modules/Pruefmanager.pyPruefmanager.zeige_hinweis63beabsichtigt
modules/Pruefmanager.pyPruefmanager._handle_datei_existiert87beabsichtigt
modules/Pruefmanager.pyPruefmanager._ask_use_or_replace_pufferlayer280beabsichtigt
modules/linkpruefer.pyLinkpruefer._ist_url41beabsichtigt
modules/linkpruefer.pyLinkpruefer._pruefe_url84beabsichtigt
modules/linkpruefer.pyLinkpruefer._pruefe_dateipfad121beabsichtigt
modules/print_layout.pyPrintLayout._create_map_item98beabsichtigt
modules/print_layout.pyPrintLayout._set_item_frame_stroke_width120beabsichtigt
modules/print_layout.pyPrintLayout._fit_extent_to_map_item156beabsichtigt
modules/print_layout.pyPrintLayout.add_text_label214beabsichtigt
modules/print_layout.pyPrintLayout._setup_layout_objects246beabsichtigt
modules/print_layout.pyPrintLayout._create_label_item378beabsichtigt
modules/print_layout.pyPrintLayout._resolve_visible_map_layers476beabsichtigt
modules/print_layout.pyPrintLayout._apply_grid_common_settings798beabsichtigt
modules/print_layout.pyPrintLayout._safe_grid_call805beabsichtigt
modules/print_layout.pyPrintLayout._apply_grid_annotation_text_style817beabsichtigt
modules/print_layout.pyPrintLayout._create_rectangle_box_item918beabsichtigt
modules/print_layout_baufreigabe.pyPrintLayoutBaufreigabe.create_baufreigabe_layout90beabsichtigt
modules/print_layout_baufreigabe.pyPrintLayoutBaufreigabe._setup_layout_objects_baufreigabe264beabsichtigt
modules/print_layout_baufreigabe.pyPrintLayoutBaufreigabe._calc_atlas_margin_percent398beabsichtigt
modules/print_logic.pyPrintLogic._failed_result123beabsichtigt
modules/print_logic.pyPrintLogic._show_target_size_too_small127beabsichtigt
modules/print_logic.pyPrintLogic._is_enabled_flag135beabsichtigt
modules/print_logic.pyPrintLogic._resolve_layer_from_project141beabsichtigt
modules/print_logic.pyPrintLogic._resolve_active_layer162beabsichtigt
modules/print_logic.pyPrintLogic._get_druckpuffer_cm172beabsichtigt
modules/print_logic.pyPrintLogic._get_druckpuffer_m181beabsichtigt
modules/print_logic.pyPrintLogic._import_qgis_symbol185beabsichtigt
modules/print_logic.pyPrintLogic._build_rectangle193beabsichtigt
modules/print_logic.pyPrintLogic._clone_extent203beabsichtigt
modules/print_logic.pyPrintLogic._get_existing_layer_by_name270beabsichtigt
modules/print_logic.pyPrintLogic._create_druckrechteck_layer284beabsichtigt
modules/print_logic.pyPrintLogic._clear_layer_features313beabsichtigt
modules/print_logic.pyPrintLogic.configure_atlas_for_baufreigabe_layout483beabsichtigt
modules/print_logic.pyPrintLogic._store_druckrechteck631beabsichtigt
modules/print_logic.pyPrintLogic.activate_druckrechteck_capture680beabsichtigt
modules/print_logic.pyPrintLogic._resolve_selection_layer811beabsichtigt
modules/print_logic.pyPrintLogic._get_selected_extent825beabsichtigt
modules/print_logic.pyPrintLogic._get_plot_dimensions_mm1078beabsichtigt
modules/print_logic.pyPrintLogic._get_required_map_dimensions_mm1088beabsichtigt
ui/tabs/print_tab.pyPrintTab._build_ui115beabsichtigt
ui/tabs/print_tab.pyPrintTab._on_kartenname_changed335beabsichtigt
ui/tabs/print_tab.pyPrintTab._on_massstab_changed349beabsichtigt
ui/tabs/print_tab.pyPrintTab._on_zielgroesse_changed361beabsichtigt
ui/tabs/print_tab.pyPrintTab._on_formfaktor_changed367beabsichtigt
ui/tabs/print_tab.pyPrintTab._on_druckbereich_changed374beabsichtigt
ui/tabs/print_tab.pyPrintTab._format_druckpuffer_label432beabsichtigt
diff --git a/docs/tests/testkatalog.md b/docs/tests/testkatalog.md index f73919a..011086e 100644 --- a/docs/tests/testkatalog.md +++ b/docs/tests/testkatalog.md @@ -8,21 +8,21 @@ für die fachliche Frage, ob die Abdeckung sinnvoll ist. Die Angaben stammen aus selbst (Docstrings) und aus der Testbaseline. Stand der Baseline: `docs/status/testbaseline.json` (SHA-256 `aeabc946a7f3`) -Stand des Prüf-Audits: `docs/status/testpruefungen.json` (SHA-256 `b5c66dc5bdb2`) +Stand des Prüf-Audits: `docs/status/testpruefungen.json` (SHA-256 `531ba212c582`) -Gesamt: 3 Pakete, 55 Testdateien, 697 Testfälle – 654 grün, 35 rot (Baseline), 8 übersprungen. -Mit Beschreibung (Docstring): 552 von 697 (79 %). -Fachlich geprüft: 290 von 697 (42 %) aktuell, 0 veraltet seit Codeänderung, 407 nie geprüft. +Gesamt: 3 Pakete, 55 Testdateien, 698 Testfälle – 655 grün, 35 rot (Baseline), 8 übersprungen. +Mit Beschreibung (Docstring): 553 von 698 (79 %). +Fachlich geprüft: 304 von 698 (44 %) aktuell, 0 veraltet seit Codeänderung, 394 nie geprüft. Strukturelle Lücken (heuristisch, Namensabgleich): 160 von 470 (34 %) Funktionen/Methoden ohne erkennbaren Testbezug – Abschnitt „Ungetestete Funktionen“. ## Zusammenfassung | Paket | Testdateien | Testfälle | grün | rot (Baseline) | übersprungen | mit Beschreibung | fachlich geprüft | ohne Testbezug | | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | -| `sn_basis` | 32 | 364 | 364 | 0 | 0 | 364 von 364 (100 %) | 290 von 364 (80 %) | 70 von 229 (31 %) | +| `sn_basis` | 32 | 365 | 365 | 0 | 0 | 365 von 365 (100 %) | 304 von 365 (83 %) | 70 von 229 (31 %) | | `sn_verfahrensgebiet` | 18 | 289 | 247 | 34 | 8 | 187 von 289 (65 %) | 0 von 289 (0 %) | 51 von 161 (32 %) | | `sn_plan41` | 5 | 44 | 43 | 1 | 0 | 1 von 44 (2 %) | 0 von 44 (0 %) | 39 von 80 (49 %) | -| **Summe** | **55** | **697** | **654** | **35** | **8** | **552 von 697 (79 %)** | **290 von 697 (42 %)** | **160 von 470 (34 %)** | +| **Summe** | **55** | **698** | **655** | **35** | **8** | **553 von 698 (79 %)** | **304 von 698 (44 %)** | **160 von 470 (34 %)** | ### Legende @@ -36,7 +36,7 @@ Strukturelle Lücken (heuristisch, Namensabgleich): 160 von 470 (34 %) Funktione ## Paket `sn_basis` -Plattform-Plugin, Ordner `Plugin_SN_Basis` – 32 Testdateien mit 364 Testfällen (364 grün, 0 rot, 0 übersprungen). +Plattform-Plugin, Ordner `Plugin_SN_Basis` – 32 Testdateien mit 365 Testfällen (365 grün, 0 rot, 0 übersprungen). ### `Plugin_SN_Basis/tests/test_base_dockwidget.py` @@ -783,24 +783,25 @@ Worum es in der Datei geht: Tests für sn_basis/functions/verfahrensgebiet_manag Testgruppen: - `TestVerfahrensgebietManager` (5 Testfälle): — (Docstring fehlt) -- `OnHandlerTests` (5 Testfälle): — (Docstring fehlt) +- `OnHandlerTests` (6 Testfälle): — (Docstring fehlt) - `ListenerSetupTests` (3 Testfälle): — (Docstring fehlt) | Testfall | prüft | Status | geprüft | | --- | --- | --- | --- | -| `TestVerfahrensgebietManager.test_get_verfahrensgebiet_layer_id_returns_value` | Prüft, dass get_verfahrensgebiet_layer_id() die in der Projektvariable gespeicherte Layer-ID liefert. | grün | nie geprüft | -| `TestVerfahrensgebietManager.test_get_verfahrensgebiet_layer_id_returns_none_for_empty_value` | Prüft, dass get_verfahrensgebiet_layer_id() bei leerer Projektvariable None statt eines leeren Strings liefert. | grün | nie geprüft | -| `TestVerfahrensgebietManager.test_set_verfahrensgebiet_layer_id_writes_project_variable` | Prüft, dass set_verfahrensgebiet_layer_id() die Layer-ID als Projektvariable 'verfahrensgebiet_layer' speichert. | grün | nie geprüft | -| `TestVerfahrensgebietManager.test_update_without_layer_does_not_write_when_already_empty` | Prüft, dass ohne gefundenen Verfahrensgebiet-Layer keine Schreibaktion erfolgt, wenn die Variable bereits leer ist. | grün | nie geprüft | -| `TestVerfahrensgebietManager.test_update_with_layer_writes_variable` | Prüft, dass ein gefundener Verfahrensgebiet-Layer seine ID als Projektvariable speichert. | grün | nie geprüft | -| `OnHandlerTests.test_on_project_changed_ohne_layer_setzt_variable_leer` | Prüft, dass _on_project_changed die Variable leert, wenn kein Verfahrensgebiet-Layer existiert. | grün | nie geprüft | -| `OnHandlerTests.test_on_project_changed_mit_layer_setzt_variable` | Prüft, dass _on_project_changed die Layer-ID eines gefundenen Verfahrensgebiet-Layers übernimmt. | grün | nie geprüft | -| `OnHandlerTests.test_on_layers_added_findet_neuen_layer` | Prüft, dass _on_layers_added nach neu hinzugefügten Layern sucht und die Variable aktualisiert. | grün | nie geprüft | -| `OnHandlerTests.test_on_layer_removed_bei_aktuellem_layer_sucht_neu` | Prüft, dass das Entfernen des aktuell aktiven Verfahrensgebiet-Layers eine Neusuche auslöst. | grün | nie geprüft | -| `OnHandlerTests.test_on_layer_removed_bei_anderem_layer_aendert_nichts` | Prüft, dass das Entfernen eines anderen Layers keine Neusuche auslöst. | grün | nie geprüft | -| `ListenerSetupTests.test_setup_ohne_qgis_tut_nichts` | Prüft, dass setup_verfahrensgebiet_listener ohne QGIS keine Signale registriert. | grün | nie geprüft | -| `ListenerSetupTests.test_setup_verbindet_signale_und_ist_idempotent` | Prüft, dass setup_verfahrensgebiet_listener die Projektsignale verbindet und ein zweiter Aufruf nichts doppelt registriert. | grün | nie geprüft | -| `ListenerSetupTests.test_teardown_trennt_alle_signale_und_ist_idempotent` | Prüft, dass teardown_verfahrensgebiet_listener alle Signale trennt und mehrfacher Aufruf nicht fehlschlägt. | grün | nie geprüft | +| `TestVerfahrensgebietManager.test_get_verfahrensgebiet_layer_id_returns_value` | Prüft, dass get_verfahrensgebiet_layer_id() die in der Projektvariable gespeicherte Layer-ID liefert. | grün | geprüft am 2026-10-26 | +| `TestVerfahrensgebietManager.test_get_verfahrensgebiet_layer_id_returns_none_for_empty_value` | Prüft, dass get_verfahrensgebiet_layer_id() bei leerer Projektvariable None statt eines leeren Strings liefert. | grün | geprüft am 2026-10-26 | +| `TestVerfahrensgebietManager.test_set_verfahrensgebiet_layer_id_writes_project_variable` | Prüft, dass set_verfahrensgebiet_layer_id() die Layer-ID als Projektvariable 'verfahrensgebiet_layer' speichert. | grün | geprüft am 2026-10-26 | +| `TestVerfahrensgebietManager.test_update_without_layer_does_not_write_when_already_empty` | Prüft, dass ohne gefundenen Verfahrensgebiet-Layer keine Schreibaktion erfolgt, wenn die Variable bereits leer ist. | grün | geprüft am 2026-10-26 | +| `TestVerfahrensgebietManager.test_update_with_layer_writes_variable` | Prüft, dass ein gefundener Verfahrensgebiet-Layer seine ID als Projektvariable speichert. | grün | geprüft am 2026-10-26 | +| `OnHandlerTests.test_on_project_changed_ohne_layer_setzt_variable_leer` | Prüft, dass _on_project_changed die Variable leert, wenn kein Verfahrensgebiet-Layer existiert. | grün | geprüft am 2026-10-26 | +| `OnHandlerTests.test_on_project_changed_mit_layer_setzt_variable` | Prüft, dass _on_project_changed die Layer-ID eines gefundenen Verfahrensgebiet-Layers übernimmt. | grün | geprüft am 2026-10-26 | +| `OnHandlerTests.test_on_layers_added_findet_neuen_layer` | Prüft, dass _on_layers_added projektweit nach einem Layer namens „Verfahrensgebiet" sucht und die Variable aktualisiert. | grün | geprüft am 2026-10-26 | +| `OnHandlerTests.test_on_layers_added_setzt_manuelle_auswahl_derzeit_zurueck` | Prüft, dass _on_layers_added derzeit eine manuelle Auswahl eines anders benannten Layers auf leer zurücksetzt (Ist-Zustand, nicht bestätigt gewünscht). | grün | geprüft am 2026-10-26 | +| `OnHandlerTests.test_on_layer_removed_bei_aktuellem_layer_sucht_neu` | Prüft, dass das Entfernen des aktuell aktiven Verfahrensgebiet-Layers eine Neusuche auslöst. | grün | geprüft am 2026-10-26 | +| `OnHandlerTests.test_on_layer_removed_bei_anderem_layer_aendert_nichts` | Prüft, dass das Entfernen eines anderen Layers keine Neusuche auslöst. | grün | geprüft am 2026-10-26 | +| `ListenerSetupTests.test_setup_ohne_qgis_tut_nichts` | Prüft, dass setup_verfahrensgebiet_listener ohne QGIS keine Signale registriert. | grün | geprüft am 2026-10-26 | +| `ListenerSetupTests.test_setup_verbindet_signale_und_ist_idempotent` | Prüft, dass setup_verfahrensgebiet_listener alle fünf Projektsignale verbindet und ein zweiter Aufruf nichts doppelt registriert. | grün | geprüft am 2026-10-26 | +| `ListenerSetupTests.test_teardown_trennt_alle_signale_und_ist_idempotent` | Prüft, dass teardown_verfahrensgebiet_listener alle fünf Signale trennt und mehrfacher Aufruf nicht fehlschlägt. | grün | geprüft am 2026-10-26 | ## Paket `sn_verfahrensgebiet` @@ -1450,7 +1451,7 @@ Arbeitsliste: Diese Testfälle haben keinen Docstring; was sie fachlich prüfen, aus dem Quelltext erschließen. Jeder Eintrag braucht eine einzeilige Beschreibung im Testfall, dann verschwindet er hier von selbst. -### `sn_basis` – 0 von 364 Testfällen ohne Beschreibung +### `sn_basis` – 0 von 365 Testfällen ohne Beschreibung Keine Lücken.