106 lines
6.8 KiB
Markdown
106 lines
6.8 KiB
Markdown
# Testkonzept: Verfahrensgebiet aus Shape laden
|
|||
|
|
|
||
|
|
Plugin: `sn_verfahrensgebiet` · Stand: 04.09.2026 · Pflege: bei jeder Änderung an diesem Ablauf
|
||
|
|
|
||
|
|
Beispielseite nach [`../vorlagen/testkonzept.md`](../vorlagen/testkonzept.md). Sie zeigt, wie eine Fachperson
|
||
|
|
ohne Blick in den Quelltext beurteilen kann, ob die Tests das Richtige prüfen —
|
||
|
|
siehe [`../leitfaden/06_tests.md`](../leitfaden/06_tests.md) Abschnitt 7.
|
||
|
|
|
||
|
|
## Worum es fachlich geht
|
||
|
|
|
||
|
|
Ein Verfahrensgebiet liegt als Shape-Export aus NoBIS bzw. DAVID vor, meist als ZIP-Datei. Der Anwender wählt
|
||
|
|
diese Datei aus; das Plugin liest daraus das Neuordnungs- und/oder Neuvermessungsgebiet ein, gleicht die Fläche
|
||
|
|
mit den ALKIS-Flurstücken ab und meldet Abweichungen. Eine ZIP-Datei kann mehrere Shapefile-Sätze enthalten —
|
||
|
|
je einen für Neuordnungs- und Neuvermessungsgebiet. Welcher Satz was ist, entscheidet der Wert im Feld `FBSchl`.
|
||
|
|
|
||
|
|
Wenn dieser Schritt schiefgeht, arbeitet das gesamte weitere Verfahren auf einem falschen Gebiet.
|
||
|
|
|
||
|
|
## Der Ablauf
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
flowchart TD
|
||
|
|
A["1 Anwender wählt ZIP oder SHP"] --> B["2 ZIP entpacken,<br/>alle .shp darin finden"]
|
||
|
|
B --> C["3 Jede Datei als Layer laden<br/>und auf Gültigkeit prüfen"]
|
||
|
|
C --> D{"4 Feld FBSchl<br/>vorhanden und bekannt?"}
|
||
|
|
D -->|"901/10110F"| E["Neuordnungsgebiet"]
|
||
|
|
D -->|"901/10120F"| F["Neuvermessungsgebiet"]
|
||
|
|
D -->|"fehlt / unbekannt"| G["Datei überspringen,<br/>Fehler sammeln"]
|
||
|
|
E --> H["5 Flächen desselben Typs<br/>zu einem Layer verschmelzen"]
|
||
|
|
F --> H
|
||
|
|
G --> H
|
||
|
|
H --> I["6 ALKIS-Flurstücke laden,<br/>Flächen vergleichen"]
|
||
|
|
I --> J{"7 Flächen gleich?"}
|
||
|
|
J -->|ja| K["Hinweis: stimmt überein"]
|
||
|
|
J -->|nein| L["Nachfrage:<br/>Detailprüfung oder abbrechen"]
|
||
|
|
L --> M["8 Knickpunktprüfung"]
|
||
|
|
K --> N["9 Layer bleibt im Projekt"]
|
||
|
|
M --> N
|
||
|
|
|
||
|
|
style D fill:#fff4e6,stroke:#d9822b
|
||
|
|
style G fill:#ffe9e9,stroke:#d94b2b
|
||
|
|
```
|
||
|
|
|
||
|
|
## Was geprüft wird
|
||
|
|
|
||
|
|
Alle Tests liegen in `Plugin_SN_Verfahrensgebiet/tests/test_verfahrensgebiet_shape_komplett.py`.
|
||
|
|
|
||
|
|
| # | Schritt | Wird geprüft durch | Ebene |
|
||
|
|
|---|---|---|---|
|
||
|
|
| 1 | Auswahl abgebrochen | `test_dialog_abgebrochen_gibt_none_zurueck` | Mock |
|
||
|
|
| 2 | ZIP nicht entpackbar | `test_zip_fehler_gibt_none_und_warning` | Mock |
|
||
|
|
| 2 | Kein `.shp` im ZIP | `test_kein_shp_in_zip_gibt_none_und_warning` | Mock |
|
||
|
|
| 2 | `.shp` im Wurzel- bzw. Unterordner finden | `test_findet_shp_in_root`, `test_findet_shp_in_unterordner` | Mock |
|
||
|
|
| 2 | Groß-/Kleinschreibung der Dateiendung | `test_case_insensitive_erkennung` | Mock |
|
||
|
|
| 3 | Layer ungültig | `test_invalider_qgslayer_gibt_none_und_warning` | Mock |
|
||
|
|
| 3 | Keine Features / leere Geometrien | `test_keine_features_gibt_none`, `test_leere_geometrien_geben_none` | Mock |
|
||
|
|
| **4** | **Feld `FBSchl` auswerten** | **— keiner** | **—** |
|
||
|
|
| 5 | Verschmelzen zum Einzel-Feature, Attribute übernehmen | `test_attribute_von_erstem_feature_werden_gesetzt`, `test_erfolg_gibt_memory_layer_zurueck` | Mock |
|
||
|
|
| 6 | ALKIS liefert nichts / keine Auswahl | `test_flst_none_aborts`, `test_keine_flurstuecke_selektiert_gibt_warning` | Mock |
|
||
|
|
| 7 | Flächen stimmen überein | `test_flaechen_uebereinstimmung_gibt_info_und_kein_dialog` | Mock |
|
||
|
|
| 7 | Abweichung, Anwender bricht ab | `test_abweichung_abbrechen_gibt_shape_vg_zurueck` | Mock |
|
||
|
|
| 8 | Abweichung, Detailprüfung | `test_abweichung_detailpruefung_ruft_knickpunkt_pruefung_auf` | Mock |
|
||
|
|
| 8 | PunktortTA nicht verfügbar | `test_punktort_ta_none_gibt_shape_vg_zurueck_und_zeigt_fehler` | Mock |
|
||
|
|
| 9 | Layer bleibt bei Erfolg, verschwindet bei Abbruch | `test_shape_vg_bleibt_im_projekt_bei_erfolg`, `test_shape_vg_wird_bei_abbruch_aus_projekt_entfernt` | Mock |
|
||
|
|
| 9 | Temporärer Layer wird immer entfernt | `test_temp_layer_wird_stets_entfernt` | Mock |
|
||
|
|
| — | Sieht das Ergebnis in QGIS richtig aus? | manueller Test | manuell |
|
||
|
|
|
||
|
|
Ebene: `Mock` (ohne QGIS, Sekunden) · `QGIS` (gegen echtes QGIS) · `manuell` (Mensch in QGIS).
|
||
|
|
|
||
|
|
Zusätzlich ist das Zusammenspiel mit dem BROR-Layer (Bau-, Raum- oder Bodenordnungsrecht) abgedeckt, wenn eine
|
||
|
|
VKZ gesetzt ist: `test_bror_geladen_und_zurueckgegeben_wenn_vkz_gesetzt`,
|
||
|
|
`test_bror_wird_vor_shape_vg_ins_projekt_eingefuegt`, `test_verfahrensgebiet_alkis_nicht_aufgerufen_wenn_vkz_leer`,
|
||
|
|
`test_fallback_auf_temp_enriched_wenn_bror_ladeversagen`.
|
||
|
|
|
||
|
|
## Fachliche Sonderfälle
|
||
|
|
|
||
|
|
| Sonderfall | Kommt vor bei | Wird geprüft durch |
|
||
|
|
|---|---|---|
|
||
|
|
| ZIP enthält mehrere Shapefile-Sätze | Export mit Neuordnungs- **und** Neuvermessungsgebiet | — |
|
||
|
|
| Eine von mehreren Dateien im ZIP ist fehlerhaft | gemischte Exporte; die übrigen sollen trotzdem verarbeitet werden | — |
|
||
|
|
| Feldname `FBSchl.` mit Punkt | manche DAVID-Exporte | — |
|
||
|
|
| Feldname in abweichender Groß-/Kleinschreibung | ältere Exporte | — |
|
||
|
|
| Feld `FBSchl` fehlt ganz | Shape ist gar kein Verfahrensgebiet | — |
|
||
|
|
| Unbekannter Wert in `FBSchl` | neuer Schlüssel, den wir noch nicht kennen | — |
|
||
|
|
| ZIP nicht entpackbar, kein `.shp` enthalten | beschädigter oder falscher Export | ja (siehe Tabelle oben) |
|
||
|
|
| Fläche weicht von ALKIS ab | Regelfall bei Grenzänderungen | ja |
|
||
|
|
|
||
|
|
## Bewusst nicht getestet
|
||
|
|
|
||
|
|
| Was | Warum | Wie stattdessen abgesichert |
|
||
|
|
|---|---|---|
|
||
|
|
| Geometrisches Verschmelzen (`unaryUnion`) | QGIS-Funktion, nicht unser Code; im Mock-Modus gibt es keine echte Geometrie | manueller Test in QGIS; künftig QGIS-Test (Stufe 1, `../konzept/07_qgis_tests_plan.md`) |
|
||
|
|
| Aussehen und Beschriftung der Dialoge | nicht sinnvoll automatisiert prüfbar | manueller Test |
|
||
|
|
| Echte ALKIS-WFS-Antworten | kein Netzwerk in Tests; Dienstgrenzen siehe `../wissen/fallstricke.md` | nachgestellte Antworten im Test, plus manueller Test bei Dienständerungen |
|
||
|
|
|
||
|
|
## Bekannte Lücken
|
||
|
|
|
||
|
|
| Lücke | Auswirkung | Issue |
|
||
|
|
|---|---|---|
|
||
|
|
| **Schritt 4 (`_ermittle_gebietstyp_aus_fbschl`) hat keinen einzigen Test** — weder für die gültigen Werte `901/10110F` und `901/10120F`, noch für fehlendes Feld, unbekannten Wert, `FBSchl.` mit Punkt oder abweichende Groß-/Kleinschreibung | Ein Shape wird stillschweigend dem falschen Gebietstyp zugeordnet oder grundlos abgewiesen. Genau dieser Fall war Gegenstand von PR #44/#45 — die tolerante Feldsuche wurde eingebaut, aber nie durch einen Test abgesichert. | anzulegen |
|
||
|
|
| Mehrere Shapefile-Sätze in einer ZIP-Datei werden nicht als Fall getestet | Der dokumentierte Hauptzweck der Mehrfachverarbeitung ist ungeprüft; ein Regressionsfehler bliebe unbemerkt | anzulegen |
|
||
|
|
| Fehlersammlung über mehrere Dateien (eine fehlerhafte Datei bricht die übrigen nicht ab) ist nicht getestet | Ein Export mit einer defekten Datei könnte komplett abgewiesen werden, statt die guten Dateien zu verarbeiten | anzulegen |
|
||
|
|
|
||
|
|
> Diese drei Lücken wurden am 04.09.2026 beim Erstellen dieser Seite gefunden — durch den bloßen Abgleich des
|
||
|
|
> fachlichen Ablaufs mit der Testliste. Sie sind gegen `origin/unstable` geprüft, nicht nur gegen den lokalen
|
||
|
|
> Klon. Das ist der Zweck dieser Seite.
|