Erster Stand des Repositories AG_QGIS/Projektwissen (bisher Arbeitstitel "Workspace", ADR 0006). Der lokale Ordner heisst weiter AG_QGIS, weil darin auch die Plugin-Klone liegen. Git verbindlich (ADR 0007), aus dem bisherigen Wiki-Konzept entwickelt: - docs/leitfaden/05_git_arbeitsweise.md mit Kanal-Kette, Branch-Namen und Gitea-Branch-Schutz. - Der Einstiegspunkt eines Fixes richtet sich nach dem Kanal, in dem der Fehler sitzt; ein Fix an testing oder stable ist erst mit der Rueckfuehrung nach unten abgeschlossen. Das fehlte bisher. - Der stabile Kanal heisst stable, nicht main: der Release-Workflow in Repository:hidden/workflows fuehrt git checkout "$CHANNEL" aus, der Branchname muss also dem Kanalnamen entsprechen. Er existiert in keinem Plugin-Repo und ist vom Maintainer anzulegen. - Der Mensch drueckt ab: .claude/settings.json sperrt push, merge, tag. - scripts/hallo.py und /hallo holen den Stand aller Klone, per Fast-Forward wo gefahrlos; nie mergen, stashen oder verwerfen. Ticketzugriff: - scripts/gitea.py liest Issues, Kommentare und PRs ueber die oeffentliche API, ohne Token, nur GET. Schreibendes nur als Entwurf in entwuerfe/. - Skill sn-ticket. Tests (ADR 0009): - docs/leitfaden/06_tests.md: Testebenen, Testpflicht, und wie eine Fachperson beurteilt, ob Tests fachlich sinnvoll sind. - scripts/testkatalog.py erzeugt docs/tests/testkatalog.md per ast-Parsing, ohne Import und ohne QGIS. Befund: nur 100 von 332 Tests haben einen Docstring, sn_basis keinen einzigen von 87. - Vorlage und erste Testkonzept-Seite mit Mermaid. Dabei gefunden und gegen origin geprueft: _ermittle_gebietstyp_aus_fbschl hat keinen Test, obwohl PR #44/#45 genau diese Funktion tolerant gemacht hat. - docs/konzept/07_qgis_tests_plan.md: Stufenplan fuer Tests gegen echtes QGIS. Dabei aufgefallen: QGIS 3.40 ist seit Januar 2026 End of Life, qgis_min steht aber noch darauf. Werkzeuge (ADR 0008): - 04_werkzeuge_einrichten.md nur noch Claude Code als CLI und in VS Code. - .vscode/ entfernt, brauchbare Einstellungen als persoenliche Vorlage. Ausserdem: README als Einstieg neu aufgebaut, Mermaid-Diagramm in schnittstellen.md repariert (unmaskierte Klammern, rendert seither nicht). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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.
|