Merge origin/main in feature/16-test-audit
Konflikte aufgelöst: - docs/status/STATUS.md: Baustellen aus main (Basemap #88 ff., #93, #99, #100, #104) und aus dem Audit-Branch zusammengeführt und neu nummeriert; Punkt Test-Audit auf den Endstand für sn_basis (#76, PR #117) und den nächsten Schritt sn_verfahrensgebiet (#60) umgeschrieben; Stand 26.10.2026. - docs/tests/testkatalog.md/.html: nicht von Hand zusammengeführt, sondern mit scripts/testkatalog.py neu erzeugt (sn_basis auf unstable nach PR #117, sn_verfahrensgebiet auf unstable). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+495
-14
File diff suppressed because one or more lines are too long
+453
-52
@@ -10,19 +10,19 @@ 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 `2d7704ddcd6e`)
|
||||
|
||||
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“.
|
||||
Gesamt: 3 Pakete, 66 Testdateien, 859 Testfälle – 816 grün, 35 rot (Baseline), 8 übersprungen.
|
||||
Mit Beschreibung (Docstring): 714 von 859 (83 %).
|
||||
Fachlich geprüft: 304 von 859 (35 %) aktuell, 0 veraltet seit Codeänderung, 555 nie geprüft.
|
||||
Strukturelle Lücken (heuristisch, Namensabgleich): 216 von 634 (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 | 365 | 365 | 0 | 0 | 365 von 365 (100 %) | 304 von 365 (83 %) | 70 von 229 (31 %) |
|
||||
| `sn_basis` | 43 | 526 | 526 | 0 | 0 | 526 von 526 (100 %) | 304 von 526 (58 %) | 126 von 393 (32 %) |
|
||||
| `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** | **698** | **655** | **35** | **8** | **553 von 698 (79 %)** | **304 von 698 (44 %)** | **160 von 470 (34 %)** |
|
||||
| **Summe** | **66** | **859** | **816** | **35** | **8** | **714 von 859 (83 %)** | **304 von 859 (35 %)** | **216 von 634 (34 %)** |
|
||||
|
||||
### Legende
|
||||
|
||||
@@ -36,15 +36,16 @@ Strukturelle Lücken (heuristisch, Namensabgleich): 160 von 470 (34 %) Funktione
|
||||
|
||||
## Paket `sn_basis`
|
||||
|
||||
Plattform-Plugin, Ordner `Plugin_SN_Basis` – 32 Testdateien mit 365 Testfällen (365 grün, 0 rot, 0 übersprungen).
|
||||
Plattform-Plugin, Ordner `Plugin_SN_Basis` – 43 Testdateien mit 526 Testfällen (526 grün, 0 rot, 0 übersprungen).
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_base_dockwidget.py`
|
||||
|
||||
Worum es in der Datei geht: Tests für sn_basis/ui/base_dockwidget.py::closeEvent (Issue #65).
|
||||
Worum es in der Datei geht: Tests für sn_basis/ui/base_dockwidget.py: closeEvent (Issue #65) und Scroll-Bereich je Tab (Basis #104).
|
||||
|
||||
Testgruppen:
|
||||
|
||||
- `CloseEventTests` (5 Testfälle): — (Docstring fehlt)
|
||||
- `ScrollbereichTests` (5 Testfälle): Lange Tabs dürfen das QGIS-Fenster nicht über den Bildschirmrand schieben (Basis #104).
|
||||
|
||||
| Testfall | prüft | Status | geprüft |
|
||||
| --- | --- | --- | --- |
|
||||
@@ -53,6 +54,263 @@ Testgruppen:
|
||||
| `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ün | geprüft am 2026-09-21 |
|
||||
| `CloseEventTests.test_setzt_toolbar_action_zurueck` | Prüft, dass closeEvent die verknüpfte Toolbar-Action auf 'nicht gedrückt' zurücksetzt. | grün | geprüft am 2026-09-21 |
|
||||
| `CloseEventTests.test_ohne_action_wird_nichts_zurueckgesetzt` | Prüft, dass closeEvent ohne verknüpfte Toolbar-Action keine Ausnahme wirft. | grün | geprüft am 2026-09-21 |
|
||||
| `ScrollbereichTests.test_jeder_tab_liegt_in_einem_scrollbereich` | Prüft, dass BaseDockWidget jeden Tab in einen mitwachsenden Scroll-Bereich packt, damit ein langer Tab scrollt, statt das Fenster zu verlängern. | grün | nie geprüft |
|
||||
| `ScrollbereichTests.test_fachplugin_mit_eigenem_tabaufbau_bekommt_scrollbereich` | Prüft, dass auch ein Fachplugin, das seine Tabs selbst aufbaut und per setWidget einsetzt (wie Plan41, Verfahrensgebiet), Scroll-Bereiche bekommt. | grün | nie geprüft |
|
||||
| `ScrollbereichTests.test_scrollbereich_wird_nicht_doppelt_angelegt` | Prüft, dass ein Tab, der schon in einem Scroll-Bereich liegt, beim erneuten Einsetzen nicht ein zweites Mal verpackt wird. | grün | nie geprüft |
|
||||
| `ScrollbereichTests.test_setwidget_none_und_andere_widgets_bleiben_unveraendert` | Prüft, dass setWidget(None) und Widgets ohne Tabs ohne Fehler und unverändert eingesetzt werden. | grün | nie geprüft |
|
||||
| `ScrollbereichTests.test_cleanup_erreicht_tabs_im_scrollbereich` | Prüft, dass closeEvent cleanup() auch für Tabs aufruft, die in einem Scroll-Bereich liegen. | grün | nie geprüft |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_basemap_anbindung.py`
|
||||
|
||||
Worum es in der Datei geht: Tests für die Anbindung der Basemap-Legende an Druckablauf, Dialog und Druck-Tab (Basis #88):
|
||||
|
||||
Testgruppen:
|
||||
|
||||
- `TestMehrfachauswahl` (1 Testfälle): — (Docstring fehlt)
|
||||
- `TestDruckanbindung` (4 Testfälle): — (Docstring fehlt)
|
||||
- `TestBasemapBereich` (11 Testfälle): — (Docstring fehlt)
|
||||
- `TestStilvorlagenAustausch` (5 Testfälle): — (Docstring fehlt)
|
||||
|
||||
| Testfall | prüft | Status | geprüft |
|
||||
| --- | --- | --- | --- |
|
||||
| `TestMehrfachauswahl.test_mock_modus_liefert_vorauswahl_in_listenreihenfolge` | Prüft, dass der Mehrfachauswahl-Dialog im Mock-Modus die vorausgewählten Schlüssel in Listenreihenfolge liefert. | grün | nie geprüft |
|
||||
| `TestDruckanbindung.test_basemap_legende_nur_fuer_38_und_41_und_bei_eingeschaltetem_schalter` | Prüft, dass nur §-38- und §-41-Vorlagen eine Basemap-Legende bekommen und nur, wenn der Schalter im Druck-Tab an ist. | grün | nie geprüft |
|
||||
| `TestDruckanbindung.test_layout_wird_markiert_und_legende_erzeugt` | Prüft, dass PrintLayout das Layout als Basemap-Nutzer kennzeichnet und die Basemap-Legende erzeugen lässt. | grün | nie geprüft |
|
||||
| `TestDruckanbindung.test_fehler_der_basemap_legende_verhindert_die_vorlage_nicht` | Prüft, dass ein Fehler beim Erzeugen der Basemap-Legende nur als Warnung gemeldet wird und keine Ausnahme durchreicht. | grün | nie geprüft |
|
||||
| `TestDruckanbindung.test_druck_tab_aktualisiert_basemap_bereich_falls_vorhanden` | Prüft, dass der Druck-Tab den Basemap-Bereich neu einliest und ohne Bereich nichts tut. | grün | nie geprüft |
|
||||
| `TestBasemapBereich.test_auswertebereich_wird_gespeichert` | Prüft, dass die Wahl des Auswertebereichs in der Projektvariable landet. | grün | nie geprüft |
|
||||
| `TestBasemapBereich.test_aktualisieren_ohne_vorlage_warnt` | Prüft, dass „Basemap-Legende aktualisieren“ ohne vorhandene Vorlage warnt und nichts auswertet. | grün | nie geprüft |
|
||||
| `TestBasemapBereich.test_aktualisieren_wertet_gewaehlte_vorlage_aus` | Prüft, dass „Basemap-Legende aktualisieren“ die gewählte Vorlage auswertet und den Erfolg meldet. | grün | nie geprüft |
|
||||
| `TestBasemapBereich.test_stil_laden_uebernimmt_legendenauswahl` | Prüft, dass das Laden einer Stilvorlage den Layerstil ersetzt und ihre Legendenauswahl in das Projekt übernimmt. | grün | nie geprüft |
|
||||
| `TestBasemapBereich.test_stil_laden_bricht_bei_fremder_vorlage_ab` | Prüft, dass eine Vorlage mit unbekannten Styles nur nach Bestätigung geladen wird. | grün | nie geprüft |
|
||||
| `TestBasemapBereich.test_vorhandene_vorlage_wird_nur_nach_rueckfrage_ersetzt` | Prüft, dass eine gleichnamige Stilvorlage ohne Bestätigung nicht überschrieben wird. | grün | nie geprüft |
|
||||
| `TestBasemapBereich.test_speichern_mit_aktueller_legendenauswahl` | Prüft, dass eine neue Stilvorlage zusammen mit der aktuellen Legendenauswahl gespeichert wird. | grün | nie geprüft |
|
||||
| `TestBasemapBereich.test_punktlinien_korrigieren_meldet_anzahl` | Prüft, dass „Punktlinien korrigieren“ den Basemap-Layer korrigiert und die Anzahl korrigierter Styles meldet. | grün | nie geprüft |
|
||||
| `TestBasemapBereich.test_punktlinien_ohne_basemap_layer_warnt` | Prüft, dass ohne Basemap-Layer nichts korrigiert, sondern gewarnt wird. | grün | nie geprüft |
|
||||
| `TestBasemapBereich.test_stil_speichern_ohne_basemap_layer_warnt` | Prüft, dass ohne Basemap-Layer keine Stilvorlage gespeichert, sondern gewarnt wird. | grün | nie geprüft |
|
||||
| `TestBasemapBereich.test_stil_laden_bricht_bei_fremdem_thema_ab` | Prüft, dass eine Vorlage eines anderen Themas (Grau auf Farbe) nur nach Bestätigung geladen wird. | grün | nie geprüft |
|
||||
| `TestStilvorlagenAustausch.test_export_schreibt_gewaehlte_vorlage` | Prüft, dass „Exportieren …“ die gewählte Vorlage in die im Dateidialog gewählte Datei schreibt und den Pfad meldet. | grün | nie geprüft |
|
||||
| `TestStilvorlagenAustausch.test_export_abgebrochen_oder_ohne_vorlage` | Prüft, dass ohne gewählte Vorlage oder bei abgebrochenem Dateidialog nichts exportiert wird. | grün | nie geprüft |
|
||||
| `TestStilvorlagenAustausch.test_import_uebernimmt_datei_unter_gewaehltem_namen` | Prüft, dass „Importieren …“ den Namen aus der Datei vorschlägt, unter dem gewählten Namen importiert und die neue Vorlage auswählt. | grün | nie geprüft |
|
||||
| `TestStilvorlagenAustausch.test_import_ersetzt_vorhandene_nur_nach_rueckfrage` | Prüft, dass ein Import eine gleichnamige Vorlage ohne Bestätigung nicht überschreibt. | grün | nie geprüft |
|
||||
| `TestStilvorlagenAustausch.test_import_ungeeigneter_datei_warnt` | Prüft, dass eine ungeeignete Importdatei gemeldet wird, ohne nach einem Namen zu fragen oder etwas zu importieren. | grün | nie geprüft |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_basemap_kacheln.py`
|
||||
|
||||
Worum es in der Datei geht: Tests für modules/basemap_kacheln.py – kachelweise Auswertung des Basemap-Layers (Basis #88).
|
||||
|
||||
Testgruppen:
|
||||
|
||||
- `TestSammleObjekte` (4 Testfälle): — (Docstring fehlt)
|
||||
- `TestZoomUndStile` (2 Testfälle): — (Docstring fehlt)
|
||||
|
||||
| Testfall | prüft | Status | geprüft |
|
||||
| --- | --- | --- | --- |
|
||||
| `TestSammleObjekte.test_gleiche_objekte_aus_mehreren_kacheln_werden_entdoppelt` | Prüft, dass Objekte mit gleichem Quell-Layer, Geometrietyp und Attributen über Kachelgrenzen hinweg nur einmal gezählt werden. | grün | nie geprüft |
|
||||
| `TestSammleObjekte.test_kacheln_ausserhalb_der_geometrie_werden_uebersprungen` | Prüft, dass Kacheln ohne Schnitt mit dem Auswertebereich nicht abgefragt werden. | grün | nie geprüft |
|
||||
| `TestSammleObjekte.test_abbruch_liefert_none_und_hebt_auswahl_auf` | Prüft, dass ein Abbruch über den Fortschritt None liefert und die Auswahl auf dem Basemap-Layer trotzdem aufgehoben wird. | grün | nie geprüft |
|
||||
| `TestSammleObjekte.test_anzahl_kacheln_aus_kachelbereich` | Prüft, dass die Kachelzahl aus dem Kachelbereich der Geometrie berechnet wird. | grün | nie geprüft |
|
||||
| `TestZoomUndStile.test_zoomstufen_wie_im_qgis_renderer` | Prüft, dass Kachelzoom begrenzt, Darstellungszoom unbegrenzt und der gebrochene Zoom aus dem Maßstab bestimmt werden. | grün | nie geprüft |
|
||||
| `TestZoomUndStile.test_stile_aus_layer_liest_renderer_styles` | Prüft, dass Name, Quell-Layer, Geometrietyp, Zoombereich, Schalter und Filter der Renderer-Styles übernommen werden. | grün | nie geprüft |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_basemap_katalog.py`
|
||||
|
||||
Worum es in der Datei geht: Tests für modules/basemap_katalog.py – Legendenkatalog aus der basemap.de-Style-JSON (Basis #88).
|
||||
|
||||
Testgruppen:
|
||||
|
||||
- `TestRendererStil` (3 Testfälle): — (Docstring fehlt)
|
||||
- `TestErzeugeKatalog` (6 Testfälle): — (Docstring fehlt)
|
||||
- `TestSymbolwahlUndPruefung` (3 Testfälle): — (Docstring fehlt)
|
||||
|
||||
| Testfall | prüft | Status | geprüft |
|
||||
| --- | --- | --- | --- |
|
||||
| `TestRendererStil.test_beschriftung_und_3d_sind_keine_renderer_stile` | Prüft, dass reine Beschriftungen und 3D-Gebäude nicht als Renderer-Style gelten, Icon-Symbole und Flächen schon. | grün | nie geprüft |
|
||||
| `TestRendererStil.test_ausschluss_ueber_liste_und_praefix` | Prüft, dass Style-IDs über die Ausschlussliste und über Präfixe (Nummernschilder) ausgeschlossen werden. | grün | nie geprüft |
|
||||
| `TestRendererStil.test_normalisierung_entfernt_variantenkennungen` | Prüft, dass Variantenkennungen wie Kontur, Brücke oder Breitenangaben beim Normalisieren einer Style-ID entfallen. | grün | nie geprüft |
|
||||
| `TestErzeugeKatalog.test_kontur_decker_und_bruecke_bilden_einen_eintrag` | Prüft, dass Kontur-, Decker-, Fahrbahn- und Brückenvarianten derselben Straßenklasse genau einen Legendeneintrag bilden. | grün | nie geprüft |
|
||||
| `TestErzeugeKatalog.test_zustand_im_bau_wird_eigener_eintrag` | Prüft, dass „im Bau“ einen eigenen Legendeneintrag mit Zustandsangabe in der Bezeichnung bekommt. | grün | nie geprüft |
|
||||
| `TestErzeugeKatalog.test_punkt_und_flaeche_derselben_objektart_werden_zusammengefasst` | Prüft, dass das Kran-Symbol aus Bauwerkspunkt und Bauwerksfläche in einem Eintrag landet. | grün | nie geprüft |
|
||||
| `TestErzeugeKatalog.test_ausgeschlossene_stile_fehlen_im_katalog` | Prüft, dass Hintergrund, Beschriftungen, Nummernschilder und 3D-Gebäude keinem Eintrag zugeordnet werden. | grün | nie geprüft |
|
||||
| `TestErzeugeKatalog.test_fachliche_nachbearbeitung_bleibt_beim_erneuten_lauf_erhalten` | Prüft, dass Bezeichnung, Gruppe, Zusammenführung und Symbolwahl eines bestehenden Katalogs bei einem erneuten Lauf erhalten bleiben. | grün | nie geprüft |
|
||||
| `TestErzeugeKatalog.test_entfallene_style_ids_werden_gemeldet` | Prüft, dass eine Style-ID, die in der neuen Style-JSON fehlt, als entfallen gemeldet und aus dem Katalog entfernt wird. | grün | nie geprüft |
|
||||
| `TestSymbolwahlUndPruefung.test_symbol_stile_je_rolle_nur_grundvariante` | Prüft, dass für das Legendensymbol je Rolle (Kontur, Decker) nur die erste Grundvariante gewählt wird. | grün | nie geprüft |
|
||||
| `TestSymbolwahlUndPruefung.test_pruefung_findet_doppelte_zuordnung_und_unbekannte_symbole` | Prüft, dass die Katalogprüfung doppelt zugeordnete Style-IDs und Symbol-Styles außerhalb des Katalogs meldet. | grün | nie geprüft |
|
||||
| `TestSymbolwahlUndPruefung.test_ausgelieferter_katalog_ist_konsistent` | Prüft, dass der ausgelieferte Katalog data/basemap_legende.json ohne Fehler geprüft wird und Kreisstraße mit Kontur und Decker enthält. | grün | nie geprüft |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_basemap_legende.py`
|
||||
|
||||
Worum es in der Datei geht: Tests für modules/basemap_legende.py – Zuordnung, Auswahl und Ablauf der Basemap-Legende (Basis #88).
|
||||
|
||||
Testgruppen:
|
||||
|
||||
- `TestStileUndEintraege` (4 Testfälle): — (Docstring fehlt)
|
||||
- `TestAuswahlUndEinstellungen` (6 Testfälle): — (Docstring fehlt)
|
||||
- `TestLayerErkennung` (2 Testfälle): — (Docstring fehlt)
|
||||
- `TestAblauf` (6 Testfälle): — (Docstring fehlt)
|
||||
|
||||
| Testfall | prüft | Status | geprüft |
|
||||
| --- | --- | --- | --- |
|
||||
| `TestStileUndEintraege.test_stil_aktiv_nur_eingeschaltet_und_im_zoombereich` | Prüft, dass ein Style nur aktiv ist, wenn er eingeschaltet ist und die Zoomstufe im Bereich liegt (-1 = unbegrenzt). | grün | nie geprüft |
|
||||
| `TestStileUndEintraege.test_getroffene_stile_pruefen_layer_geometrie_zoom_und_filter` | Prüft, dass ein Style nur Objekte seines Quell-Layers und Geometrietyps zählt, deren Filter zutrifft, und nur bei passender Zoomstufe. | grün | nie geprüft |
|
||||
| `TestStileUndEintraege.test_eintraege_fassen_styles_zusammen_und_sortieren_nach_gruppe` | Prüft, dass mehrere Styles eines Katalogeintrags einen Eintrag ergeben und die Einträge nach Gruppen- und Katalogreihenfolge sortiert sind. | grün | nie geprüft |
|
||||
| `TestStileUndEintraege.test_ausgeschlossene_und_unbekannte_styles` | Prüft, dass ausgeschlossene Styles entfallen und unbekannte Styles als nicht bekannter Eintrag in „Sonstiges“ landen. | grün | nie geprüft |
|
||||
| `TestAuswahlUndEinstellungen.test_vorauswahl_bekannte_an_unbekannte_aus` | Prüft, dass ohne gespeicherte Auswahl Katalogeinträge vorausgewählt und unbekannte Styles abgewählt sind. | grün | nie geprüft |
|
||||
| `TestAuswahlUndEinstellungen.test_auswahl_wird_gemerkt_und_vorbelegt` | Prüft, dass ab- und angewählte Einträge in der Projektvariable gespeichert und beim nächsten Mal so vorbelegt werden. | grün | nie geprüft |
|
||||
| `TestAuswahlUndEinstellungen.test_merken_ergaenzt_die_bisherige_auswahl` | Prüft, dass das Merken die Auswahl nicht angezeigter Einträge aus früheren Läufen behält. | grün | nie geprüft |
|
||||
| `TestAuswahlUndEinstellungen.test_kaputte_projektvariable_ergibt_leere_auswahl` | Prüft, dass eine nicht lesbare Projektvariable als leere Auswahl gilt. | grün | nie geprüft |
|
||||
| `TestAuswahlUndEinstellungen.test_auswertebereich_standard_und_umstellung` | Prüft, dass der Auswertebereich standardmäßig das Verfahrensgebiet ist, umgestellt werden kann und unbekannte Werte abgewiesen werden. | grün | nie geprüft |
|
||||
| `TestAuswahlUndEinstellungen.test_legende_erzeugen_standard_an` | Prüft, dass das Erzeugen der Basemap-Legende standardmäßig eingeschaltet ist und abgeschaltet werden kann. | grün | nie geprüft |
|
||||
| `TestLayerErkennung.test_erkennung_ueber_quelle_und_namen` | Prüft, dass der Basemap-Layer an Vektorkacheln mit basemap.de-Quelle erkannt wird, der Name nur als Rückfall dient und andere Layertypen nicht zählen. | grün | nie geprüft |
|
||||
| `TestLayerErkennung.test_sichtbare_layer_aus_thema_feste_liste_oder_layerbaum` | Prüft, dass die Layer der Karte aus dem Kartenthema, sonst aus der festen Layerliste, sonst aus dem sichtbaren Layerbaum kommen. | grün | nie geprüft |
|
||||
| `TestAblauf.test_ohne_basemap_layer_passiert_nichts` | Prüft, dass ohne sichtbaren Basemap-Layer weder Dialog noch Legende entstehen. | grün | nie geprüft |
|
||||
| `TestAblauf.test_gewaehlte_eintraege_werden_geschrieben_und_gemerkt` | Prüft, dass nur die im Dialog gewählten Einträge in die Legende geschrieben und die Auswahl gespeichert wird. | grün | nie geprüft |
|
||||
| `TestAblauf.test_abbruch_im_dialog_aendert_nichts` | Prüft, dass ein Abbruch im Auswahldialog die Legende nicht verändert und keine Auswahl speichert. | grün | nie geprüft |
|
||||
| `TestAblauf.test_rueckfall_auf_druckbereich_wird_gemeldet` | Prüft, dass ohne Verfahrensgebiet auf den Druckbereich zurückgefallen und das gemeldet wird. | grün | nie geprüft |
|
||||
| `TestAblauf.test_ohne_objekte_keine_legende` | Prüft, dass ohne Basemap-Objekte im Auswertebereich weder Dialog noch Legende entstehen. | grün | nie geprüft |
|
||||
| `TestAblauf.test_viele_kacheln_werden_vorher_bestaetigt` | Prüft, dass vor einer Auswertung mit sehr vielen Kacheln nachgefragt wird und eine Ablehnung die Auswertung abbricht. | grün | nie geprüft |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_basemap_legende_layout.py`
|
||||
|
||||
Worum es in der Datei geht: Tests für modules/basemap_legende_layout.py – Basemap-Legende im Drucklayout (Basis #88).
|
||||
|
||||
Testgruppen:
|
||||
|
||||
- `TestKennzeichenUndKarte` (2 Testfälle): — (Docstring fehlt)
|
||||
- `TestSymbolwahl` (2 Testfälle): — (Docstring fehlt)
|
||||
- `TestAutobahnSymbol` (3 Testfälle): Autobahn-Symbol aus dem ausgelieferten Katalog (Basis #98).
|
||||
- `TestHilfslayer` (3 Testfälle): — (Docstring fehlt)
|
||||
- `TestPlatzierung` (7 Testfälle): — (Docstring fehlt)
|
||||
|
||||
| Testfall | prüft | Status | geprüft |
|
||||
| --- | --- | --- | --- |
|
||||
| `TestKennzeichenUndKarte.test_layout_kennzeichen_setzen_und_erkennen` | Prüft, dass ein markiertes Layout als Nutzer der Basemap-Legende erkannt und in der Projektliste geführt wird. | grün | nie geprüft |
|
||||
| `TestKennzeichenUndKarte.test_hauptkarte_ueber_id` | Prüft, dass die Karte mit der ID „Hauptkarte“ gefunden wird. | grün | nie geprüft |
|
||||
| `TestSymbolwahl.test_symbolnamen_aus_aktiven_symbol_stilen_in_renderer_reihenfolge` | Prüft, dass die Symbol-Styles des Katalogs in Zeichenreihenfolge genommen und inaktive übergangen werden. | grün | nie geprüft |
|
||||
| `TestSymbolwahl.test_ohne_aktive_symbol_stile_erster_getroffener_style` | Prüft, dass ohne aktiven Symbol-Style der erste tatsächlich getroffene Style das Legendensymbol liefert. | grün | nie geprüft |
|
||||
| `TestAutobahnSymbol.test_druckmassstab_ab_zoom_14_blauer_decker_auf_grauer_kontur` | Prüft, dass das Autobahn-Symbol ab Zoom 14 aus grauer Kontur und blauem Decker der Fahrbahnachse besteht statt nur aus einem grauen Style. | grün | nie geprüft |
|
||||
| `TestAutobahnSymbol.test_zoom_11_bis_13_bisherige_kontur_und_decker` | Prüft, dass das Autobahn-Symbol bei Zoom 11 bis 13 weiterhin aus Kontur und Decker der getrennten Fahrbahn besteht. | grün | nie geprüft |
|
||||
| `TestAutobahnSymbol.test_unter_zoom_11_blauer_decker` | Prüft, dass das Autobahn-Symbol unter Zoom 11 den blauen Decker der Übersichtsdarstellung nutzt. | grün | nie geprüft |
|
||||
| `TestHilfslayer.test_je_gruppe_und_geometrietyp_ein_leerer_hilfslayer` | Prüft, dass je Gruppe und Geometrietyp ein Hilfslayer außerhalb des Layerbaums entsteht, Flächen vor Linien, ohne Rückfrage beim Schließen. | grün | nie geprüft |
|
||||
| `TestHilfslayer.test_alte_hilfslayer_werden_entfernt` | Prüft, dass die Hilfslayer einer früheren Basemap-Legende des Layouts aus dem Projekt entfernt werden. | grün | nie geprüft |
|
||||
| `TestHilfslayer.test_ohne_eintraege_wird_vorhandene_basemap_legende_entfernt` | Prüft, dass ohne gewählte Einträge eine vorhandene Basemap-Legende entfernt und die Auswahl am Layout vermerkt wird. | grün | nie geprüft |
|
||||
| `TestPlatzierung.test_einspaltig_ueber_der_quellenangabe` | Prüft, dass die Basemap-Legende einspaltig unten an der Quellenangabe verankert wird, wenn der Platz reicht. | grün | nie geprüft |
|
||||
| `TestPlatzierung.test_mehrspaltig_wenn_hoehe_nicht_reicht` | Prüft, dass die Legende zwei- oder dreispaltig wird, wenn sie einspaltig nicht zwischen Hauptlegende und Quellenangabe passt. | grün | nie geprüft |
|
||||
| `TestPlatzierung.test_spalten_ungleich_breit` | Prüft, dass die Basemap-Legende ungleich breite Spalten bekommt (#96). | grün | nie geprüft |
|
||||
| `TestPlatzierung.test_mindestgroesse_mit_ungleichen_spalten_und_umbruch` | Prüft, dass der Platzbedarf mit ungleich breiten Spalten und Textumbruch berechnet wird (#96). | grün | nie geprüft |
|
||||
| `TestPlatzierung.test_neue_basemap_legende_mindestens_so_breit_wie_kartenschild` | Prüft, dass eine neu angelegte Basemap-Legende die Breite des Kartenschilds als Mindestbreite bekommt. | grün | nie geprüft |
|
||||
| `TestPlatzierung.test_titel_zweizeilig` | Prüft, dass der Titel der Basemap-Legende zweizeilig ist, damit er die Mindestbreite nicht bestimmt (#96). | grün | nie geprüft |
|
||||
| `TestPlatzierung.test_nie_breiter_als_der_seitenrand_mit_hinweis` | Prüft, dass keine Spaltenzahl gewählt wird, die über den Seitenrand ragt, und dann ein Hinweis kommt. | grün | nie geprüft |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_basemap_legende_rand.py`
|
||||
|
||||
Worum es in der Datei geht: Tests für den Legendenrand weißer Basemap-Flächen (Basis #92).
|
||||
|
||||
Testgruppen:
|
||||
|
||||
- `TestBrauchtLegendenrand` (4 Testfälle): — (Docstring fehlt)
|
||||
- `TestErgaenzeLegendenrand` (2 Testfälle): — (Docstring fehlt)
|
||||
|
||||
| Testfall | prüft | Status | geprüft |
|
||||
| --- | --- | --- | --- |
|
||||
| `TestBrauchtLegendenrand.test_weisse_flaeche_ohne_rand` | Prüft, dass eine weiße Fläche ohne Umrandung einen Legendenrand braucht. | grün | nie geprüft |
|
||||
| `TestBrauchtLegendenrand.test_farbige_flaeche_oder_flaeche_mit_kontur` | Prüft, dass farbige Flächen und weiße Flächen mit dunkler Kontur oder eigener Konturlinie keinen Rand bekommen. | grün | nie geprüft |
|
||||
| `TestBrauchtLegendenrand.test_heller_rand_und_fast_weiss_zaehlen_als_unsichtbar` | Prüft, dass fast weiße Füllungen und helle oder durchsichtige Ränder als unsichtbar gelten. | grün | nie geprüft |
|
||||
| `TestBrauchtLegendenrand.test_andere_ebenen_und_leeres_symbol` | Prüft, dass Symbole mit anderen Ebenen (Muster, Punkte) und leere Symbole keinen Rand bekommen. | grün | nie geprüft |
|
||||
| `TestErgaenzeLegendenrand.test_weisse_flaeche_bekommt_grauen_rand` | Prüft, dass eine weiße Fläche ohne Kontur eine graue Randlinie als oberste Ebene bekommt. | grün | nie geprüft |
|
||||
| `TestErgaenzeLegendenrand.test_farbige_flaeche_und_linien_bleiben_unveraendert` | Prüft, dass farbige Flächen, Flächen mit Kontur und Liniensymbole keinen Rand bekommen. | grün | nie geprüft |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_basemap_stilkorrektur.py`
|
||||
|
||||
Worum es in der Datei geht: Tests für modules/basemap_stilkorrektur.py – Punktlinien des Basemap-Layers sichtbar machen (Basis #90).
|
||||
|
||||
Testgruppen:
|
||||
|
||||
- `TestMusterUndAusdruck` (2 Testfälle): — (Docstring fehlt)
|
||||
- `TestLayerkorrektur` (4 Testfälle): — (Docstring fehlt)
|
||||
|
||||
| Testfall | prüft | Status | geprüft |
|
||||
| --- | --- | --- | --- |
|
||||
| `TestMusterUndAusdruck.test_strichlaenge_null_im_festen_muster` | Prüft, dass Strichlängen 0 (gerade Positionen) im Strichmuster ersetzt und Lücken der Länge 0 nicht verändert werden. | grün | nie geprüft |
|
||||
| `TestMusterUndAusdruck.test_strichlaenge_null_im_zoomabhaengigen_ausdruck` | Prüft, dass jede Strichlänge 0 in den array(...)-Mustern des Konverter-Ausdrucks ersetzt wird und der übrige Ausdruck gleich bleibt. | grün | nie geprüft |
|
||||
| `TestLayerkorrektur.test_punktlinien_werden_korrigiert_andere_styles_nicht` | Prüft, dass nur Styles mit Strichlänge 0 korrigiert werden – Muster und Ausdruck – und die Anzahl zurückkommt. | grün | nie geprüft |
|
||||
| `TestLayerkorrektur.test_zweiter_lauf_korrigiert_nichts` | Prüft, dass ein zweiter Lauf keine Styles mehr korrigiert und nicht neu zeichnen lässt. | grün | nie geprüft |
|
||||
| `TestLayerkorrektur.test_nur_ausdruck_ohne_festes_muster` | Prüft, dass auch ein Style korrigiert wird, dessen Strichlänge 0 nur im zoomabhängigen Ausdruck steht. | grün | nie geprüft |
|
||||
| `TestLayerkorrektur.test_layer_ohne_renderer` | Prüft, dass ein Layer ohne Renderer 0 korrigierte Styles liefert. | grün | nie geprüft |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_basemap_stilvorlagen.py`
|
||||
|
||||
Worum es in der Datei geht: Tests für modules/basemap_stilvorlagen.py – lokale Stilvorlagen des Basemap-Layers (Basis #88),
|
||||
|
||||
Testgruppen:
|
||||
|
||||
- `TestStilvorlagen` (8 Testfälle): — (Docstring fehlt)
|
||||
- `TestExportImport` (6 Testfälle): — (Docstring fehlt)
|
||||
|
||||
| Testfall | prüft | Status | geprüft |
|
||||
| --- | --- | --- | --- |
|
||||
| `TestStilvorlagen.test_speichern_und_auflisten` | Prüft, dass eine gespeicherte Vorlage mit Anzeigenamen, QML-Datei und Begleitdatei aufgelistet wird. | grün | nie geprüft |
|
||||
| `TestStilvorlagen.test_mehrere_varianten_alphabetisch` | Prüft, dass mehrere Varianten nebeneinander bestehen und alphabetisch nach Anzeigename sortiert werden. | grün | nie geprüft |
|
||||
| `TestStilvorlagen.test_leerer_name_oder_fehler_beim_schreiben` | Prüft, dass ein leerer Name und ein Schreibfehler von QGIS als ValueError gemeldet werden. | grün | nie geprüft |
|
||||
| `TestStilvorlagen.test_laden_setzt_stil_und_zeichnet_neu` | Prüft, dass das Laden die QML-Datei der Vorlage in den Layer lädt und neu zeichnen lässt. | grün | nie geprüft |
|
||||
| `TestStilvorlagen.test_passung_meldet_fremde_styles` | Prüft, dass Style-Namen der Vorlage gemeldet werden, die der Ziel-Layer nicht kennt. | grün | nie geprüft |
|
||||
| `TestStilvorlagen.test_standard_setzen_und_beim_loeschen_entfernen` | Prüft, dass eine Vorlage als Standard markiert wird und die Markierung beim Löschen der Vorlage entfällt. | grün | nie geprüft |
|
||||
| `TestStilvorlagen.test_fehlende_begleitdatei_wird_toleriert` | Prüft, dass eine QML-Datei ohne Begleitdatei mit ihrem Dateinamen aufgelistet wird. | grün | nie geprüft |
|
||||
| `TestStilvorlagen.test_ohne_ordner_leere_liste` | Prüft, dass ohne angelegten Vorlagenordner eine leere Liste zurückkommt. | grün | nie geprüft |
|
||||
| `TestExportImport.test_export_und_import_uebertragen_vorlage_mit_begleitdaten` | Prüft, dass eine exportierte Vorlage auf einem anderen Rechner mit Anzeigename, Thema, Style-Namen und Legendenauswahl ankommt. | grün | nie geprüft |
|
||||
| `TestExportImport.test_export_einer_fehlenden_vorlage` | Prüft, dass der Export einer nicht vorhandenen Vorlage als ValueError gemeldet wird und keine Datei entsteht. | grün | nie geprüft |
|
||||
| `TestExportImport.test_import_einer_reinen_qml_datei` | Prüft, dass eine QML-Datei ohne Begleitdatei mit dem Dateinamen als Namensvorschlag und ohne Thema übernommen wird. | grün | nie geprüft |
|
||||
| `TestExportImport.test_import_lehnt_ungeeignete_dateien_ab` | Prüft, dass Dateien ohne QGIS-Stil und ZIP-Dateien ohne genau eine QML-Datei abgelehnt werden, ohne etwas anzulegen. | grün | nie geprüft |
|
||||
| `TestExportImport.test_import_uebernimmt_nur_bekannte_begleitdaten` | Prüft, dass ein Import unbekannte oder falsch typisierte Angaben der Begleitdatei verwirft und den gewählten Namen nutzt. | grün | nie geprüft |
|
||||
| `TestExportImport.test_thema_der_vorlage_passt_nicht_zum_layer` | Prüft, dass ein abweichendes Thema der Vorlage gemeldet wird und ohne Thema in Vorlage oder Layer keine Meldung kommt. | grün | nie geprüft |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_basemap_themen.py`
|
||||
|
||||
Worum es in der Datei geht: Tests für modules/basemap_themen.py und den Abschnitt „Basemap-Layer“ im Basemap-Bereich (Basis #100):
|
||||
|
||||
Testgruppen:
|
||||
|
||||
- `TestQuelleUndThema` (4 Testfälle): Layerquelle der Themen, Thema eines Layers und Erkennung über die Kachel-URL.
|
||||
- `TestPruefwert` (3 Testfälle): Prüfwert der Darstellung und Änderungsstand für ungespeicherte Änderungen.
|
||||
- `TestLayerUndThemenwechsel` (7 Testfälle): Basemap-Layer anlegen, in den Layerbaum einfügen und Thema wechseln.
|
||||
- `TestStilvorlageMitThema` (1 Testfälle): Stilvorlagen vermerken das Thema des Layers.
|
||||
- `TestAuswahlDialog` (1 Testfälle): Rückfrage mit frei benannten Knöpfen.
|
||||
- `TestBasemapHinzufuegen` (5 Testfälle): Knopf „Basemap hinzufügen“ mit Rückfrage bei vorhandenem Layer gleicher Quelle.
|
||||
- `TestThemaWechseln` (8 Testfälle): Themenauswahl mit Rückfrage bei geänderter oder unbekannter Darstellung.
|
||||
- `TestZielLayer` (1 Testfälle): Auswahl des Basemap-Layers, auf den Thema und Stil wirken.
|
||||
|
||||
| Testfall | prüft | Status | geprüft |
|
||||
| --- | --- | --- | --- |
|
||||
| `TestQuelleUndThema.test_quelle_enthaelt_kachel_url_und_style_des_themas` | Prüft, dass die Layerquelle eines Themas die gemeinsame Kachel-URL und die Style-JSON des Themas enthält. | grün | nie geprüft |
|
||||
| `TestQuelleUndThema.test_unbekannte_style_json_ergibt_kein_thema` | Prüft, dass ein Layer mit fremder oder fehlender Style-JSON keinem Thema zugeordnet wird. | grün | nie geprüft |
|
||||
| `TestQuelleUndThema.test_unbekannter_schluessel_faellt_auf_farbe_zurueck` | Prüft, dass ein unbekannter Themenschlüssel auf das Standardthema „Farbe“ zurückfällt. | grün | nie geprüft |
|
||||
| `TestQuelleUndThema.test_vorhandener_layer_wird_an_der_quell_url_erkannt` | Prüft, dass ein vorhandener Basemap-Layer an der Kachel-URL erkannt wird – unabhängig von Name, Thema und URL-Kodierung. | grün | nie geprüft |
|
||||
| `TestPruefwert.test_gleiche_darstellung_gleicher_pruefwert_auch_bei_anderer_qgis_version` | Prüft, dass dieselbe Darstellung denselben Prüfwert ergibt, auch wenn die QGIS-Version in der QML abweicht. | grün | nie geprüft |
|
||||
| `TestPruefwert.test_ohne_ausgabe_der_darstellung_kein_pruefwert` | Prüft, dass kein Prüfwert entsteht, wenn der Layer seine Darstellung nicht ausgeben kann. | grün | nie geprüft |
|
||||
| `TestPruefwert.test_aenderungsstand_unbekannt_unveraendert_geaendert` | Prüft, dass der Änderungsstand ohne gemerkten Prüfwert „unbekannt“ ist, nach dem Merken „unverändert“ und nach einer Änderung „geändert“. | grün | nie geprüft |
|
||||
| `TestLayerUndThemenwechsel.test_neuer_layer_hat_thema_namen_und_gemerkten_stand` | Prüft, dass ein neuer Basemap-Layer im gewählten Thema entsteht, den Themenstil lädt und als unverändert gilt. | grün | nie geprüft |
|
||||
| `TestLayerUndThemenwechsel.test_ungueltiger_layer_oder_fehlender_themenstil_meldet_fehler` | Prüft, dass ein ungültiger Layer oder ein nicht ladbarer Themenstil als ValueError gemeldet wird. | grün | nie geprüft |
|
||||
| `TestLayerUndThemenwechsel.test_ohne_vektorkacheln_kein_layer` | Prüft, dass ohne Vektorkachel-Unterstützung (Mock-Modus) kein Layer erzeugt, sondern ein Fehler gemeldet wird. | grün | nie geprüft |
|
||||
| `TestLayerUndThemenwechsel.test_layer_kommt_ganz_unten_in_den_layerbaum` | Prüft, dass der Basemap-Layer ohne automatische Einordnung ins Projekt kommt und unten an den Layerbaum angehängt wird. | grün | nie geprüft |
|
||||
| `TestLayerUndThemenwechsel.test_themenwechsel_stellt_quelle_um_und_merkt_neuen_stand` | Prüft, dass der Themenwechsel die Style-JSON der Quelle umstellt, den Themenstil lädt, den automatischen Namen anpasst und den neuen Stand merkt. | grün | nie geprüft |
|
||||
| `TestLayerUndThemenwechsel.test_themenwechsel_behaelt_eigenen_layernamen` | Prüft, dass ein vom Nutzer vergebener Layername beim Themenwechsel erhalten bleibt. | grün | nie geprüft |
|
||||
| `TestLayerUndThemenwechsel.test_themenwechsel_ohne_umstellbare_quelle_meldet_fehler` | Prüft, dass ein Layer ohne setDataSource den Themenwechsel mit einem ValueError ablehnt. | grün | nie geprüft |
|
||||
| `TestStilvorlageMitThema.test_stilvorlage_vermerkt_das_thema` | Prüft, dass eine gespeicherte Stilvorlage das Thema des Layers in ihrer Begleitdatei und in der Liste vermerkt. | grün | nie geprüft |
|
||||
| `TestAuswahlDialog.test_mock_modus_liefert_vorbelegung` | Prüft, dass die Rückfrage mit frei benannten Knöpfen im Mock-Modus den vorbelegten Schlüssel liefert. | grün | nie geprüft |
|
||||
| `TestBasemapHinzufuegen.test_ohne_vorhandenen_layer_wird_ohne_rueckfrage_hinzugefuegt` | Prüft, dass ohne Basemap-Layer gleicher Quelle sofort ein Layer im gewählten Thema hinzugefügt wird. | grün | nie geprüft |
|
||||
| `TestBasemapHinzufuegen.test_vorhandener_layer_wird_in_der_rueckfrage_genannt_abbrechen` | Prüft, dass ein vorhandener Layer gleicher Quelle in der Rückfrage genannt wird und „Abbrechen“ nichts verändert. | grün | nie geprüft |
|
||||
| `TestBasemapHinzufuegen.test_zusaetzlich_laden_fuegt_zweiten_layer_hinzu` | Prüft, dass „Zusätzlich laden“ einen weiteren Basemap-Layer neben dem vorhandenen hinzufügt. | grün | nie geprüft |
|
||||
| `TestBasemapHinzufuegen.test_ersetzen_laedt_vorhandenen_layer_im_gewaehlten_thema` | Prüft, dass „Ersetzen“ keinen neuen Layer anlegt, sondern den vorhandenen im gewählten Thema neu lädt. | grün | nie geprüft |
|
||||
| `TestBasemapHinzufuegen.test_fehler_beim_anlegen_wird_gemeldet` | Prüft, dass ein nicht erreichbarer Dienst als Warnung gemeldet und kein Layer hinzugefügt wird. | grün | nie geprüft |
|
||||
| `TestThemaWechseln.test_unveraenderter_layer_wechselt_ohne_rueckfrage` | Prüft, dass ein unveränderter Basemap-Layer ohne Rückfrage auf das gewählte Thema wechselt. | grün | nie geprüft |
|
||||
| `TestThemaWechseln.test_gleiches_thema_aendert_nichts` | Prüft, dass die Wahl des Themas, das der Layer schon hat, nichts neu lädt. | grün | nie geprüft |
|
||||
| `TestThemaWechseln.test_geaenderte_darstellung_abbrechen_behaelt_thema` | Prüft, dass bei geänderter Darstellung nachgefragt wird und „Abbrechen“ Thema und Darstellung unverändert lässt. | grün | nie geprüft |
|
||||
| `TestThemaWechseln.test_geaenderte_darstellung_verwerfen_wechselt` | Prüft, dass „Verwerfen“ die geänderte Darstellung aufgibt und das Thema wechselt. | grün | nie geprüft |
|
||||
| `TestThemaWechseln.test_als_stil_speichern_sichert_vor_dem_wechsel` | Prüft, dass „Als Stil speichern“ die Darstellung vor dem Themenwechsel als Stilvorlage sichert. | grün | nie geprüft |
|
||||
| `TestThemaWechseln.test_abgebrochenes_speichern_verhindert_den_wechsel` | Prüft, dass das Thema nicht wechselt, wenn „Als Stil speichern“ gewählt, die Namensabfrage aber abgebrochen wird. | grün | nie geprüft |
|
||||
| `TestThemaWechseln.test_unbekannter_stand_fragt_nach` | Prüft, dass bei einem Layer ohne gemerkten Prüfwert (vor dieser Funktion geladen) vorsichtshalber nachgefragt wird. | grün | nie geprüft |
|
||||
| `TestThemaWechseln.test_ohne_basemap_layer_nur_vorauswahl` | Prüft, dass die Themenwahl ohne Basemap-Layer nur als Vorauswahl für „Basemap hinzufügen“ dient und nichts meldet. | grün | nie geprüft |
|
||||
| `TestZielLayer.test_ausgewaehlter_basemap_layer_hat_vorrang` | Prüft, dass der im Layerbaum ausgewählte Basemap-Layer Ziel des Themenwechsels ist, sonst der erste Basemap-Layer. | grün | nie geprüft |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_bootstrap.py`
|
||||
|
||||
@@ -196,6 +454,31 @@ Testgruppen:
|
||||
| `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ün | geprüft am 2026-09-21 |
|
||||
| `DockManagerShowTests.test_fehler_beim_anzeigen_wird_gemeldet` | Prüft, dass ein Fehler beim Anzeigen des Docks als Fehler gemeldet wird. | grün | geprüft am 2026-09-21 |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_druck_kbs.py`
|
||||
|
||||
Worum es in der Datei geht: Tests zu Basis #99: Ist das Projekt-KBS ein anderes als das KBS des Verfahrensgebiets, müssen
|
||||
|
||||
Testgruppen:
|
||||
|
||||
- `TestTransformiereRechteck` (3 Testfälle): Umrechnung eines Rechtecks zwischen zwei KBS.
|
||||
- `TestZoomAufLayer` (2 Testfälle): Zoom der Kartenansicht auf einen Layer in einem anderen KBS.
|
||||
- `TestDruckKbs` (5 Testfälle): KBS der Layoutkarte und Umrechnung der Druckbereiche.
|
||||
- `TestLayoutkarteImDruckKbs` (1 Testfälle): Die Layoutkarte bekommt das Druck-KBS, bevor die Ausdehnung gesetzt wird.
|
||||
|
||||
| Testfall | prüft | Status | geprüft |
|
||||
| --- | --- | --- | --- |
|
||||
| `TestTransformiereRechteck.test_verschiedene_kbs_werden_umgerechnet` | Prüft, dass ein Rechteck bei verschiedenen KBS mit QgsCoordinateTransform von Quell- nach Ziel-KBS umgerechnet wird. | grün | nie geprüft |
|
||||
| `TestTransformiereRechteck.test_gleiches_fehlendes_oder_ungueltiges_kbs_laesst_rechteck_unveraendert` | Prüft, dass bei gleichem, fehlendem oder ungültigem KBS nicht umgerechnet und das Rechteck unverändert geliefert wird. | grün | nie geprüft |
|
||||
| `TestTransformiereRechteck.test_fehler_bei_der_umrechnung_liefert_das_rechteck` | Prüft, dass ein Fehler bei der Umrechnung nicht durchschlägt, sondern das ursprüngliche Rechteck zurückkommt. | grün | nie geprüft |
|
||||
| `TestZoomAufLayer.test_ausdehnung_wird_ins_kbs_der_kartenansicht_umgerechnet` | Prüft, dass zoom_auf_layer die Layer-Ausdehnung vom Layer-KBS in das KBS der Kartenansicht umrechnet, bevor gezoomt wird. | grün | nie geprüft |
|
||||
| `TestZoomAufLayer.test_ohne_layer_oder_kartenansicht_kein_zoom` | Prüft, dass zoom_auf_layer ohne Layer oder ohne Kartenansicht nichts tut und False liefert. | grün | nie geprüft |
|
||||
| `TestDruckKbs.test_druck_kbs_ist_das_kbs_des_verfahrensgebiets` | Prüft, dass die Layoutkarte im KBS des Verfahrensgebiet-Layers steht und ohne Verfahrensgebiet das Projekt-KBS gilt. | grün | nie geprüft |
|
||||
| `TestDruckKbs.test_kartenfenster_wird_vom_kbs_der_kartenansicht_umgerechnet` | Prüft, dass der Druckbereich „wie Kartenfenster“ vom KBS der Kartenansicht in das Druck-KBS umgerechnet wird. | grün | nie geprüft |
|
||||
| `TestDruckKbs.test_auswahl_wird_vor_dem_puffern_vom_layer_kbs_umgerechnet` | Prüft, dass der Druckbereich „Auswahl“ aus dem KBS des Auswahl-Layers umgerechnet und erst danach gepuffert wird. | grün | nie geprüft |
|
||||
| `TestDruckKbs.test_ohne_druck_kbs_wird_nicht_umgerechnet` | Prüft, dass _resolve_extent ohne Druck-KBS wie bisher nicht umrechnet (Aufrufe ohne den neuen Parameter). | grün | nie geprüft |
|
||||
| `TestDruckKbs.test_druckrechteck_wird_ins_kbs_seines_layers_umgerechnet` | Prüft, dass ein in der Kartenansicht gezeichnetes Druckrechteck vor dem Speichern in das KBS des Druckrechteck-Layers umgerechnet wird. | grün | nie geprüft |
|
||||
| `TestLayoutkarteImDruckKbs.test_hauptkarte_bekommt_das_kbs_vor_der_ausdehnung` | Prüft, dass die Hauptkarte eines neuen Layouts das Druck-KBS erhält, bevor ihre Ausdehnung gesetzt wird. | grün | nie geprüft |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_excel_importer.py`
|
||||
|
||||
Worum es in der Datei geht: Tests für sn_basis/modules/excel_importer.py (Excel-Import für Linklisten, Issue #63).
|
||||
@@ -438,6 +721,35 @@ Testgruppen:
|
||||
| `IsCaseSensitiveFsTests.test_macos_ist_nicht_case_sensitiv` | Prüft, dass macOS als nicht case-sensitives Dateisystem gilt. | grün | geprüft am 2026-09-29 |
|
||||
| `IsCaseSensitiveFsTests.test_linux_ist_case_sensitiv` | Prüft, dass Linux als case-sensitives Dateisystem gilt. | grün | geprüft am 2026-09-29 |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_print_kartenrand.py`
|
||||
|
||||
Worum es in der Datei geht: Tests für modules/print_kartenrand.py – Anordnung des Kartenrands neben der Karte (Basis #93).
|
||||
|
||||
Testgruppen:
|
||||
|
||||
- `TestBerechneAnordnung` (5 Testfälle): — (Docstring fehlt)
|
||||
- `TestOrdneKartenrandAn` (5 Testfälle): — (Docstring fehlt)
|
||||
- `TestMindestbreiteBeimLaden` (3 Testfälle): — (Docstring fehlt)
|
||||
- `TestAnbindungPrintLayout` (2 Testfälle): — (Docstring fehlt)
|
||||
|
||||
| Testfall | prüft | Status | geprüft |
|
||||
| --- | --- | --- | --- |
|
||||
| `TestBerechneAnordnung.test_passt_einspaltig_nichts_aendert_sich` | Prüft, dass bei genug Platz neben der Karte einspaltig angeordnet wird und Seite und Kartenschild bleiben. | grün | nie geprüft |
|
||||
| `TestBerechneAnordnung.test_mehr_spalten_und_breiterer_rand` | Prüft, dass bei zu hohen Legenden die kleinste passende Spaltenzahl gewählt und der Kartenrand dafür verbreitert wird. | grün | nie geprüft |
|
||||
| `TestBerechneAnordnung.test_seite_wird_hoeher_wenn_auch_drei_spalten_nicht_reichen` | Prüft, dass die Seite höher wird und Quellenangabe und Kartenschild nach unten rutschen, wenn auch drei Spalten nicht reichen. | grün | nie geprüft |
|
||||
| `TestBerechneAnordnung.test_seite_wird_nie_kleiner` | Prüft, dass Seitenbreite und -höhe nie unter die ursprüngliche Seitengröße fallen. | grün | nie geprüft |
|
||||
| `TestBerechneAnordnung.test_ohne_legenden_nur_kartenschild` | Prüft, dass ohne Legenden nur Quellenangabe und Kartenschild zählen und die Seite bei zu niedriger Karte höher wird. | grün | nie geprüft |
|
||||
| `TestOrdneKartenrandAn.test_seite_hoeher_und_kartenschild_verschoben` | Prüft, dass bei zu niedriger Karte die Legende dreispaltig wird, die Seite wächst und Quellenangabe und Kartenschild um denselben Betrag nach unten rutschen. | grün | nie geprüft |
|
||||
| `TestOrdneKartenrandAn.test_spalten_ungleich_breit_und_text_umgebrochen` | Prüft, dass die Legenden ungleich breite Spalten und einen automatischen Textumbruch bekommen, damit mehrspaltige Legenden nicht unnötig breit werden (#96). | grün | nie geprüft |
|
||||
| `TestOrdneKartenrandAn.test_legenden_mindestens_so_breit_wie_kartenschild` | Prüft, dass die Legenden die Breite des Kartenschilds als Mindestbreite bekommen und das Layout sie für das Neuladen vermerkt. | grün | nie geprüft |
|
||||
| `TestOrdneKartenrandAn.test_passt_nichts_wird_verschoben` | Prüft, dass bei ausreichend hoher Karte weder Seite noch Kartenschild verändert werden. | grün | nie geprüft |
|
||||
| `TestOrdneKartenrandAn.test_ohne_karte_keine_anordnung` | Prüft, dass ein Layout ohne Hauptkarte unverändert bleibt. | grün | nie geprüft |
|
||||
| `TestMindestbreiteBeimLaden.test_mindestbreite_nur_fuer_vermerkte_layouts` | Prüft, dass beim Laden die Mindestbreite nur an Layouts mit Vermerk wieder gesetzt wird. | grün | nie geprüft |
|
||||
| `TestMindestbreiteBeimLaden.test_listener_verbinden_und_trennen` | Prüft, dass der Listener readProject einmal verbindet, beim Trennen wieder löst und beides mehrfach aufgerufen werden darf. | grün | nie geprüft |
|
||||
| `TestMindestbreiteBeimLaden.test_ohne_qgis_kein_listener` | Prüft, dass im Mock-Modus kein Listener verbunden wird. | grün | nie geprüft |
|
||||
| `TestAnbindungPrintLayout.test_vorlage_ordnet_kartenrand_an` | Prüft, dass PrintLayout beim Anlegen einer Vorlage den Kartenrand anordnen lässt. | grün | nie geprüft |
|
||||
| `TestAnbindungPrintLayout.test_fehler_bei_der_anordnung_verhindert_die_vorlage_nicht` | Prüft, dass ein Fehler bei der Anordnung nur als Warnung gemeldet wird und keine Ausnahme durchreicht. | grün | nie geprüft |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_print_layout.py`
|
||||
|
||||
Worum es in der Datei geht: — (Docstring fehlt)
|
||||
@@ -1451,7 +1763,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 365 Testfällen ohne Beschreibung
|
||||
### `sn_basis` – 0 von 526 Testfällen ohne Beschreibung
|
||||
|
||||
Keine Lücken.
|
||||
|
||||
@@ -1657,36 +1969,98 @@ Keine Lücken.
|
||||
Heuristik, kein Beweis: Diese Funktionen und Methoden kommen unter ihrem Namen in keiner Testdatei des Pakets vor. Das schließt nicht aus, dass sie indirekt über eine andere, getestete Funktion mitlaufen – umgekehrt gilt: Taucht der Name irgendwo in einer Testdatei auf, gilt die Funktion schon als referenziert, auch bei zufälliger Namensgleichheit mit etwas anderem. `main.py`/`__init__.py` (QGIS-Einstiegspunkte wie `classFactory`, `initGui`, `unload`) und Dunder-Methoden sind ausgenommen. Diese Liste ersetzt keine fachliche Prüfung, ob ein Test sinnvoll wäre – dafür braucht es einen Menschen, der die Funktion kennt.
|
||||
„beabsichtigt“ liest den Docstring der Funktion: Enthält er einen Vermerk wie „von Test abgesehen, weil …“ oder „Test ausgesetzt, zunächst Refactor“, gilt der fehlende Test als bewusste Entscheidung. Alles andere ist „ungeklärt“ – die eigentliche Arbeitsliste.
|
||||
|
||||
### `sn_basis` – 70 von 229 (31 %) ohne Testbezug (0 ungeklärt, 70 beabsichtigt)
|
||||
### `sn_basis` – 126 von 393 (32 %) ohne Testbezug (61 ungeklärt, 65 beabsichtigt)
|
||||
|
||||
#### `functions/dialog_wrapper.py` (9)
|
||||
|
||||
- `show_info_dialog` (Zeile 42) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `ask_detailpruefung_oder_vg_laden` (Zeile 192) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `ask_detailpruefung_oder_abbrechen` (Zeile 244) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `ProgressDialog.set_total` (Zeile 339) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `ProgressDialog.set_value` (Zeile 348) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `ProgressDialog.set_label` (Zeile 361) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `ProgressDialog.is_canceled` (Zeile 371) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `ProgressDialog.raise_to_front` (Zeile 389) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `create_progress_dialog` (Zeile 408) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `ask_detailpruefung_oder_vg_laden` (Zeile 241) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `ask_detailpruefung_oder_abbrechen` (Zeile 293) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `ProgressDialog.set_total` (Zeile 388) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `ProgressDialog.set_value` (Zeile 397) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `ProgressDialog.set_label` (Zeile 410) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `ProgressDialog.is_canceled` (Zeile 420) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `ProgressDialog.raise_to_front` (Zeile 438) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `create_progress_dialog` (Zeile 457) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
|
||||
#### `functions/os_wrapper.py` (5)
|
||||
#### `functions/os_wrapper.py` (4)
|
||||
|
||||
- `normalize_path` (Zeile 43) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `get_home_dir` (Zeile 55) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `is_absolute_path` (Zeile 64) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `basename` (Zeile 75) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `path_suffix` (Zeile 106) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
|
||||
#### `functions/qgiscore_wrapper.py` (2)
|
||||
|
||||
- `_crs_kennung` (Zeile 1259) — ungeklärt
|
||||
- `_crs_gueltig` (Zeile 1267) — ungeklärt
|
||||
|
||||
#### `functions/qgisui_wrapper.py` (1)
|
||||
|
||||
- `add_toolbar` (Zeile 204) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
|
||||
#### `functions/qt_wrapper.py` (2)
|
||||
|
||||
- `exec_dialog` (Zeile 60) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `debug_qt_status` (Zeile 67) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `exec_dialog` (Zeile 64) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `debug_qt_status` (Zeile 71) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
|
||||
#### `modules/basemap_kacheln.py` (4)
|
||||
|
||||
- `_aufruf` (Zeile 28) — ungeklärt
|
||||
- `_enum_int` (Zeile 61) — ungeklärt
|
||||
- `qgis_filterpruefer` (Zeile 101) — ungeklärt
|
||||
- `_objekt_schluessel` (Zeile 122) — ungeklärt
|
||||
|
||||
#### `modules/basemap_katalog.py` (6)
|
||||
|
||||
- `_sammle_bedingungen` (Zeile 138) — ungeklärt
|
||||
- `_slug` (Zeile 177) — ungeklärt
|
||||
- `_bezeichnung_aus_id` (Zeile 184) — ungeklärt
|
||||
- `_bezeichnung` (Zeile 202) — ungeklärt
|
||||
- `eintrags_schluessel` (Zeile 216) — ungeklärt
|
||||
- `_ist_grundvariante` (Zeile 235) — ungeklärt
|
||||
|
||||
#### `modules/basemap_legende.py` (4)
|
||||
|
||||
- `Katalog.eintrag_fuer` (Zeile 112) — ungeklärt
|
||||
- `Katalog.sortierschluessel` (Zeile 115) — ungeklärt
|
||||
- `_aufruf` (Zeile 267) — ungeklärt
|
||||
- `finde_basemap_layer` (Zeile 311) — ungeklärt
|
||||
|
||||
#### `modules/basemap_legende_layout.py` (10)
|
||||
|
||||
- `_enum_int` (Zeile 79) — ungeklärt
|
||||
- `_aufruf` (Zeile 86) — ungeklärt
|
||||
- `friere_zoom_ein` (Zeile 131) — ungeklärt
|
||||
- `baue_symbole` (Zeile 176) — ungeklärt
|
||||
- `_ist_unsichtbar` (Zeile 199) — ungeklärt
|
||||
- `_rgba` (Zeile 222) — ungeklärt
|
||||
- `_ebenen_beschreiben` (Zeile 226) — ungeklärt
|
||||
- `vorschau_icon` (Zeile 259) — ungeklärt
|
||||
- `_rechteck_mm` (Zeile 316) — ungeklärt
|
||||
- `_layout_messung` (Zeile 341) — ungeklärt
|
||||
|
||||
#### `modules/basemap_stilkorrektur.py` (2)
|
||||
|
||||
- `_ist_null` (Zeile 28) — ungeklärt
|
||||
- `_korrigiere_symbol` (Zeile 50) — ungeklärt
|
||||
|
||||
#### `modules/basemap_stilvorlagen.py` (6)
|
||||
|
||||
- `standard_ordner` (Zeile 47) — ungeklärt
|
||||
- `_stilnamen` (Zeile 58) — ungeklärt
|
||||
- `lies_importdatei` (Zeile 65) — ungeklärt
|
||||
- `BasemapStilvorlagen._pfade` (Zeile 113) — ungeklärt
|
||||
- `BasemapStilvorlagen._metadaten` (Zeile 117) — ungeklärt
|
||||
- `BasemapStilvorlagen.dateiname` (Zeile 127) — ungeklärt
|
||||
|
||||
#### `modules/basemap_themen.py` (5)
|
||||
|
||||
- `_aufruf` (Zeile 62) — ungeklärt
|
||||
- `_erfolg` (Zeile 72) — ungeklärt
|
||||
- `_parameter` (Zeile 101) — ungeklärt
|
||||
- `_normiert` (Zeile 106) — ungeklärt
|
||||
- `_lade_themenstil` (Zeile 183) — ungeklärt
|
||||
|
||||
#### `modules/DataGrabber.py` (3)
|
||||
|
||||
@@ -1705,6 +2079,16 @@ Heuristik, kein Beweis: Diese Funktionen und Methoden kommen unter ihrem Namen i
|
||||
- `Linkpruefer._pruefe_url` (Zeile 84) — **beabsichtigt:** von Test abgesehen, weil bereits über pruefe() in test_linkpruefer.py vollständig
|
||||
- `Linkpruefer._pruefe_dateipfad` (Zeile 121) — **beabsichtigt:** von Test abgesehen, weil bereits über pruefe() in test_linkpruefer.py vollständig
|
||||
|
||||
#### `modules/print_kartenrand.py` (7)
|
||||
|
||||
- `_aufruf` (Zeile 119) — ungeklärt
|
||||
- `_rechteck` (Zeile 134) — ungeklärt
|
||||
- `_legende_groesse` (Zeile 139) — ungeklärt
|
||||
- `_rendere_legenden` (Zeile 149) — ungeklärt
|
||||
- `setze_legenden_mindestbreite` (Zeile 156) — ungeklärt
|
||||
- `_on_projekt_gelesen` (Zeile 203) — ungeklärt
|
||||
- `_verschiebe` (Zeile 234) — ungeklärt
|
||||
|
||||
#### `modules/print_layout.py` (11)
|
||||
|
||||
- `PrintLayout._create_map_item` (Zeile 98) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
@@ -1722,31 +2106,27 @@ Heuristik, kein Beweis: Diese Funktionen und Methoden kommen unter ihrem Namen i
|
||||
#### `modules/print_layout_baufreigabe.py` (3)
|
||||
|
||||
- `PrintLayoutBaufreigabe.create_baufreigabe_layout` (Zeile 90) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLayoutBaufreigabe._setup_layout_objects_baufreigabe` (Zeile 264) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLayoutBaufreigabe._calc_atlas_margin_percent` (Zeile 398) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLayoutBaufreigabe._setup_layout_objects_baufreigabe` (Zeile 274) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLayoutBaufreigabe._calc_atlas_margin_percent` (Zeile 408) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
|
||||
#### `modules/print_logic.py` (20)
|
||||
#### `modules/print_logic.py` (16)
|
||||
|
||||
- `PrintLogic._failed_result` (Zeile 123) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._show_target_size_too_small` (Zeile 127) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._is_enabled_flag` (Zeile 135) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._resolve_layer_from_project` (Zeile 141) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._resolve_active_layer` (Zeile 162) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._get_druckpuffer_cm` (Zeile 172) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._get_druckpuffer_m` (Zeile 181) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._import_qgis_symbol` (Zeile 185) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._build_rectangle` (Zeile 193) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._clone_extent` (Zeile 203) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._get_existing_layer_by_name` (Zeile 270) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._create_druckrechteck_layer` (Zeile 284) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._clear_layer_features` (Zeile 313) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic.configure_atlas_for_baufreigabe_layout` (Zeile 483) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._store_druckrechteck` (Zeile 631) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic.activate_druckrechteck_capture` (Zeile 680) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._resolve_selection_layer` (Zeile 811) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._get_selected_extent` (Zeile 825) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._get_plot_dimensions_mm` (Zeile 1078) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._get_required_map_dimensions_mm` (Zeile 1088) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._failed_result` (Zeile 125) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._show_target_size_too_small` (Zeile 129) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._is_enabled_flag` (Zeile 137) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._resolve_layer_from_project` (Zeile 143) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._resolve_active_layer` (Zeile 164) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._get_druckpuffer_cm` (Zeile 174) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._get_druckpuffer_m` (Zeile 183) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._build_rectangle` (Zeile 195) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._clone_extent` (Zeile 205) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._get_existing_layer_by_name` (Zeile 272) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._create_druckrechteck_layer` (Zeile 286) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic.configure_atlas_for_baufreigabe_layout` (Zeile 485) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic.activate_druckrechteck_capture` (Zeile 689) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._layer_crs` (Zeile 943) — ungeklärt
|
||||
- `PrintLogic._get_plot_dimensions_mm` (Zeile 1134) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
- `PrintLogic._get_required_map_dimensions_mm` (Zeile 1144) — **beabsichtigt:** Test ausgesetzt, zunächst Refactor
|
||||
|
||||
#### `modules/Pruefmanager.py` (4)
|
||||
|
||||
@@ -1755,15 +2135,36 @@ Heuristik, kein Beweis: Diese Funktionen und Methoden kommen unter ihrem Namen i
|
||||
- `Pruefmanager._handle_datei_existiert` (Zeile 87) — **beabsichtigt:** von Test abgesehen, weil bereits über verarbeite() in test_pruefmanager.py vollständig
|
||||
- `Pruefmanager._ask_use_or_replace_pufferlayer` (Zeile 280) — **beabsichtigt:** von Test abgesehen, weil toter Code: referenziert self.pruefmanager, das auf
|
||||
|
||||
#### `ui/base_dockwidget.py` (2)
|
||||
|
||||
- `_inhalt` (Zeile 23) — ungeklärt
|
||||
- `tabs_mit_scrollbereich` (Zeile 30) — ungeklärt
|
||||
|
||||
#### `ui/tabs/print_tab.py` (7)
|
||||
|
||||
- `PrintTab._build_ui` (Zeile 115) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `PrintTab._on_kartenname_changed` (Zeile 335) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `PrintTab._on_massstab_changed` (Zeile 349) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `PrintTab._on_zielgroesse_changed` (Zeile 361) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `PrintTab._on_formfaktor_changed` (Zeile 367) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `PrintTab._on_druckbereich_changed` (Zeile 374) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `PrintTab._format_druckpuffer_label` (Zeile 432) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `PrintTab._build_ui` (Zeile 116) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `PrintTab._on_kartenname_changed` (Zeile 340) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `PrintTab._on_massstab_changed` (Zeile 354) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `PrintTab._on_zielgroesse_changed` (Zeile 366) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `PrintTab._on_formfaktor_changed` (Zeile 372) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `PrintTab._on_druckbereich_changed` (Zeile 379) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
- `PrintTab._format_druckpuffer_label` (Zeile 437) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||||
|
||||
#### `ui/widgets/basemap_bereich.py` (13)
|
||||
|
||||
- `BasemapBereich._build_ui` (Zeile 61) — **beabsichtigt:** von Test abgesehen, weil reiner Widget-Aufbau; im QGIS-Test geprüft
|
||||
- `BasemapBereich._ueberschrift` (Zeile 164) — ungeklärt
|
||||
- `BasemapBereich._vorlagen` (Zeile 174) — ungeklärt
|
||||
- `BasemapBereich._gewaehltes_thema` (Zeile 195) — ungeklärt
|
||||
- `BasemapBereich._zeige_thema` (Zeile 198) — ungeklärt
|
||||
- `BasemapBereich._umschalten` (Zeile 207) — ungeklärt
|
||||
- `BasemapBereich._aenderungen_klaeren` (Zeile 241) — ungeklärt
|
||||
- `BasemapBereich._ersetzen` (Zeile 298) — ungeklärt
|
||||
- `BasemapBereich._on_erzeugen_geaendert` (Zeile 336) — ungeklärt
|
||||
- `BasemapBereich._gewaehlte_vorlage` (Zeile 370) — ungeklärt
|
||||
- `BasemapBereich._on_stil_standard` (Zeile 435) — ungeklärt
|
||||
- `BasemapBereich._on_stil_loeschen` (Zeile 446) — ungeklärt
|
||||
- `_thema_text` (Zeile 500) — ungeklärt
|
||||
|
||||
### `sn_verfahrensgebiet` – 51 von 161 (32 %) ohne Testbezug (51 ungeklärt, 0 beabsichtigt)
|
||||
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
# Testkonzept: Anzeige für den Eigentümer und Korrekturen
|
||||
|
||||
Plugin: `sn_verfahrensgebiet` · Stand: 06.10.2026 · Pflege: bei jeder Änderung an diesem Ablauf
|
||||
|
||||
## Worum es fachlich geht
|
||||
|
||||
Im Termin sitzt der Eigentümer vor einem zweiten Bildschirm. Dort sieht er nur seine eigenen gespeicherten Daten:
|
||||
Name, Anschrift und E-Mail. Den QGIS-Bildschirm mit Trefferliste, Konten und anderen Personen sieht er nicht.
|
||||
Die Sachbearbeitung beginnt zu Beginn der Termine eine Sitzung und schiebt das Anzeigefenster auf den Bildschirm des Eigentümers; beim nächsten Mal erscheint es wieder dort. Für jeden Eigentümer wählt sie in der Trefferliste
|
||||
die passenden Einträge und zeigt sie an. Stimmt etwas nicht, korrigiert sie es im Plugin. Der Eigentümer sieht die
|
||||
Korrektur sofort. Vor dem nächsten Eigentümer leert sie die Anzeige, ohne das Fenster zu schließen. Am Ende beendet
|
||||
sie die Sitzung.
|
||||
|
||||
Die Eigentümerdatei selbst wird nie verändert. Jede Korrektur landet als eigene Zeile in einer Korrektur-CSV neben
|
||||
der Eigentümerdatei und kann später in das Fachverfahren übernommen werden.
|
||||
|
||||
Die Suche bis zur Trefferliste beschreibt [`verfahrensgebiet-eigentuemersuche.md`](verfahrensgebiet-eigentuemersuche.md).
|
||||
|
||||
## Der Ablauf
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["1 Sitzung beginnen"] --> B["2 Anzeigefenster öffnet leer, mit Rahmen;<br/>Bearbeiter schiebt es auf den zweiten Bildschirm"]
|
||||
T["Trefferliste: Einträge wählen,<br/>„Daten anzeigen“"] --> C{"Sitzung läuft?"}
|
||||
C -->|nein| A
|
||||
C -->|ja| D["3 Eigentümer sieht Name,<br/>Anschrift, E-Mail"]
|
||||
B --> D
|
||||
D --> E{"4 Daten richtig?"}
|
||||
E -->|nein| F["5 Korrigieren: Änderung<br/>in Korrektur-CSV, sofort angezeigt"]
|
||||
F --> E
|
||||
E -->|ja| G["6 Anzeige leeren<br/>(Fenster bleibt offen)"]
|
||||
G --> T
|
||||
G --> H["7 Sitzung beenden:<br/>Fenster schließt"]
|
||||
|
||||
style G fill:#e9f5e9,stroke:#2b8a3e
|
||||
```
|
||||
|
||||
## Was geprüft wird
|
||||
|
||||
Die Tests liegen in `Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_anzeige.py` (Anzeigetext, Fenster öffnen),
|
||||
`tests/test_eigentuemer_korrektur.py` (Korrekturlogik, Korrektur-CSV) und `tests/test_eigentuemer_tab.py`
|
||||
(Sitzung, Korrektur im Tab).
|
||||
|
||||
| # | Schritt | Wird geprüft durch | Ebene |
|
||||
|---|---|---|---|
|
||||
| 2 | Sitzung beginnen: leeres Fenster mit Rahmen, nie Vollbild | `test_sitzung_beginnen_oeffnet_leeres_fenster_mit_rahmen`, `test_normales_fenster_in_standardgroesse` | Mock |
|
||||
| 2 | Lage des Fensters gilt für die nächste Sitzung | `test_lage_gilt_fuer_naechste_sitzung`, `test_gemerkte_lage_wird_wiederhergestellt`, `test_unbrauchbare_lage_ergibt_standardgroesse` | Mock |
|
||||
| 3 | „Daten anzeigen“ beginnt bei Bedarf die Sitzung | `test_daten_anzeigen_beginnt_sitzung_bei_bedarf`, `test_daten_anzeigen_gibt_auswahl_weiter` | Mock |
|
||||
| 3 | Ohne Auswahl nur ein Hinweis | `test_daten_anzeigen_ohne_auswahl` | Mock |
|
||||
| 3 | Inhalt: Name, Anschrift, E-Mail; mehrere Einträge | `test_name_anschrift_email`, `test_mehrere_eintraege_getrennt` | Mock |
|
||||
| 3 | Keine internen Angaben für den Eigentümer | `test_keine_internen_angaben` | Mock |
|
||||
| 3 | Fehlende E-Mail ausdrücklich nennen | `test_fehlende_email_wird_genannt` | Mock |
|
||||
| 5 | Nur echte Änderungen, Leeren zählt | `test_nur_echte_aenderungen`, `test_feld_leeren_ist_aenderung`, `test_feldwerte` | Mock |
|
||||
| 5 | Korrektur festhalten und sofort anzeigen | `test_korrektur_wird_festgehalten_und_angezeigt`, `test_wende_an` | Mock |
|
||||
| 5 | Unverändert oder abgebrochen: nichts schreiben | `test_ohne_aenderung_nichts_schreiben`, `test_abbruch_nichts_schreiben` | Mock |
|
||||
| 5 | Korrektur-CSV: Kopfzeile, BOM, anhängen | `test_neue_datei_mit_kopfzeile_und_bom`, `test_anhaengen_ohne_zweite_kopfzeile`, `test_ohne_aenderung_keine_datei` | Mock |
|
||||
| 5 | Pfad neben der Eigentümerdatei, sonst Rückfrage | `test_textdatei_provider`, `test_ogr_provider`, `test_keine_csv`, `test_vorschlag_neben_der_eigentuemerdatei`, `test_ohne_csv_quelle_wird_gefragt` | Mock |
|
||||
| 5 | Schreibfehler | `test_schreibfehler_wird_weitergereicht`, `test_schreibfehler_warnung_und_anzeige_unveraendert` | Mock |
|
||||
| 5 | Ohne Anzeige keine Korrektur | `test_ohne_anzeige_keine_korrektur` | Mock |
|
||||
| 5 | Pfad der Korrektur-Datei unter den Knöpfen | `test_ohne_eigentuemerdatei`, `test_pfad_neben_der_eigentuemerdatei`, `test_ohne_csv_quelle_wird_abgefragt`, `test_gewaehlter_pfad_wird_angezeigt` | Mock |
|
||||
| 6 | Anzeige leeren, Fenster bleibt offen | `test_anzeige_leeren_laesst_fenster_offen`, `test_leer_nur_platzhalter` | Mock |
|
||||
| 7 | Sitzung beenden bzw. Fenster von außen geschlossen | `test_sitzung_beenden_schliesst_fenster`, `test_von_aussen_geschlossen_beendet_sitzung` | Mock |
|
||||
| — | Keine Personendaten auf der Konsole | `test_schreibt_nichts_auf_die_konsole` | Mock |
|
||||
| — | Sieht das in QGIS richtig aus, auf zwei Bildschirmen? | manueller Test | manuell |
|
||||
|
||||
Ebene: `Mock` (ohne QGIS, Sekunden) · `QGIS` (gegen echtes QGIS) · `manuell` (Mensch in QGIS).
|
||||
|
||||
## Fachliche Sonderfälle
|
||||
|
||||
| Sonderfall | Kommt vor bei | Wird geprüft durch |
|
||||
|---|---|---|
|
||||
| Nur ein Bildschirm (Notebook) | Termin ohne zweiten Monitor, Ausprobieren | `test_normales_fenster_in_standardgroesse` (immer mit Rahmen, verdeckt QGIS nie ausweglos) |
|
||||
| Eheleute oder Miteigentümer erscheinen gemeinsam | mehrere Einträge auf einmal anzeigen und einzeln korrigieren | `test_mehrere_eintraege_getrennt`, `test_korrektur_wird_festgehalten_und_angezeigt` |
|
||||
| Eigentümer hat keine E-Mail hinterlegt | häufig; soll beim Termin ergänzt werden | `test_fehlende_email_wird_genannt` |
|
||||
| Neue Anschrift mit Komma („Am Anger 3, Haus B“) | Zusatz zur Hausnummer | `test_neue_datei_mit_kopfzeile_und_bom` |
|
||||
| Eigentümerdatei liegt in einem schreibgeschützten Ordner | Export auf einem Netzlaufwerk ohne Schreibrecht | `test_ohne_csv_quelle_wird_gefragt` (Rückfrage), `test_schreibfehler_warnung_und_anzeige_unveraendert` |
|
||||
| Sonderzeichen oder spitze Klammern in den Daten | Firmennamen | `test_werte_werden_maskiert` |
|
||||
|
||||
## Bewusst nicht getestet
|
||||
|
||||
| Was | Warum | Wie stattdessen abgesichert |
|
||||
|---|---|---|
|
||||
| Wiederherstellen der Lage auf dem zweiten Bildschirm | braucht echte Bildschirme; im Mock-Modus gibt es keine | Aufruf mit Attrappe geprüft, manueller Test mit zwei Bildschirmen |
|
||||
| Korrekturdialog mit echten Eingabefeldern | im Mock-Modus gibt es keine Widgets; die Vorbelegung (`feldwerte`) und die Auswertung sind als reine Funktionen getestet | manueller Test |
|
||||
| Schriftgröße und Lesbarkeit der Anzeige | Geschmack und Bildschirmgröße | manueller Test im Termin |
|
||||
|
||||
## Bekannte Lücken
|
||||
|
||||
| Lücke | Auswirkung | Issue |
|
||||
|---|---|---|
|
||||
| Wiederherstellen der Lage in der nächsten Sitzung ist in QGIS noch nicht bestätigt | Das Fenster erscheint dann wieder auf dem Hauptbildschirm und muss erneut verschoben werden – lästig, aber gefahrlos | Verfahrensgebiet #56 |
|
||||
| Die Lage wird nur bis zum Neustart von QGIS gemerkt | nach jedem Start einmal verschieben | bei Bedarf eigenes Issue (QSettings) |
|
||||
| Eine neue Suche leert die Anzeige nicht von selbst | Wer „Anzeige leeren“ vergisst, zeigt dem nächsten Eigentümer noch die vorherigen Daten | bewusst so (Bearbeiter entscheidet); bei Bedarf eigenes Issue |
|
||||
@@ -0,0 +1,88 @@
|
||||
# Testkonzept: Eigentümersuche im Tab „Eigentümer“
|
||||
|
||||
Plugin: `sn_verfahrensgebiet` · Stand: 06.10.2026 · Pflege: bei jeder Änderung an diesem Ablauf
|
||||
|
||||
## Worum es fachlich geht
|
||||
|
||||
Im Termin mit Eigentümern gleicht die Sachbearbeitung die gespeicherten Personendaten ab: Name, Anschrift und
|
||||
E-Mail. Grundlage ist der Serienbriefexport als CSV-Datei, den die Sachbearbeitung von Hand ins Projekt lädt.
|
||||
Sie sucht nach Name und/oder Vorname. Die Trefferliste fasst Einträge derselben Person mit derselben Anschrift
|
||||
zusammen, denn im Export steht eine Person für jedes Eigentumskonto einmal. Dieselbe Person mit einer anderen
|
||||
Anschrift bleibt ein eigener Eintrag. Damit fällt eine abweichende Anschrift sofort auf. Verstorbene und
|
||||
Rechtspersonen sind in der Liste gekennzeichnet:
|
||||
verstorben als Hinweis (`PER_VERSTORBEN` = 1), die Art der Person als Rohwert von `PER_RECHTSPERSON`
|
||||
(0, 1, 5 oder 9; die Bedeutung der Werte wird später entschlüsselt).
|
||||
|
||||
Die Trefferliste sieht nur die Sachbearbeitung. Wie die gewählten Einträge dem Eigentümer angezeigt und korrigiert
|
||||
werden, beschreibt [`verfahrensgebiet-eigentuemer-anzeige.md`](verfahrensgebiet-eigentuemer-anzeige.md).
|
||||
|
||||
## Der Ablauf
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["1 Anwender lädt den Serienbriefexport<br/>als CSV-Layer ins Projekt"] --> B["2 Eigentümerdatei wählen<br/>(nur Layer mit Nachname und Vorname)"]
|
||||
B --> C{"3 Eigentümerdatei<br/>gewählt?"}
|
||||
C -->|nein| D["Hinweis: CSV laden und wählen"]
|
||||
C -->|ja| E{"4 Name oder Vorname<br/>eingegeben?"}
|
||||
E -->|nein| F["Hinweis: Namen eingeben"]
|
||||
E -->|ja| G["5 Einträge suchen<br/>(Teilwort, Groß-/Kleinschreibung<br/>und Umlaute egal)"]
|
||||
G --> H["6 Gleiche Person mit gleicher<br/>Anschrift zusammenfassen"]
|
||||
H --> I{"7 Treffer?"}
|
||||
I -->|nein| J["Hinweis: keine Einträge<br/>(ohne den Namen zu wiederholen)"]
|
||||
I -->|ja| K["8 Trefferliste mit Anschrift, E-Mail,<br/>Rechtsperson-Wert, verstorben;<br/>Mehrfachauswahl"]
|
||||
|
||||
style D fill:#fff4e6,stroke:#d9822b
|
||||
style F fill:#fff4e6,stroke:#d9822b
|
||||
```
|
||||
|
||||
## Was geprüft wird
|
||||
|
||||
Die Tests liegen in `Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_suche.py` (Suchlogik),
|
||||
`tests/test_eigentuemer_tab.py` (Bedienung, Trefferliste) und `tests/test_verfahrensgebiet_dialoge.py`
|
||||
(gemeinsame Auswahltabelle).
|
||||
|
||||
| # | Schritt | Wird geprüft durch | Ebene |
|
||||
|---|---|---|---|
|
||||
| 2 | Nur Layer mit Nachname und Vorname, auch mit BOM oder anderer Schreibweise | `test_layer_mit_name_und_vorname_ist_eigentuemerlayer`, `test_eigentuemerlayer_im_projekt` | Mock |
|
||||
| 3 | Keine Eigentümerdatei gewählt | `test_ohne_eigentuemerdatei_warnung` | Mock |
|
||||
| 3 | Layer ohne die nötigen Spalten | `test_layer_ohne_pflichtspalten` | Mock |
|
||||
| 4 | Ohne Eingabe keine Komplettliste | `test_ohne_eingabe_fehler`, `test_suchfehler_als_warnung` | Mock |
|
||||
| 5 | Teilwort, Groß-/Kleinschreibung | `test_teilstring_ohne_gross_kleinschreibung` | Mock |
|
||||
| 5 | Umlaute und ß | `test_umlaute_und_eszett` | Mock |
|
||||
| 6 | Zusammenfassen, Konten und E-Mails sammeln | `test_gleiche_person_gleiche_anschrift_zusammengefasst` | Mock |
|
||||
| 6 | Andere Anschrift bleibt eigener Eintrag | `test_andere_anschrift_eigener_treffer` | Mock |
|
||||
| 7 | Kein Treffer, Meldung ohne Namen | `test_kein_treffer_ohne_namen_in_meldung` | Mock |
|
||||
| 8 | Trefferliste öffnen, alte ersetzen | `test_treffer_oeffnen_trefferliste_und_ersetzen_die_alte` | Mock |
|
||||
| 8 | Spalten der Trefferliste, Kennzeichen | `test_trefferzeile_mit_hinweis`, `test_kennzeichen_verstorben`, `test_rechtsperson_als_rohwert` | Mock |
|
||||
| 8 | Ausgewählte Einträge, auch nach Umsortieren | `test_ausgewaehlte_eigentuemer`, `test_auswahl_nach_umsortieren` | Mock |
|
||||
| 8 | Suchfeld in der Trefferliste | `test_suchfilter_ueber_alle_spalten` | Mock |
|
||||
| — | Keine Personendaten auf der Konsole | `test_suche_gibt_nichts_aus` | Mock |
|
||||
| — | Sieht das in QGIS richtig aus? | manueller Test | manuell |
|
||||
|
||||
Ebene: `Mock` (ohne QGIS, Sekunden) · `QGIS` (gegen echtes QGIS) · `manuell` (Mensch in QGIS).
|
||||
|
||||
## Fachliche Sonderfälle
|
||||
|
||||
| Sonderfall | Kommt vor bei | Wird geprüft durch |
|
||||
|---|---|---|
|
||||
| Eine Person mit mehreren Eigentumskonten | Regelfall im Serienbriefexport | `test_gleiche_person_gleiche_anschrift_zusammengefasst` |
|
||||
| Schreibweise weicht ab (Groß-/Kleinschreibung, Leerzeichen) | Handeingaben über Jahre | `test_gleiche_person_gleiche_anschrift_zusammengefasst` |
|
||||
| `Müller` gesucht, `Mueller` gespeichert | ältere Datenbestände | `test_umlaute_und_eszett` |
|
||||
| PLZ ohne führende Null (`1067`) | QGIS erkennt beim CSV-Laden die Spalte als Zahl | `test_plz_mit_fuehrender_null` |
|
||||
| `PER_VERSTORBEN` als Text oder als Zahl gelesen | QGIS erkennt beim CSV-Laden die Spalte als Zahl | `test_kennzeichen_verstorben` |
|
||||
| Eine Person mit verschiedenen `PER_RECHTSPERSON`-Werten | mehrere Konten mit unterschiedlicher Erfassung | `test_rechtsperson_als_rohwert` (Werte werden gesammelt) |
|
||||
| Leere Felder bzw. QGIS-NULL | unvollständige Datensätze | `test_kennzeichen_verstorben`, `test_rechtsperson_als_rohwert` |
|
||||
| Rechtsperson ohne Vornamen (z. B. Gemeinde) | Körperschaften als Eigentümer | `test_name_und_anschrift`, `test_rechtsperson_als_rohwert` |
|
||||
|
||||
## Bewusst nicht getestet
|
||||
|
||||
| Was | Warum | Wie stattdessen abgesichert |
|
||||
|---|---|---|
|
||||
| Aufbau von Trefferfenster und Auswahltabelle mit echten Qt-Widgets | im Mock-Modus gibt es keine Widgets; die Filter- und Zuordnungslogik ist als reine Funktion getestet | manueller Test in QGIS |
|
||||
| Echter Serienbriefexport | personenbezogen, gehört nicht ins Repository | erfundene Testzeilen mit der Kopfzeile der Blanko-Vorlage aus dem Issue |
|
||||
|
||||
## Bekannte Lücken
|
||||
|
||||
| Lücke | Auswirkung | Issue |
|
||||
|---|---|---|
|
||||
| Der manuelle QGIS-Test steht aus, auch für den Landkreis-Dialog, dessen Tabelle jetzt aus der gemeinsamen Funktion kommt | Ein Fehler beim Herauslösen der Tabelle bliebe in beiden Dialogen unbemerkt | Verfahrensgebiet #56 |
|
||||
@@ -0,0 +1,84 @@
|
||||
# Testkonzept: Flurstückssuche im Tab „Eigentümer“
|
||||
|
||||
Plugin: `sn_verfahrensgebiet` · Stand: 06.10.2026 · Pflege: bei jeder Änderung an diesem Ablauf
|
||||
|
||||
## Worum es fachlich geht
|
||||
|
||||
Im Termin mit einem Eigentümer soll die Sachbearbeitung ein Flurstück schnell auf der Karte zeigen können.
|
||||
Sie gibt Gemarkung und Flurstücksnummer ein, das Plugin wählt das Flurstück im geladenen Flurstückslayer aus
|
||||
und springt dorthin. Gesucht wird nur in den Flurstücken, die vorher mit dem Verfahrensgebiet aus ALKIS geladen
|
||||
wurden. So muss im Tab keine Gemarkung aus ganz Sachsen ausgewählt werden.
|
||||
|
||||
Die Eigentümersuche im selben Tab beschreibt [`verfahrensgebiet-eigentuemersuche.md`](verfahrensgebiet-eigentuemersuche.md).
|
||||
|
||||
## Der Ablauf
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["1 Anwender gibt Gemarkung<br/>und Flurstücksnummer ein"] --> B{"2 Flurstückslayer<br/>im Projekt?"}
|
||||
B -->|nein| C["Hinweis: zuerst Verfahrensgebiet<br/>und Flurstücke aus ALKIS laden"]
|
||||
B -->|ja| D{"3 Flurstücksnummer lesbar?<br/>z. B. 562 oder 12/3"}
|
||||
D -->|nein| E["Hinweis zur Schreibweise"]
|
||||
D -->|ja| F{"4 Gemarkung als Nummer<br/>oder als Name?"}
|
||||
F -->|Nummer| H["5 Flurstücke vergleichen"]
|
||||
F -->|Name| G{"Gemarkungslayer geladen<br/>und Name darin?"}
|
||||
G -->|nein| E2["Hinweis: Nummer eingeben<br/>oder Gemarkungen laden"]
|
||||
G -->|ja| H
|
||||
H --> I{"6 Treffer?"}
|
||||
I -->|nein| J["Hinweis: nicht gefunden"]
|
||||
I -->|ja| K["7 Treffer auswählen,<br/>hinzoomen, aufblinken"]
|
||||
|
||||
style C fill:#fff4e6,stroke:#d9822b
|
||||
style E fill:#fff4e6,stroke:#d9822b
|
||||
style E2 fill:#fff4e6,stroke:#d9822b
|
||||
```
|
||||
|
||||
## Was geprüft wird
|
||||
|
||||
Die Tests liegen in `Plugin_SN_Verfahrensgebiet/tests/test_flurstueck_suche.py` (Suchlogik) und
|
||||
`tests/test_eigentuemer_tab.py` (Bedienung im Tab).
|
||||
|
||||
| # | Schritt | Wird geprüft durch | Ebene |
|
||||
|---|---|---|---|
|
||||
| — | Tab erscheint nach „Bearbeitung“ | `test_tab_ist_im_dockwidget_eingetragen` | Mock |
|
||||
| 2 | Kein Flurstückslayer: Suche bricht ab | `test_fehlender_flurstueckslayer_bricht_ab` | Mock |
|
||||
| 2 | … und der Hinweis kommt als Dialog | `test_ohne_flurstueckslayer_erscheint_hinweisdialog` | Mock |
|
||||
| 3 | Zähler und Nenner lesen, führende Nullen | `test_flurstuecksnummer_mit_und_ohne_nenner` | Mock |
|
||||
| 3 | Unlesbare Nummer abweisen | `test_ungueltige_flurstuecksnummer`, `test_eingabefehler_als_warnung` | Mock |
|
||||
| 4 | Gemarkungsnummer, auch ohne Nullen oder als langer Schlüssel | `test_gemarkungsnummer_aus_ziffern` | Mock |
|
||||
| 4 | Gemarkungsname, auch mehrfach vorkommend | `test_gemarkungsname_ueber_gemarkungslayer` | Mock |
|
||||
| 4 | Name ohne Gemarkungslayer oder unbekannt | `test_gemarkungsname_ohne_layer_oder_unbekannt` | Mock |
|
||||
| 5 | Flurstückskennzeichen zerlegen | `test_kennzeichen_zerlegen` | Mock |
|
||||
| 5 | Layer ohne Kennzeichenfeld | `test_layer_ohne_kennzeichenfeld` | Mock |
|
||||
| 6 | Mit Nenner genau ein Treffer | `test_mit_nenner_genau_ein_treffer` | Mock |
|
||||
| 6 | Ohne Nenner alle mit diesem Zähler, nur in der Gemarkung | `test_ohne_nenner_alle_mit_diesem_zaehler` | Mock |
|
||||
| 6 | Kein Treffer | `test_kein_treffer` (Logik), `test_kein_treffer` (Tab) | Mock |
|
||||
| 7 | Auswahl, Zoom, Aufblinken | `test_treffer_werden_ausgewaehlt_und_angezoomt` | Mock |
|
||||
| 7 | Auswahl auch ohne Kartenansicht | `test_ohne_kartenansicht_bleibt_auswahl` | Mock |
|
||||
| — | Sieht das in QGIS richtig aus? | manueller Test | manuell |
|
||||
|
||||
Ebene: `Mock` (ohne QGIS, Sekunden) · `QGIS` (gegen echtes QGIS) · `manuell` (Mensch in QGIS).
|
||||
|
||||
## Fachliche Sonderfälle
|
||||
|
||||
| Sonderfall | Kommt vor bei | Wird geprüft durch |
|
||||
|---|---|---|
|
||||
| Buchstaben-Nenner (`12/a`) | ältere Flurstücke | `test_mit_nenner_genau_ein_treffer`, `test_kennzeichen_zerlegen` |
|
||||
| Gleichnamige Gemarkungen | verbreitete Ortsnamen in mehreren Landkreisen | `test_gemarkungsname_ueber_gemarkungslayer` |
|
||||
| Gemarkungsschlüssel mit Landesnummer (`140268`) | kopiert aus anderen Programmen | `test_gemarkungsnummer_aus_ziffern` |
|
||||
| Flurstücke mit leerem Kennzeichen | unvollständige Daten | `test_ohne_nenner_alle_mit_diesem_zaehler` (Feature ohne Kennzeichen wird übersprungen) |
|
||||
| Im Flurstückslayer ist schon etwas ausgewählt | Verfahrensgebiet aus der Flurstücksauswahl bilden | `test_treffer_werden_ausgewaehlt_und_angezoomt`: Die Suche ersetzt die Auswahl, wie die Suchen in QGIS selbst |
|
||||
|
||||
## Bewusst nicht getestet
|
||||
|
||||
| Was | Warum | Wie stattdessen abgesichert |
|
||||
|---|---|---|
|
||||
| Zoomen und Aufblinken in der Kartenansicht | QGIS-Funktionen (`zoomToSelected`, `flashFeatureIds`), im Mock-Modus gibt es keine Karte | manueller Test in QGIS |
|
||||
| Aussehen des Tabs | nicht sinnvoll automatisiert prüfbar | manueller Test |
|
||||
| Echter Flurstückslayer aus dem ALKIS-WFS | kein Netzwerk in Tests | Aufbau des Kennzeichens in `../wissen/alkis_objektarten.md`, manueller Test |
|
||||
|
||||
## Bekannte Lücken
|
||||
|
||||
| Lücke | Auswirkung | Issue |
|
||||
|---|---|---|
|
||||
| Der manuelle Test in QGIS steht aus | Zoom auf sehr kleine Flurstücke und das Aufblinken sind nicht gesehen | Verfahrensgebiet #56 |
|
||||
Reference in New Issue
Block a user