Files
Plugin_SN_Verfahrensgebiet/tests/test_main.py
T
2026-04-20 15:36:18 +02:00

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()