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>
98 lines
3.7 KiB
Python
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()
|