Verfahrensgebietsprüfung auf Knickpunkte umgestellt

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-05-05 19:46:08 +02:00
co-authored by Copilot
parent 8730e1bf96
commit e344a5ad4a
6 changed files with 1104 additions and 61 deletions
+93 -31
View File
@@ -17,9 +17,10 @@ Abbruchpfade:
- Progress-Abbruch nach Schritt 1 → sofortiger sauberer Rückgabestatus
Flächenvergleich:
- Übereinstimmung → show_info_dialog, keine Umringsprüfung
- Abweichung + Nein → kein Umringsprüfungs-Aufruf
- Abweichung + Ja → umringspruefung aufgerufen, Ergebnislayer ins Projekt
- Übereinstimmung → show_info_dialog, keine Detailprüfung
- Abweichung + abbrechen → kein Detailprüfungs-Aufruf
- Abweichung + als_vg_laden → BROR umbenannt, als enriched_layer zurückgegeben
- Abweichung + detailpruefung → lade_punktort_ta + knickpunkt_pruefung aufgerufen
Cleanup:
- BROR-Layer wird bei Erfolg NICHT entfernt
@@ -141,8 +142,10 @@ _PATCH_GET_VAR = f"{_MOD}.get_variable"
_PATCH_PROGRESS = f"{_MOD}.create_progress_dialog"
_PATCH_VERGLEICHE = f"{_MOD}._vergleiche_flaechen"
_PATCH_SHOW_INFO = f"{_MOD}.show_info_dialog"
_PATCH_ASK_YES_NO = f"{_MOD}.ask_yes_no"
_PATCH_UMRING = f"{_MOD}.umringspruefung"
_PATCH_ASK_DIALOG = f"{_MOD}.ask_detailpruefung_oder_vg_laden"
_PATCH_GP_ALKIS = f"{_MOD}.lade_punktort_ta"
_PATCH_KNICK = f"{_MOD}.knickpunkt_pruefung"
_PATCH_EXTRAHIERE = f"{_MOD}._extrahiere_knickpunkte"
# ---------------------------------------------------------------------------
@@ -448,12 +451,12 @@ class TestVerfahrensgebietAlkisKomplett(unittest.TestCase):
mock_vkz.assert_called_once_with(enriched, "")
# ------------------------------------------------------------------ #
# Flächenvergleich – Abweichung + Nein
# Flächenvergleich – Abweichung + Abbrechen
# ------------------------------------------------------------------ #
@patch(_PATCH_PROGRESS)
@patch(_PATCH_UMRING)
@patch(_PATCH_ASK_YES_NO)
@patch(_PATCH_KNICK)
@patch(_PATCH_ASK_DIALOG)
@patch(_PATCH_VERGLEICHE)
@patch(_PATCH_VKZ)
@patch(_PATCH_GET_VAR)
@@ -463,11 +466,11 @@ class TestVerfahrensgebietAlkisKomplett(unittest.TestCase):
@patch(_PATCH_GEM)
@patch(_PATCH_FLST)
@patch(_PATCH_VG_ALKIS)
def test_flaechen_abweichung_nein_kein_umring(
def test_flaechen_abweichung_abbrechen_kein_detailcheck(
self, mock_vg, mock_flst, mock_gem, mock_proj, mock_select,
mock_erstelle, mock_get_var, mock_vkz, mock_vergl, mock_ask, mock_umring, mock_prog,
mock_erstelle, mock_get_var, mock_vkz, mock_vergl, mock_ask, mock_knick, mock_prog,
):
"""Abweichung + Nein → umringspruefung wird NICHT aufgerufen."""
"""Abweichung + Abbrechen → knickpunkt_pruefung wird NICHT aufgerufen."""
mock_proj.instance.return_value = _DummyProject()
vg_layer = _make_layer(name="BauRaumOrdnungsrecht (ALKIS)")
flst_layer = _make_layer(name="Flurstücke")
@@ -480,23 +483,22 @@ class TestVerfahrensgebietAlkisKomplett(unittest.TestCase):
mock_erstelle.return_value = (enriched, 3, 0)
mock_get_var.return_value = ""
mock_vergl.return_value = (1000.0, 800.0, False)
mock_ask.return_value = False
mock_ask.return_value = "abbrechen"
mock_prog.return_value = _make_progress_mock()
result_enriched, _, _, status = verfahrensgebiet_alkis_komplett(None)
mock_umring.assert_not_called()
mock_knick.assert_not_called()
self.assertIs(result_enriched, enriched)
self.assertEqual(status, LoadStatus.FIRST)
# ------------------------------------------------------------------ #
# Flächenvergleich – Abweichung + Ja → Umringsprüfung
# Flächenvergleich – Abweichung + Als VG laden
# ------------------------------------------------------------------ #
@patch(_PATCH_PROGRESS)
@patch(_PATCH_SHOW_INFO)
@patch(_PATCH_UMRING)
@patch(_PATCH_ASK_YES_NO)
@patch(_PATCH_KNICK)
@patch(_PATCH_ASK_DIALOG)
@patch(_PATCH_VERGLEICHE)
@patch(_PATCH_VKZ)
@patch(_PATCH_GET_VAR)
@@ -506,20 +508,18 @@ class TestVerfahrensgebietAlkisKomplett(unittest.TestCase):
@patch(_PATCH_GEM)
@patch(_PATCH_FLST)
@patch(_PATCH_VG_ALKIS)
def test_flaechen_abweichung_ja_startet_umringspruefung(
def test_flaechen_abweichung_als_vg_laden(
self, mock_vg, mock_flst, mock_gem, mock_proj, mock_select,
mock_erstelle, mock_get_var, mock_vkz, mock_vergl, mock_ask,
mock_umring, mock_info, mock_prog,
mock_erstelle, mock_get_var, mock_vkz, mock_vergl, mock_ask, mock_knick, mock_prog,
):
"""Abweichung + Ja → umringspruefung aufgerufen, Ergebnislayer ins Projekt,
Abschlussmeldung mit Konfliktanzahl."""
"""Abweichung + Als VG laden → BROR-Layer wird umbenannt und als
enriched_layer zurückgegeben; flst_layer und bror_layer sind None."""
proj_inst = _DummyProject()
mock_proj.instance.return_value = proj_inst
vg_layer = _make_layer(name="BauRaumOrdnungsrecht (ALKIS)")
flst_layer = _make_layer(name="Flurstücke")
enriched = _make_layer(name="Verfahrensgebiet", valid=True)
ergebnis_layer = _make_layer(name="Umringsprüfung", lid="UMRING_L")
vg_layer = _make_layer(name="BauRaumOrdnungsrecht (ALKIS)", lid="BROR_VG")
flst_layer = _make_layer(name="Flurstücke")
enriched = _make_layer(name="Verfahrensgebiet", valid=True)
mock_vg.return_value = (vg_layer, LoadStatus.FIRST, [])
mock_gem.return_value = []
@@ -528,17 +528,79 @@ class TestVerfahrensgebietAlkisKomplett(unittest.TestCase):
mock_erstelle.return_value = (enriched, 3, 0)
mock_get_var.return_value = ""
mock_vergl.return_value = (1000.0, 800.0, False)
mock_ask.return_value = True
mock_umring.return_value = (ergebnis_layer, 4)
mock_ask.return_value = "als_vg_laden"
mock_prog.return_value = _make_progress_mock()
result_enriched, result_flst, result_bror, status = verfahrensgebiet_alkis_komplett(None)
mock_knick.assert_not_called()
# BROR-Layer wird als enriched_layer zurückgegeben
self.assertIs(result_enriched, vg_layer)
self.assertIsNone(result_flst)
self.assertIsNone(result_bror)
self.assertEqual(status, LoadStatus.FIRST)
# Name wurde auf VERF_LAYER_NAME geändert
vg_layer.setName.assert_called()
# ------------------------------------------------------------------ #
# Flächenvergleich – Abweichung + Detailprüfung
# ------------------------------------------------------------------ #
@patch(_PATCH_PROGRESS)
@patch(_PATCH_SHOW_INFO)
@patch(_PATCH_EXTRAHIERE)
@patch(_PATCH_KNICK)
@patch(_PATCH_GP_ALKIS)
@patch(_PATCH_ASK_DIALOG)
@patch(_PATCH_VERGLEICHE)
@patch(_PATCH_VKZ)
@patch(_PATCH_GET_VAR)
@patch(_PATCH_ERSTELLE)
@patch(_PATCH_SELECT)
@patch(_PATCH_PROJECT)
@patch(_PATCH_GEM)
@patch(_PATCH_FLST)
@patch(_PATCH_VG_ALKIS)
def test_flaechen_abweichung_detailpruefung_startet_knickpruefung(
self, mock_vg, mock_flst, mock_gem, mock_proj, mock_select,
mock_erstelle, mock_get_var, mock_vkz, mock_vergl, mock_ask,
mock_gp, mock_knick, mock_extrahiere, mock_info, mock_prog,
):
"""Abweichung + Detailprüfung → lade_punktort_ta + knickpunkt_pruefung
aufgerufen, Ergebnislayer ins Projekt, Abschlussmeldung mit Zählung."""
proj_inst = _DummyProject()
mock_proj.instance.return_value = proj_inst
vg_layer = _make_layer(name="BauRaumOrdnungsrecht (ALKIS)")
flst_layer = _make_layer(name="Flurstücke")
enriched = _make_layer(name="Verfahrensgebiet", valid=True)
punktort_layer = _make_layer(name="PunktortTA", lid="PTA_L")
ergebnis_layer = _make_layer(name="Knickpunktprüfung", lid="KNICK_L")
mock_vg.return_value = (vg_layer, LoadStatus.FIRST, [])
mock_gem.return_value = []
mock_flst.return_value = (flst_layer, LoadStatus.FIRST)
mock_select.return_value = 3
mock_erstelle.return_value = (enriched, 3, 0)
mock_get_var.return_value = ""
mock_vergl.return_value = (1000.0, 800.0, False)
mock_ask.return_value = "detailpruefung"
mock_extrahiere.return_value = [MagicMock(), MagicMock(), MagicMock()] # 3 Knickpunkte
mock_gp.return_value = punktort_layer
mock_knick.return_value = (ergebnis_layer, 2, 1, 0)
mock_prog.return_value = _make_progress_mock()
result_enriched, _, _, status = verfahrensgebiet_alkis_komplett(None)
mock_umring.assert_called_once()
mock_gp.assert_called_once()
mock_knick.assert_called_once()
self.assertIn(ergebnis_layer, proj_inst.added)
mock_info.assert_called_once()
self.assertIn("4", mock_info.call_args[0][1])
self.assertIn("Konfliktstellen", mock_info.call_args[0][1])
# Abschlussmeldung muss Zahlen enthalten
info_text = mock_info.call_args[0][1]
self.assertIn("3", info_text) # Anzahl Knickpunkte
self.assertIn("2", info_text) # identisch
self.assertIn("1", info_text) # kein_pta
self.assertEqual(status, LoadStatus.FIRST)
# ------------------------------------------------------------------ #