Files
Plugin_SN_Basis/tests/test_dockmanager.py
T

98 lines
3.7 KiB
Python
Raw Normal View History

"""Tests für sn_basis/ui/dockmanager.py (nur ein Dock gleichzeitig sichtbar, Issue #65)."""
import unittest
from unittest.mock import patch
from sn_basis.ui.dockmanager import DockManager
from sn_basis.functions.qt_wrapper import DockAreaRight
class _FakeDock:
def __init__(self, name: str = "") -> None:
self._name = name
self.shown = False
def objectName(self) -> str:
return self._name
def setObjectName(self, name: str) -> None:
self._name = name
def show(self) -> None:
self.shown = True
def deleteLater(self) -> None:
return None
class DockManagerShowTests(unittest.TestCase):
@patch("sn_basis.ui.dockmanager.error")
@patch("sn_basis.ui.dockmanager.add_dock_widget")
def test_none_dock_meldet_fehler_und_zeigt_nichts_an(self, mock_add, mock_error):
"""Prüft, dass ein fehlendes Dock-Widget (None) einen Fehler meldet und nichts anzeigt."""
DockManager.show(None)
mock_error.assert_called_once()
mock_add.assert_not_called()
@patch("sn_basis.ui.dockmanager.find_dock_widgets", return_value=[])
@patch("sn_basis.ui.dockmanager.add_dock_widget")
def test_setzt_objectname_wenn_leer(self, mock_add, mock_find):
"""Prüft, dass ein Dock ohne Namen einen technischen Namen mit dem Präfix 'sn_dock_' erhält."""
dock = _FakeDock(name="")
DockManager.show(dock)
self.assertTrue(dock.objectName().startswith("sn_dock_"))
@patch("sn_basis.ui.dockmanager.remove_dock_widget")
@patch("sn_basis.ui.dockmanager.add_dock_widget")
def test_entfernt_andere_sn_docks_aber_nicht_sich_selbst(self, mock_add, mock_remove):
"""Prüft, dass andere sn_basis-Docks entfernt werden, das neue Dock und fremde Widgets aber unangetastet bleiben."""
neues_dock = _FakeDock(name="sn_dock_neu")
altes_dock = _FakeDock(name="sn_dock_alt")
fremdes_widget = _FakeDock(name="irgendein_anderes_widget")
with patch("sn_basis.ui.dockmanager.find_dock_widgets", return_value=[neues_dock, altes_dock, fremdes_widget]):
DockManager.show(neues_dock)
mock_remove.assert_called_once_with(altes_dock)
@patch("sn_basis.ui.dockmanager.find_dock_widgets", return_value=[])
@patch("sn_basis.ui.dockmanager.add_dock_widget")
def test_zeigt_neues_dock_mit_default_area_an(self, mock_add, mock_find):
"""Prüft, dass ein neues Dock mit der Standard-Area (DockAreaRight) angezeigt wird."""
dock = _FakeDock(name="sn_dock_x")
DockManager.show(dock)
mock_add.assert_called_once_with(DockAreaRight, dock)
self.assertTrue(dock.shown)
@patch("sn_basis.ui.dockmanager.warning")
@patch("sn_basis.ui.dockmanager.add_dock_widget")
@patch("sn_basis.ui.dockmanager.find_dock_widgets", side_effect=RuntimeError("kaputt"))
def test_fehler_beim_entfernen_wird_als_warnung_gemeldet(self, mock_find, mock_add, mock_warning):
"""Prüft, dass ein Fehler beim Entfernen alter Docks nur gewarnt und das neue Dock trotzdem angezeigt wird."""
dock = _FakeDock(name="sn_dock_x")
DockManager.show(dock)
mock_warning.assert_called_once()
mock_add.assert_called_once()
@patch("sn_basis.ui.dockmanager.error")
@patch("sn_basis.ui.dockmanager.add_dock_widget", side_effect=RuntimeError("kaputt"))
@patch("sn_basis.ui.dockmanager.find_dock_widgets", return_value=[])
def test_fehler_beim_anzeigen_wird_gemeldet(self, mock_find, mock_add, mock_error):
"""Prüft, dass ein Fehler beim Anzeigen des Docks als Fehler gemeldet wird."""
dock = _FakeDock(name="sn_dock_x")
DockManager.show(dock)
mock_error.assert_called_once()
if __name__ == "__main__":
unittest.main()