Files
Plugin_SN_Basis/tests/test_dockmanager.py
T
DanielandClaude Sonnet 5 7ce820581f Tests für restliche priorisierte sn_basis-Funktionen ergänzt (#65)
79 neue Testfälle: Verfahrensgebiet-Zustandsverwaltung (Listener-Setup/
-teardown, Signal-Handler), DockManager/BaseDockWidget, pruef_ergebnis-
Persistenz-Gates, Pruefmanager-Entscheidungswege, restliche Dateipruefer-
Zweige, Fundament-Wrapper (sys_wrapper, ly_existence_wrapper,
ly_style_wrapper.apply_style_from_path, landkreise, message_wrapper,
qgiscore_wrapper.polygon_zu_linie/layer_exists_in_gpkg,
qgisui_wrapper.add_layer_to_project) und SettingsTab.save_data/load_data.

Ausgeklammert: LayerLoader.apply_style/ly_style_wrapper.apply_style
(Bug-Verdacht, hartkodierter Fachplugin-Pfad) und
Pruefmanager._ask_use_or_replace_pufferlayer (bereits als Bug in #60
erfasst: ruft nicht existierendes self.pruefmanager auf).

qt_wrapper._MockQDockWidget um closeEvent() ergänzt (fehlte, ließ jede
BaseDockWidget.closeEvent()-Ausführung im Mock-Modus abstürzen).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-18 11:20:10 +02:00

98 lines
3.7 KiB
Python

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