87 lines
2.4 KiB
Python
87 lines
2.4 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()
|
|
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()
|