Tab „Eigentümer“ mit Flurstückssuche (#56)
Gemarkung (Name oder Nummer) und Flurstücksnummer eingeben, die Treffer werden im Layer „Flurstücke“ ausgewählt, angezoomt und kurz hervorgehoben. Verglichen wird das flurstueckskennzeichen, Gemarkungsnamen werden über den Layer „Gemarkungen“ aufgelöst. Ohne Layer „Flurstücke“ weist ein Dialog darauf hin, zuerst Verfahrensgebiet und Flurstücke zu laden. Erster Schritt von #56; Eigentümersuche und Anzeigefenster folgen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
"""Tests für den Tab „Eigentümer“ – Flurstückssuche (#56)."""
|
||||
|
||||
import sys
|
||||
import types
|
||||
import unittest
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
if "qgis" not in sys.modules:
|
||||
qgis_mod = types.ModuleType("qgis")
|
||||
qgis_utils = types.ModuleType("qgis.utils")
|
||||
qgis_utils.iface = types.SimpleNamespace()
|
||||
qgis_utils.plugins = {}
|
||||
qgis_mod.utils = qgis_utils
|
||||
sys.modules["qgis"] = qgis_mod
|
||||
sys.modules["qgis.utils"] = qgis_utils
|
||||
|
||||
from sn_verfahrensgebiet.ui.tabs import eigentuemer_tab as et
|
||||
from sn_verfahrensgebiet.ui.tabs.eigentuemer_tab import EigentuemerTab
|
||||
from sn_verfahrensgebiet.functions.flurstueck_suche import (
|
||||
FlurstueckSucheFehler,
|
||||
KeinFlurstueckslayer,
|
||||
SuchErgebnis,
|
||||
)
|
||||
|
||||
|
||||
def _tab(gemarkung="0268", flurstueck="562"):
|
||||
tab = EigentuemerTab.__new__(EigentuemerTab)
|
||||
tab.gemarkung_edit = types.SimpleNamespace(text=lambda: gemarkung)
|
||||
tab.flurstueck_edit = types.SimpleNamespace(text=lambda: flurstueck)
|
||||
return tab
|
||||
|
||||
|
||||
@patch.object(et, "success")
|
||||
@patch.object(et, "info")
|
||||
@patch.object(et, "warning")
|
||||
@patch.object(et, "show_info_dialog")
|
||||
class TestFlurstueckSuchen(unittest.TestCase):
|
||||
|
||||
def test_ohne_flurstueckslayer_erscheint_hinweisdialog(self, dialog, warnung, hinweis, erfolg):
|
||||
"""Prüft, dass ohne Layer „Flurstücke“ ein Dialog zum Laden von Verfahrensgebiet und Flurstücken erscheint."""
|
||||
with patch.object(et, "flurstueck_suchen", side_effect=KeinFlurstueckslayer()):
|
||||
_tab()._on_flurstueck_suchen()
|
||||
dialog.assert_called_once()
|
||||
self.assertIn("Flurstücke aus ALKIS laden", dialog.call_args[0][1])
|
||||
warnung.assert_not_called()
|
||||
erfolg.assert_not_called()
|
||||
|
||||
def test_eingabefehler_als_warnung(self, dialog, warnung, hinweis, erfolg):
|
||||
"""Prüft, dass eine ungültige Eingabe als Warnung in der Meldungsleiste erscheint, nicht als Dialog."""
|
||||
with patch.object(et, "flurstueck_suchen", side_effect=FlurstueckSucheFehler("falsch")):
|
||||
_tab()._on_flurstueck_suchen()
|
||||
warnung.assert_called_once_with("Flurstückssuche", "falsch")
|
||||
dialog.assert_not_called()
|
||||
|
||||
def test_kein_treffer(self, dialog, warnung, hinweis, erfolg):
|
||||
"""Prüft, dass ohne Treffer ein Hinweis erscheint und keine Auswahl gesetzt wird."""
|
||||
layer = MagicMock()
|
||||
with patch.object(et, "flurstueck_suchen", return_value=SuchErgebnis(layer, [])):
|
||||
_tab(flurstueck="999")._on_flurstueck_suchen()
|
||||
hinweis.assert_called_once()
|
||||
self.assertIn("999", hinweis.call_args[0][1])
|
||||
layer.selectByIds.assert_not_called()
|
||||
|
||||
def test_treffer_werden_ausgewaehlt_und_angezoomt(self, dialog, warnung, hinweis, erfolg):
|
||||
"""Prüft, dass Treffer im Flurstückslayer ausgewählt, angezoomt und gemeldet werden."""
|
||||
layer = MagicMock()
|
||||
layer.name.return_value = "Flurstücke"
|
||||
canvas = MagicMock()
|
||||
with patch.object(et, "flurstueck_suchen", return_value=SuchErgebnis(layer, [1, 2])) as suche, \
|
||||
patch.object(et, "iface", types.SimpleNamespace(mapCanvas=lambda: canvas)):
|
||||
_tab(gemarkung=" Beispielhausen ", flurstueck=" 562 ")._on_flurstueck_suchen()
|
||||
suche.assert_called_once_with("Beispielhausen", "562")
|
||||
layer.selectByIds.assert_called_once_with([1, 2])
|
||||
canvas.zoomToSelected.assert_called_once_with(layer)
|
||||
canvas.flashFeatureIds.assert_called_once_with(layer, [1, 2])
|
||||
erfolg.assert_called_once()
|
||||
self.assertIn("2 Flurstücke", erfolg.call_args[0][1])
|
||||
|
||||
def test_ohne_kartenansicht_bleibt_auswahl(self, dialog, warnung, hinweis, erfolg):
|
||||
"""Prüft, dass die Auswahl auch ohne Kartenansicht gesetzt und gemeldet wird."""
|
||||
layer = MagicMock()
|
||||
with patch.object(et, "flurstueck_suchen", return_value=SuchErgebnis(layer, [7])), \
|
||||
patch.object(et, "iface", types.SimpleNamespace()):
|
||||
_tab()._on_flurstueck_suchen()
|
||||
layer.selectByIds.assert_called_once_with([7])
|
||||
self.assertIn("1 Flurstück", erfolg.call_args[0][1])
|
||||
|
||||
|
||||
class TestDockWidgetTabs(unittest.TestCase):
|
||||
|
||||
def test_tab_ist_im_dockwidget_eingetragen(self):
|
||||
"""Prüft, dass der Tab „Eigentümer“ im DockWidget direkt nach dem Bearbeitungs-Tab steht."""
|
||||
from sn_verfahrensgebiet.ui.dockwidget import DockWidget
|
||||
from sn_verfahrensgebiet.ui.tabs.working_tab import WorkingTab
|
||||
|
||||
self.assertEqual(DockWidget.tabs[:2], [WorkingTab, EigentuemerTab])
|
||||
self.assertEqual(EigentuemerTab.tab_title, "Eigentümer")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user