diff --git a/docs/entscheidungen/0009-tests-definition-of-done.md b/docs/entscheidungen/0009-tests-definition-of-done.md index 1210e35..d34703e 100644 --- a/docs/entscheidungen/0009-tests-definition-of-done.md +++ b/docs/entscheidungen/0009-tests-definition-of-done.md @@ -41,3 +41,11 @@ Nur den generierten Katalog (zeigt was getestet wird, aber nicht ob es genügt geht, fiele weg); nur handgeschriebene Testkonzepte (laufen dem Code hinterher, dieselbe Drift, die die Wissensbasis sonst vermeidet); Testabdeckung in Prozent als Ziel (misst durchlaufene Zeilen, nicht fachliche Vollständigkeit, und verleitet zu Tests ohne Aussage). + +## Ergänzung (18.09.2026) +Der Testkatalog weist seither zusätzlich einen Abschnitt „Ungetestete Funktionen (strukturelle Lücke)" aus: +Funktionen/Methoden im Quellcode, deren Name in keiner Testdatei des Pakets vorkommt (Namensabgleich per `ast`, +ohne Import und ohne Laufzeitmessung). Das ist **keine** Wiederaufnahme der oben verworfenen +Zeilen-Coverage-in-Prozent: Es gibt keine Prozentzahl als Ziel, sondern eine Lückenliste nach demselben Muster +wie der bestehende Abschnitt „Lücken" für fehlende Docstrings — ein Hinweis, wo ein Mensch hinschauen sollte, +kein Ausführungsnachweis und keine Aussage über fachliche Richtigkeit. diff --git a/docs/leitfaden/06_tests.md b/docs/leitfaden/06_tests.md index c61fea6..3a49eb1 100644 --- a/docs/leitfaden/06_tests.md +++ b/docs/leitfaden/06_tests.md @@ -113,6 +113,12 @@ Wozu das gut ist: Man sieht auf zwei Seiten, was die Suite abdeckt, ohne eine ei Abschnitt „Lücken" am Ende listet alle Tests ohne Docstring — das ist die Arbeitsliste, um den Katalog vollständig lesbar zu machen. +Ein zweiter Abschnitt, „Ungetestete Funktionen (strukturelle Lücke)", dreht die Blickrichtung um: Er listet +Funktionen und Methoden im **Quellcode**, deren Name in keiner Testdatei des Pakets vorkommt (Namensabgleich +per `ast`, ohne Import). Das ist bewusst **keine** Zeilen-Coverage in Prozent — die wurde in ADR 0009 als Ziel +verworfen, weil sie durchlaufene Zeilen statt fachliche Vollständigkeit misst. Es ist eine Lückenliste wie die +fehlenden Docstrings: ein Hinweis, wo ein Blick lohnt, kein Ausführungsnachweis und kein Ziel in Prozent. + Nach dem Hinzufügen von Tests den Katalog neu erzeugen und mit committen. `python scripts/testkatalog.py --pruefen` meldet, wenn er veraltet ist. diff --git a/docs/tests/testkatalog.html b/docs/tests/testkatalog.html index c4d77da..aebb3bf 100644 --- a/docs/tests/testkatalog.html +++ b/docs/tests/testkatalog.html @@ -128,6 +128,7 @@
| 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 |
Heuristik: Name kommt in keiner Testdatei des Pakets vor. Details siehe docs/tests/testkatalog.md.
+| Datei | Funktion/Methode | Zeile |
|---|---|---|
| functions/dialog_wrapper.py | show_info_dialog | 42 |
| functions/dialog_wrapper.py | ask_text | 56 |
| functions/dialog_wrapper.py | ask_ergaenzen_entfernen_ersetzen_abbrechen | 131 |
| functions/dialog_wrapper.py | ask_detailpruefung_oder_vg_laden | 185 |
| functions/dialog_wrapper.py | ask_detailpruefung_oder_abbrechen | 235 |
| functions/dialog_wrapper.py | ProgressDialog.set_total | 328 |
| functions/dialog_wrapper.py | ProgressDialog.set_value | 336 |
| functions/dialog_wrapper.py | ProgressDialog.set_label | 348 |
| functions/dialog_wrapper.py | ProgressDialog.is_canceled | 357 |
| functions/dialog_wrapper.py | ProgressDialog.close | 366 |
| functions/dialog_wrapper.py | ProgressDialog.raise_to_front | 373 |
| functions/dialog_wrapper.py | create_progress_dialog | 390 |
| functions/landkreise.py | _lade_landkreise | 20 |
| functions/ly_existence_wrapper.py | layer_is_valid | 10 |
| functions/ly_existence_wrapper.py | layer_is_usable | 27 |
| functions/ly_style_wrapper.py | apply_style_from_path | 8 |
| functions/ly_style_wrapper.py | apply_style | 27 |
| functions/message_wrapper.py | _get_message_bar | 15 |
| functions/message_wrapper.py | push_message | 42 |
| functions/message_wrapper.py | info | 67 |
| functions/message_wrapper.py | error | 77 |
| functions/message_wrapper.py | success | 82 |
| functions/os_wrapper.py | normalize_path | 43 |
| functions/os_wrapper.py | get_home_dir | 53 |
| functions/os_wrapper.py | is_absolute_path | 60 |
| functions/os_wrapper.py | basename | 68 |
| functions/os_wrapper.py | is_case_sensitive_fs | 80 |
| functions/os_wrapper.py | path_suffix | 96 |
| functions/qgiscore_wrapper.py | get_layer_extent | 916 |
| functions/qgiscore_wrapper.py | create_buffer_layer | 947 |
| functions/qgiscore_wrapper.py | layer_exists_in_gpkg | 1013 |
| functions/qgiscore_wrapper.py | polygon_zu_linie | 1052 |
| functions/qgisui_wrapper.py | get_main_window | 131 |
| functions/qgisui_wrapper.py | add_dock_widget | 149 |
| functions/qgisui_wrapper.py | remove_dock_widget | 156 |
| functions/qgisui_wrapper.py | find_dock_widgets | 163 |
| functions/qgisui_wrapper.py | add_menu | 178 |
| functions/qgisui_wrapper.py | remove_menu | 188 |
| functions/qgisui_wrapper.py | add_toolbar | 201 |
| functions/qgisui_wrapper.py | remove_toolbar | 208 |
| functions/qgisui_wrapper.py | add_layer_to_project | 217 |
| functions/qt_wrapper.py | exec_dialog | 60 |
| functions/qt_wrapper.py | debug_qt_status | 64 |
| functions/sys_wrapper.py | join_path | 36 |
| functions/sys_wrapper.py | ensure_dir | 56 |
| functions/sys_wrapper.py | read_text | 69 |
| functions/sys_wrapper.py | write_text | 79 |
| functions/sys_wrapper.py | getattr_safe | 102 |
| functions/verfahrensgebiet_manager.py | _on_layers_added | 109 |
| functions/verfahrensgebiet_manager.py | _on_layer_removed | 114 |
| functions/verfahrensgebiet_manager.py | _on_project_changed | 123 |
| functions/verfahrensgebiet_manager.py | setup_verfahrensgebiet_listener | 132 |
| functions/verfahrensgebiet_manager.py | teardown_verfahrensgebiet_listener | 176 |
| modules/DataGrabber.py | DataGrabber.set_source | 68 |
| modules/DataGrabber.py | DataGrabber._process_database_source | 309 |
| modules/DataGrabber.py | DataGrabber._process_service_source | 320 |
| modules/DataGrabber.py | DataGrabber._aggregate_results | 330 |
| modules/Dateipruefer.py | Dateipruefer.erkenne_dateityp | 77 |
| modules/Dateipruefer.py | Dateipruefer._pfad | 91 |
| modules/Dateipruefer.py | Dateipruefer._ist_leer | 98 |
| modules/Dateipruefer.py | Dateipruefer._ist_gueltiger_gpkg_pfad | 113 |
| modules/Dateipruefer.py | Dateipruefer._handle_leere_eingabe | 227 |
| modules/Datenabruf.py | Datenabruf.datenabruf | 56 |
| modules/Datenabruf.py | Datenabruf._determine_spatial_filter | 223 |
| modules/Datenabruf.py | Datenabruf._build_provider_url | 278 |
| modules/Datenabruf.py | Datenabruf._fetch_features | 421 |
| modules/Datenschreiber.py | Datenschreiber._resolve_style_path | 62 |
| modules/Datenschreiber.py | Datenschreiber._store_style_in_gpkg | 77 |
| modules/Datenschreiber.py | Datenschreiber.schreibe_Daten | 152 |
| modules/Datenschreiber.py | Datenschreiber.lade_Layer | 249 |
| modules/Datenschreiber.py | Datenschreiber.schreibe_log | 344 |
| modules/Datenschreiber.py | Datenschreiber._write_layer_to_gpkg | 384 |
| modules/excel_importer.py | ExcelImporter.import_xlsx | 32 |
| modules/LayerLoader.py | LayerLoader._was_canceled | 42 |
| modules/LayerLoader.py | LayerLoader._process_events | 50 |
| modules/LayerLoader.py | LayerLoader._transform_geometry_to_layer_crs | 57 |
| modules/LayerLoader.py | LayerLoader._transform_extent_to_layer_crs | 85 |
| modules/LayerLoader.py | LayerLoader.create_layer | 110 |
| modules/LayerLoader.py | LayerLoader.apply_style | 190 |
| modules/LayerLoader.py | LayerLoader.filter_by_extent | 230 |
| modules/LayerLoader.py | LayerLoader.filter_by_layer | 319 |
| modules/LayerLoader.py | LayerLoader.add_to_project | 419 |
| modules/linkpruefer.py | Linkpruefer._pfad | 33 |
| modules/linkpruefer.py | Linkpruefer._ist_url | 41 |
| modules/linkpruefer.py | Linkpruefer._pruefe_url | 81 |
| modules/linkpruefer.py | Linkpruefer._pruefe_dateipfad | 115 |
| modules/print_layout.py | PrintLayout._create_map_item | 98 |
| modules/print_layout.py | PrintLayout._set_item_frame_stroke_width | 119 |
| modules/print_layout.py | PrintLayout._fit_extent_to_map_item | 154 |
| modules/print_layout.py | PrintLayout.add_text_label | 211 |
| modules/print_layout.py | PrintLayout._setup_layout_objects | 242 |
| modules/print_layout.py | PrintLayout._create_label_item | 373 |
| modules/print_layout.py | PrintLayout._resolve_visible_map_layers | 470 |
| modules/print_layout.py | PrintLayout._apply_grid_common_settings | 791 |
| modules/print_layout.py | PrintLayout._safe_grid_call | 797 |
| modules/print_layout.py | PrintLayout._apply_grid_annotation_text_style | 808 |
| modules/print_layout.py | PrintLayout._create_rectangle_box_item | 908 |
| modules/print_layout_baufreigabe.py | PrintLayoutBaufreigabe.create_baufreigabe_layout | 90 |
| modules/print_layout_baufreigabe.py | PrintLayoutBaufreigabe._setup_layout_objects_baufreigabe | 262 |
| modules/print_layout_baufreigabe.py | PrintLayoutBaufreigabe._calc_atlas_margin_percent | 394 |
| modules/print_logic.py | PrintLogic._failed_result | 123 |
| modules/print_logic.py | PrintLogic._show_target_size_too_small | 126 |
| modules/print_logic.py | PrintLogic._is_enabled_flag | 133 |
| modules/print_logic.py | PrintLogic._resolve_layer_from_project | 138 |
| modules/print_logic.py | PrintLogic._resolve_active_layer | 158 |
| modules/print_logic.py | PrintLogic._get_druckpuffer_cm | 167 |
| modules/print_logic.py | PrintLogic._get_druckpuffer_m | 175 |
| modules/print_logic.py | PrintLogic._import_qgis_symbol | 178 |
| modules/print_logic.py | PrintLogic._build_rectangle | 185 |
| modules/print_logic.py | PrintLogic._clone_extent | 194 |
| modules/print_logic.py | PrintLogic._get_existing_layer_by_name | 260 |
| modules/print_logic.py | PrintLogic._create_druckrechteck_layer | 273 |
| modules/print_logic.py | PrintLogic._clear_layer_features | 301 |
| modules/print_logic.py | PrintLogic.create_atlas_layer_from_selection | 325 |
| modules/print_logic.py | PrintLogic.configure_atlas_for_baufreigabe_layout | 468 |
| modules/print_logic.py | PrintLogic._store_druckrechteck | 614 |
| modules/print_logic.py | PrintLogic.activate_druckrechteck_capture | 662 |
| modules/print_logic.py | PrintLogic._resolve_selection_layer | 792 |
| modules/print_logic.py | PrintLogic._get_selected_extent | 805 |
| modules/print_logic.py | PrintLogic.set_kartenname_for_auswahl | 961 |
| modules/print_logic.py | PrintLogic.set_plotmassstab_for_auswahl | 965 |
| modules/print_logic.py | PrintLogic.set_view_for_auswahl | 976 |
| modules/print_logic.py | PrintLogic.set_zielgroesse_for_auswahl | 982 |
| modules/print_logic.py | PrintLogic.set_formfaktor | 985 |
| modules/print_logic.py | PrintLogic._get_plot_dimensions_mm | 1052 |
| modules/print_logic.py | PrintLogic._get_required_map_dimensions_mm | 1061 |
| modules/print_logic.py | PrintLogic.druckvorlage_anlegen | 1161 |
| modules/pruef_ergebnis.py | pruef_ergebnis.ist_verfahrens_db_aktion | 149 |
| modules/pruef_ergebnis.py | pruef_ergebnis.dateipfad | 167 |
| modules/pruef_ergebnis.py | pruef_ergebnis.erlaubte_persistierung | 181 |
| modules/Pruefmanager.py | Pruefmanager.report_error | 20 |
| modules/Pruefmanager.py | Pruefmanager.report_summary | 45 |
| modules/Pruefmanager.py | Pruefmanager.zeige_hinweis | 62 |
| modules/Pruefmanager.py | Pruefmanager.frage_ja_nein | 67 |
| modules/Pruefmanager.py | Pruefmanager.frage_text | 73 |
| modules/Pruefmanager.py | Pruefmanager._handle_datei_existiert | 83 |
| modules/Pruefmanager.py | Pruefmanager._handle_verfahrensgebiet_layer_existiert | 230 |
| modules/Pruefmanager.py | Pruefmanager._ask_use_or_replace_pufferlayer | 273 |
| ui/base_dockwidget.py | BaseDockWidget.closeEvent | 97 |
| ui/dockmanager.py | DockManager.show | 30 |
| ui/navigation.py | Navigation.init_ui | 33 |
| ui/navigation.py | Navigation.add_action | 68 |
| ui/navigation.py | Navigation.finalize_menu_and_toolbar | 81 |
| ui/navigation.py | Navigation.set_active_plugin | 94 |
| ui/navigation.py | Navigation.remove_action | 104 |
| ui/navigation.py | Navigation.remove_all | 115 |
| ui/tabs/print_tab.py | PrintTab.set_services | 94 |
| ui/tabs/print_tab.py | PrintTab._build_ui | 115 |
| ui/tabs/print_tab.py | PrintTab._restore_state | 267 |
| ui/tabs/print_tab.py | PrintTab._on_kartenname_changed | 334 |
| ui/tabs/print_tab.py | PrintTab._on_massstab_changed | 347 |
| ui/tabs/print_tab.py | PrintTab._on_thema_changed | 352 |
| ui/tabs/print_tab.py | PrintTab._on_zielgroesse_changed | 357 |
| ui/tabs/print_tab.py | PrintTab._on_formfaktor_changed | 362 |
| ui/tabs/print_tab.py | PrintTab._on_druckbereich_changed | 368 |
| ui/tabs/print_tab.py | PrintTab._on_atlas_erzeugen_changed | 377 |
| ui/tabs/print_tab.py | PrintTab._on_druckpuffer_clicked | 392 |
| ui/tabs/print_tab.py | PrintTab._format_druckpuffer_label | 425 |
| ui/tabs/print_tab.py | PrintTab._on_vorlage_erstellen | 428 |
| ui/tabs/print_tab.py | PrintTab._disconnect_project_signals | 441 |
| ui/tabs/print_tab.py | PrintTab.cleanup | 459 |
| ui/tabs/print_tab.py | PrintTab._connect_project_signals | 464 |
| ui/tabs/print_tab.py | PrintTab._on_project_changed | 482 |
| ui/tabs/print_tab.py | PrintTab._toggle_atlas | 489 |
| ui/tabs/print_tab.py | PrintTab._restore_atlas_layer_selection | 495 |
| ui/tabs/print_tab.py | PrintTab._disconnect_theme_collection_signals | 519 |
| ui/tabs/print_tab.py | PrintTab._connect_theme_collection_signals | 538 |
| ui/tabs/print_tab.py | PrintTab._refresh_thema_combo_live | 565 |
| ui/tabs/print_tab.py | PrintTab._get_gespeicherte_themen | 585 |
| ui/tabs/print_tab.py | PrintTab._get_current_canvas_scale | 602 |
| ui/tabs/print_tab.py | PrintTab._on_atlas_layer_changed | 612 |
| ui/tabs/print_tab.py | PrintTab._on_auswahl_as_atlas_clicked | 641 |
| ui/tabs/print_tab.py | PrintTab._populate_atlas_layer_combo | 679 |
| ui/tabs/settings_tab.py | SettingsTab._build_input | 118 |
| ui/tabs/settings_tab.py | SettingsTab.save_data | 130 |
| ui/tabs/settings_tab.py | SettingsTab.load_data | 149 |
| Testfall | prüft | Status | geprüft |
|---|---|---|---|
| TestWorkingTab test_set_busy_updates_button_state | — (Docstring fehlt) | grün | nie geprüft |
| TestWorkingTab test_on_verf_layer_changed_valid_sets_variable | — (Docstring fehlt) | grün | nie geprüft |
| TestWorkingTab test_on_verf_layer_changed_none_clears_variable | — (Docstring fehlt) | grün | nie geprüft |
| TestWorkingTab test_handle_verf_alkis_success_path | verfahrensgebiet_alkis_komplett → 4-Tupel (enriched, flst, bror, FIRST). | rot | nie geprüft |
| TestWorkingTab test_handle_verf_alkis_failure_clears_layer_var | Status NONE → Layer-Variable wird auf '' gesetzt. | grün | nie 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ün | nie 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ün | nie 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ün | nie geprüft |
| TestWorkingTab test_handle_grenz_alkis_success_sets_haken | Grenzpunkte erfolgreich geladen → haken_grenz wird gesetzt. | rot | nie geprüft |
| TestWorkingTab test_handle_grenz_alkis_none_result_sets_no_haken | grenzpunkt_alkis liefert (None, None) → kein Haken. | rot | nie geprüft |
| TestWorkingTab test_handle_flurst_alkis_success_sets_haken_and_style | — (Docstring fehlt) | grün | nie geprüft |
| TestWorkingTab test_handle_flurst_alkis_existing_layer_keep_path | — (Docstring fehlt) | grün | nie geprüft |
| TestWorkingTab test_handle_flurst_alkis_invalid_input_returns_early | Status NONE (z. B. Nutzerabbruch) → kein Layer, kein Haken. | grün | nie geprüft |
| TestWorkingTab test_handle_verfahrensgebiet_from_selection_requires_active_layer | Kein aktiver Layer → warning, kein Layer wird erstellt. | grün | nie geprüft |
| TestWorkingTab test_handle_verfahrensgebiet_from_selection_requires_required_fields | Layer ohne Pflichtfelder → warning, kein Layer wird erstellt. | grün | nie geprüft |
| TestWorkingTab test_handle_verfahrensgebiet_from_selection_requires_selection | Keine Flurstück-Auswahl → warning, kein Layer erstellt. | grün | nie geprüft |
| TestWorkingTab test_handle_verfahrensgebiet_from_selection_new_layer_success | Erstlauf ohne bestehenden Layer → Layer wird erstellt und hinzugefügt. | grün | nie geprüft |
| TestWorkingTab test_handle_verfahrensgebiet_from_selection_existing_layer_ergaenzen_dispatch | Entscheidung 'ergaenzen' → ergaenze_verfahrensgebiet wird aufgerufen. | grün | nie geprüft |
| TestWorkingTab test_handle_verfahrensgebiet_from_selection_existing_layer_entfernen_dispatch | Entscheidung 'entfernen' → entferne_aus_verfahrensgebiet wird aufgerufen. | grün | nie geprüft |
| TestWorkingTab test_handle_verfahrensgebiet_from_selection_existing_layer_ersetzen_dispatch | Entscheidung 'ersetzen' → alter Layer entfernt, neuer hinzugefügt. | grün | nie geprüft |
| TestWorkingTab test_aus_liste_button_shows_not_implemented_hint | — (Docstring fehlt) | grün | nie geprüft |
| TestWorkingTab test_handle_gem_alkis_service_reachable_adds_layer | Dienst erreichbar → Layer ins Projekt, Stil angewendet, Haken gesetzt. | grün | nie geprüft |
| TestWorkingTab test_handle_gem_alkis_service_unreachable_shows_warning | Dienst nicht erreichbar (None) → warning, kein addMapLayer. | grün | nie geprüft |
| TestWorkingTab test_handle_gem_alkis_layer_already_exists_shows_info | Layer 'Gemarkungen' bereits vorhanden → info, kein erneutes Laden. | grün | nie geprüft |
| TestHandleVerfShape test_status_none_clears_layer_variable | Status NONE → Layer-Variable wird auf '' gesetzt. | grün | nie geprüft |
| TestHandleVerfShape test_button_always_re_enabled_on_failure | Button muss nach Status NONE wieder freigegeben sein (finally). | grün | nie geprüft |
| TestHandleVerfShape test_verfahrensnummer_nicht_gesetzt_nein_bricht_ab | Verfahrensnummer leer + Nutzer wählt 'Nein' → Vorgang abgebrochen. | rot | nie geprüft |
| TestHandleVerfShape test_verfahrensnummer_nicht_gesetzt_ja_fuehrt_fort | Verfahrensnummer leer + Nutzer wählt 'Ja' → Pipeline wird aufgerufen. | rot | nie geprüft |
| TestHandleVerfShape test_verfahrensnummer_gesetzt_kein_rueckfrage_dialog | Verfahrensnummer gesetzt → kein ask_yes_no-Dialog. | grün | nie geprüft |
| TestHandleVerfShape test_success_path_applies_style_and_sets_haken | Erfolg → verfahrensgebiet.qml angewendet, haken_verf gesetzt, success aufgerufen. | grün | nie geprüft |
| TestHandleVerfShape test_bror_layer_erhaelt_qml_stil | Wenn bror_layer zurückgegeben → BauRaumOderBodenordnungsrecht.qml angewendet. | grün | nie geprüft |
| TestHandleVerfShape test_enriched_layer_already_in_project_not_added_again | Layer bereits im Projekt → kein erneutes addMapLayer für VG-Layer. | grün | nie geprüft |
| TestHandleVerfShape test_busy_state_set_during_execution | Button wird während der Ausführung auf busy gesetzt. | grün | nie geprüft |
Heuristik: Name kommt in keiner Testdatei des Pakets vor. Details siehe docs/tests/testkatalog.md.
+| Datei | Funktion/Methode | Zeile |
|---|---|---|
| functions/beteiligung_pruefung.py | _baue_nenner_kennzeichen | 139 |
| functions/beteiligung_pruefung.py | _hole_flurstuecke_layer | 253 |
| functions/beteiligung_pruefung.py | _flurstueckskennzeichen_geometrien | 258 |
| functions/beteiligung_pruefung.py | _try1_listenabgleich | 279 |
| functions/beteiligung_pruefung.py | _lese_vef_vkzf | 380 |
| functions/flurstueck_alkis.py | _vorhandene_kennzeichen | 80 |
| functions/gemarkung_alkis.py | gemarkung_schluessel_von_vg_geometrie | 212 |
| functions/grenzpunkt_alkis.py | _punktort_ta_bbox_param | 115 |
| functions/grenzpunkt_alkis.py | _hat_geometrie | 573 |
| functions/grenzpunkt_alkis.py | _lade_gemarkung_extents_mit_puffer | 637 |
| functions/grenzpunkt_alkis.py | _lade_punktort_ta_batches_per_gemarkung | 784 |
| functions/knickpunkt_pruefung.py | _setze_kategorien_symbologie | 158 |
| functions/knickpunkt_pruefung.py | erstelle_korrigiertes_polygon | 604 |
| functions/umringspruefung.py | _zerlege_in_teile | 55 |
| functions/umringspruefung.py | _setze_kategorien_symbologie | 112 |
| functions/umringspruefung.py | umringspruefung | 152 |
| functions/umringstatistik_grenzpunkte.py | _setze_kategorien_symbologie | 74 |
| functions/umringstatistik_grenzpunkte.py | _klassifiziere | 119 |
| functions/umringstatistik_grenzpunkte.py | umringstatistik_grenzpunkte | 164 |
| functions/verfahrensgebiet_alkis.py | _baue_layer_aus_kombinationen | 144 |
| functions/verfahrensgebiet_alkis_komplett.py | _entferne_hilfs_layer | 100 |
| functions/verfahrensgebiet_alkis_komplett.py | _flaeche_des_layers | 210 |
| functions/verfahrensgebiet_dialoge.py | ask_landkreis_objekte | 101 |
| functions/verfahrensgebiet_shape_komplett.py | _normalisiere_feldname | 110 |
| functions/verfahrensgebiet_shape_komplett.py | _finde_fbschl_index | 132 |
| functions/verfahrensgebiet_shape_komplett.py | _ermittle_gebietstyp_aus_fbschl | 161 |
| functions/verfahrensgebiet_shape_komplett.py | _wende_vergleich_stil_an | 211 |
| functions/verfahrensgebiet_shape_komplett.py | _erstelle_vergleich_layer | 251 |
| functions/verfahrensgebiet_shape_komplett.py | _finde_alle_shp | 342 |
| ui/tabs/working_tab.py | WorkingTab.handle_beteiligung_pruefen | 297 |
| ui/tabs/working_tab.py | WorkingTab._haken_label | 349 |
| ui/tabs/working_tab.py | WorkingTab._restore_verf_layer_selection | 374 |
| ui/tabs/working_tab.py | WorkingTab._uebernimm_flurstuecke_ergebnis | 390 |
| ui/tabs/working_tab.py | WorkingTab.handle_umringstatistik | 777 |
| Testfall | prüft | Status | geprüft |
|---|---|---|---|
| TestVlnApiLogicAvailability test_is_available_reflects_import_state | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicAvailability test_is_available_false_when_vln_karten_missing | Wenn VLN_KARTEN_AVAILABLE=False, liefert is_available() False. | grün | nie geprüft |
| TestVlnApiLogicCredentials test_save_api_key_calls_qsettings | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicCredentials test_clear_api_key_calls_remove | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicCredentials test_load_stored_credentials_returns_api_key_and_mail | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicCredentials test_load_stored_credentials_returns_none_for_empty | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicLogin test_login_sets_client_and_saves_key | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicLogin test_login_raises_runtime_error_without_qgis_modules | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicLogin test_login_propagates_api_error | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicLogin test_logout_clears_client | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicLogin test_is_authenticated_false_after_logout | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicLogin test_handle_session_expired_clears_key_and_client | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicVerfahren test_get_verfahren_raises_when_not_authenticated | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicVerfahren test_get_verfahren_delegates_to_client | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicVkz test_load_stored_vkz_reads_from_project | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicVkz test_load_stored_vkz_returns_none_for_empty | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicVkz test_save_vkz_writes_to_project | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicVkz test_save_vkz_does_nothing_for_none | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicLoadP41 test_load_p41_raises_without_vln_karten | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicLoadP41 test_load_p41_applies_styles_to_polygon_and_line_layers | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicLoadP41 test_load_p41_no_style_for_point_layer | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicUpload test_upload_returns_error_for_layer_without_api_path | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicUpload test_upload_returns_error_for_none_layer | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicUpload test_upload_returns_false_without_qgis_modules | — (Docstring fehlt) | grün | nie geprüft |
| TestVlnApiLogicUpload test_upload_calls_save_feature_collection | — (Docstring fehlt) | grün | nie geprüft |
Heuristik: Name kommt in keiner Testdatei des Pakets vor. Details siehe docs/tests/testkatalog.md.
+| Datei | Funktion/Methode | Zeile |
|---|---|---|
| modules/vln_api_client.py | KartenApiClient.load_feature_collection | 154 |
| modules/vln_api_client.py | KartenApiClient._request | 176 |
| modules/vln_api_client.py | KartenApiClient._error_detail | 235 |
| modules/vln_api_logic.py | VlnApiLogic.get_p41_layers | 233 |
| modules/vln_api_logic.py | VlnApiLogic.remove_p41_layers | 237 |
| modules/vln_api_logic.py | VlnApiLogic._apply_p41_styles | 277 |
| modules/vln_api_logic.py | VlnApiLogic.upload_summary | 347 |
| modules/vln_layer_manager.py | _family | 58 |
| modules/vln_layer_manager.py | memory_layer_from_features | 73 |
| ui/dockwidget.py | DockWidget._init_tabs_with_services | 42 |
| ui/tab_a_logic.py | TabALogic._log | 90 |
| ui/tab_a_logic.py | TabALogic._create_silent_pruefmanager | 93 |
| ui/tab_a_logic.py | TabALogic._zeige_verfahrensgebiet_hinweis | 127 |
| ui/tab_a_logic.py | TabALogic._close_progress_dialog | 139 |
| ui/tab_a_logic.py | TabALogic.write_layer_to_verfahrens_db | 169 |
| ui/tab_a_logic.py | TabALogic.is_valid_verfahrensgebiet_layer | 242 |
| ui/tab_a_logic.py | TabALogic._load_dienste_aus_result_dict | 391 |
| ui/tab_a_logic.py | TabALogic._create_local_layer_from_fetched_features | 639 |
| ui/tab_a_logic.py | TabALogic._write_html_log | 779 |
| ui/tab_a_logic.py | TabALogic._clone_layer_with_extent | 934 |
| ui/tab_a_logic.py | TabALogic._handle_pufferlayer | 1062 |
| ui/tab_a_logic.py | TabALogic._load_existing_pufferlayer | 1084 |
| ui/tab_a_logic.py | TabALogic._create_pufferlayer | 1092 |
| ui/tab_a_logic.py | TabALogic._pufferlayer_exists_in_source | 1119 |
| ui/tab_a_logic.py | TabALogic.Pufferlayer_erstellen | 1133 |
| ui/tab_a_ui.py | TabA._build_ui | 113 |
| ui/tab_a_ui.py | TabA._restore_state | 274 |
| ui/tab_a_ui.py | TabA._restore_vln_state | 296 |
| ui/tab_a_ui.py | TabA._toggle_vln_group | 307 |
| ui/tab_a_ui.py | TabA._update_vln_ui_state | 311 |
| ui/tab_a_ui.py | TabA._populate_verfahren_combo | 347 |
| ui/tab_a_ui.py | TabA._on_vln_login | 374 |
| ui/tab_a_ui.py | TabA._on_vln_logout | 405 |
| ui/tab_a_ui.py | TabA._on_vln_verfahren_changed | 416 |
| ui/tab_a_ui.py | TabA._on_p41_laden | 424 |
| ui/tab_a_ui.py | TabA._on_upload_active | 498 |
| ui/tab_a_ui.py | TabA._create_new_gpkg | 595 |
| ui/tab_a_ui.py | TabA._update_group_color | 608 |
| ui/tab_a_ui.py | TabA._on_load_fachdaten | 618 |
Keine Lücken.
' + else: + zeilen = "\n".join( + f'| Datei | Funktion/Methode | Zeile |
|---|
Heuristik: Name kommt in keiner Testdatei des Pakets vor. Details siehe docs/tests/testkatalog.md.
+ {koerper} +