157 lines
4.5 KiB
Python
157 lines
4.5 KiB
Python
import sys
|
|
import types
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
if "qgis" not in sys.modules:
|
|
qgis_mod = types.ModuleType("qgis")
|
|
qgis_utils = types.ModuleType("qgis.utils")
|
|
qgis_utils.iface = types.SimpleNamespace(
|
|
mapCanvas=lambda: types.SimpleNamespace(setExtent=lambda _e: None, refresh=lambda: None)
|
|
)
|
|
qgis_utils.plugins = {}
|
|
qgis_mod.utils = qgis_utils
|
|
sys.modules["qgis"] = qgis_mod
|
|
sys.modules["qgis.utils"] = qgis_utils
|
|
|
|
from sn_verfahrensgebiet.ui.tabs.working_tab import WorkingTab, LoadStatus
|
|
|
|
|
|
class _DummyLayer:
|
|
def __init__(self, valid=True, layer_id="L1"):
|
|
self._valid = valid
|
|
self._id = layer_id
|
|
|
|
def isValid(self):
|
|
return self._valid
|
|
|
|
def id(self):
|
|
return self._id
|
|
|
|
def extent(self):
|
|
return object()
|
|
|
|
|
|
class _DummyProject:
|
|
def __init__(self):
|
|
self.added = []
|
|
|
|
def addMapLayer(self, layer):
|
|
self.added.append(layer)
|
|
|
|
|
|
class _DummyCanvas:
|
|
def __init__(self):
|
|
self.extent = None
|
|
|
|
def setExtent(self, extent):
|
|
self.extent = extent
|
|
|
|
def refresh(self):
|
|
return None
|
|
|
|
|
|
class _DummyButton:
|
|
def __init__(self):
|
|
self._enabled = True
|
|
self._text = "Aus ALKIS laden"
|
|
|
|
def setEnabled(self, enabled):
|
|
self._enabled = enabled
|
|
|
|
def isEnabled(self):
|
|
return self._enabled
|
|
|
|
def setText(self, text):
|
|
self._text = text
|
|
|
|
def text(self):
|
|
return self._text
|
|
|
|
|
|
class _DummyCombo:
|
|
def __init__(self):
|
|
self.layer = None
|
|
|
|
def setLayer(self, layer):
|
|
self.layer = layer
|
|
|
|
|
|
class TestWorkingTab(unittest.TestCase):
|
|
|
|
def _make_tab(self):
|
|
tab = WorkingTab.__new__(WorkingTab)
|
|
tab.btn_verf_alkis = _DummyButton()
|
|
tab.verf_layer_combo = _DummyCombo()
|
|
tab.haken_verf = object()
|
|
tab.setze_haken = lambda *_args, **_kwargs: None
|
|
return tab
|
|
|
|
def test_set_busy_updates_button_state(self):
|
|
tab = self._make_tab()
|
|
|
|
tab._set_busy(tab.btn_verf_alkis, True)
|
|
self.assertFalse(tab.btn_verf_alkis.isEnabled())
|
|
self.assertEqual(tab.btn_verf_alkis.text(), "Lade ...")
|
|
|
|
tab._set_busy(tab.btn_verf_alkis, False)
|
|
self.assertTrue(tab.btn_verf_alkis.isEnabled())
|
|
self.assertEqual(tab.btn_verf_alkis.text(), "Aus ALKIS laden")
|
|
|
|
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.set_verfahrensgebiet_layer_id")
|
|
def test_on_verf_layer_changed_valid_sets_variable(self, mock_set_layer_id):
|
|
tab = self._make_tab()
|
|
layer = _DummyLayer(valid=True, layer_id="layer_123")
|
|
|
|
tab._on_verf_layer_changed(layer)
|
|
|
|
mock_set_layer_id.assert_called_once_with("layer_123")
|
|
|
|
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.set_verfahrensgebiet_layer_id")
|
|
def test_on_verf_layer_changed_none_clears_variable(self, mock_set_layer_id):
|
|
tab = self._make_tab()
|
|
|
|
tab._on_verf_layer_changed(None)
|
|
|
|
mock_set_layer_id.assert_called_once_with("")
|
|
|
|
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.success")
|
|
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.apply_style")
|
|
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.QgsProject.instance")
|
|
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.verfahrensgebiet_alkis")
|
|
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.iface")
|
|
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.set_verfahrensgebiet_layer_id")
|
|
def test_handle_verf_alkis_success_path(
|
|
self,
|
|
mock_set_layer_id,
|
|
mock_iface,
|
|
mock_alkis,
|
|
mock_project_instance,
|
|
mock_apply_style,
|
|
mock_success,
|
|
):
|
|
tab = self._make_tab()
|
|
layer = _DummyLayer(valid=True, layer_id="layer_ok")
|
|
mock_alkis.return_value = (layer, LoadStatus.FIRST)
|
|
mock_project_instance.return_value = _DummyProject()
|
|
mock_iface.mapCanvas.return_value = _DummyCanvas()
|
|
|
|
tab.handle_verf_alkis()
|
|
|
|
mock_apply_style.assert_called_once()
|
|
mock_success.assert_called_once()
|
|
mock_set_layer_id.assert_called_with("layer_ok")
|
|
|
|
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.set_verfahrensgebiet_layer_id")
|
|
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.verfahrensgebiet_alkis", return_value=(None, LoadStatus.NONE))
|
|
def test_handle_verf_alkis_failure_clears_layer_var(self, _mock_alkis, mock_set_layer_id):
|
|
tab = self._make_tab()
|
|
|
|
tab.handle_verf_alkis()
|
|
|
|
mock_set_layer_id.assert_called_once_with("")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|