122 lines
3.7 KiB
Python
122 lines
3.7 KiB
Python
import sys
|
|
import types
|
|
import unittest
|
|
from types import SimpleNamespace
|
|
from unittest.mock import Mock, 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.main import Verfahrensgebiet
|
|
|
|
|
|
class _DummyIface:
|
|
def __init__(self):
|
|
self.removed = []
|
|
|
|
def mainWindow(self):
|
|
return object()
|
|
|
|
def removeDockWidget(self, dock):
|
|
self.removed.append(dock)
|
|
|
|
|
|
class _DummyDock:
|
|
def __init__(self):
|
|
self.object_name = None
|
|
self.action = None
|
|
self.deleted = False
|
|
|
|
def setObjectName(self, name):
|
|
self.object_name = name
|
|
|
|
def deleteLater(self):
|
|
self.deleted = True
|
|
|
|
|
|
class TestPluginMain(unittest.TestCase):
|
|
|
|
@patch("sn_verfahrensgebiet.main.DataGrabber")
|
|
@patch("sn_verfahrensgebiet.main.Pruefmanager")
|
|
def test_init_sets_services_and_names(self, mock_pruefmanager, mock_data_grabber):
|
|
pm = object()
|
|
dg = object()
|
|
mock_pruefmanager.return_value = pm
|
|
mock_data_grabber.return_value = dg
|
|
|
|
plugin = Verfahrensgebiet(_DummyIface())
|
|
|
|
self.assertIs(plugin.pruefmanager, pm)
|
|
self.assertIs(plugin.data_grabber, dg)
|
|
self.assertEqual(plugin.plugin_name, "Verfahrensgebiet")
|
|
self.assertEqual(plugin.dock_name, "sn_dock_verfahrensgebiet")
|
|
|
|
@patch("sn_verfahrensgebiet.main.plugins", new_callable=dict)
|
|
def test_initGui_registers_action_when_basis_ui_exists(self, mock_plugins):
|
|
iface = _DummyIface()
|
|
plugin = Verfahrensgebiet(iface)
|
|
|
|
ui = SimpleNamespace(
|
|
add_action=Mock(return_value="action_obj"),
|
|
finalize_menu_and_toolbar=Mock(),
|
|
)
|
|
mock_plugins["sn_basis"] = SimpleNamespace(ui=ui)
|
|
|
|
plugin.initGui()
|
|
|
|
self.assertEqual(plugin.action, "action_obj")
|
|
ui.add_action.assert_called_once()
|
|
ui.finalize_menu_and_toolbar.assert_called_once()
|
|
|
|
@patch("sn_verfahrensgebiet.main.plugins", new_callable=dict)
|
|
@patch("sn_verfahrensgebiet.main.DockManager.show")
|
|
@patch("sn_verfahrensgebiet.main.DockWidget")
|
|
def test_run_creates_dock_and_marks_toolbar_active(self, mock_dockwidget_cls, mock_show, mock_plugins):
|
|
iface = _DummyIface()
|
|
plugin = Verfahrensgebiet(iface)
|
|
plugin.action = "action_obj"
|
|
|
|
dock = _DummyDock()
|
|
mock_dockwidget_cls.return_value = dock
|
|
|
|
ui = SimpleNamespace(set_active_plugin=Mock())
|
|
mock_plugins["sn_basis"] = SimpleNamespace(ui=ui)
|
|
|
|
plugin.run()
|
|
|
|
self.assertIs(plugin.dockwidget, dock)
|
|
self.assertEqual(dock.object_name, "sn_dock_verfahrensgebiet")
|
|
self.assertEqual(dock.action, "action_obj")
|
|
mock_show.assert_called_once_with(dock)
|
|
ui.set_active_plugin.assert_called_once_with("action_obj")
|
|
|
|
@patch("sn_verfahrensgebiet.main.plugins", new_callable=dict)
|
|
def test_unload_removes_dock_and_action(self, mock_plugins):
|
|
iface = _DummyIface()
|
|
plugin = Verfahrensgebiet(iface)
|
|
|
|
dock = _DummyDock()
|
|
plugin.dockwidget = dock
|
|
plugin.action = "action_obj"
|
|
|
|
ui = SimpleNamespace(remove_action=Mock())
|
|
mock_plugins["sn_basis"] = SimpleNamespace(ui=ui)
|
|
|
|
plugin.unload()
|
|
|
|
self.assertIn(dock, iface.removed)
|
|
self.assertTrue(dock.deleted)
|
|
self.assertIsNone(plugin.dockwidget)
|
|
ui.remove_action.assert_called_once_with("action_obj")
|
|
self.assertIsNone(plugin.action)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|