102 lines
4.5 KiB
Python
102 lines
4.5 KiB
Python
"""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()
|