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() qgis_utils.plugins = {} qgis_mod.utils = qgis_utils sys.modules["qgis"] = qgis_mod sys.modules["qgis.utils"] = qgis_utils from sn_verfahrensgebiet.ui.dockwidget import DockWidget class _DummyTabWidget: def __init__(self): self.tabs = [] def addTab(self, widget, title): self.tabs.append((widget, title)) class _TabWithServices: tab_title = "WithServices" def __init__(self, _parent): self.services = None def set_services(self, pruefmanager=None, data_grabber=None): self.services = (pruefmanager, data_grabber) class _TabWithoutServices: tab_title = "WithoutServices" def __init__(self, _parent): pass class _TabRaises: tab_title = "Broken" def __init__(self, _parent): raise RuntimeError("boom") class TestDockWidget(unittest.TestCase): @patch("sn_verfahrensgebiet.ui.dockwidget.QTabWidget", _DummyTabWidget) def test_init_tabs_with_services_injects_available_services(self): obj = DockWidget.__new__(DockWidget) obj.tabs = [_TabWithServices, _TabWithoutServices] obj.pruefmanager = object() obj.data_grabber = object() obj._set_widget_calls = [] obj.setWidget = lambda value: obj._set_widget_calls.append(value) DockWidget._init_tabs_with_services(obj) self.assertEqual(len(obj._set_widget_calls), 2) tab_widget = obj._set_widget_calls[-1] self.assertIsInstance(tab_widget, _DummyTabWidget) self.assertEqual(len(tab_widget.tabs), 2) first_tab = tab_widget.tabs[0][0] self.assertEqual(first_tab.services, (obj.pruefmanager, obj.data_grabber)) @patch("sn_verfahrensgebiet.ui.dockwidget.error") @patch("sn_verfahrensgebiet.ui.dockwidget.QTabWidget", _DummyTabWidget) def test_init_tabs_with_services_reports_errors(self, mock_error): obj = DockWidget.__new__(DockWidget) obj.tabs = [_TabRaises] obj.pruefmanager = object() obj.data_grabber = object() obj.setWidget = lambda _value: None DockWidget._init_tabs_with_services(obj) mock_error.assert_called_once() if __name__ == "__main__": unittest.main()