Files
Plugin_SN_Basis/test/test_pruefmanager.py

88 lines
3.7 KiB
Python
Raw Normal View History

#test_pruefmanager.py
import unittest
import os
import sys
from unittest.mock import patch, MagicMock
# Plugin-Root ermitteln (ein Verzeichnis über "test")
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
sys.path.insert(0, ROOT)
from modules.Pruefmanager import PruefManager
from modules.Dateipruefer import DateiEntscheidung
import modules.qt_compat as qt_compat
# Skip-Decorator für Mock-Modus
def skip_if_mock(reason):
return unittest.skipIf(
qt_compat.QT_VERSION == 0,
f"{reason} — MOCK-Modus erkannt. "
"Bitte diesen Test in einer echten QGIS-Umgebung ausführen."
)
class TestPruefManager(unittest.TestCase):
def setUp(self):
self.manager = PruefManager(plugin_pfad="/tmp")
# ---------------------------------------------------------
# Tests für frage_datei_ersetzen_oder_anhaengen
# ---------------------------------------------------------
@skip_if_mock("Qt-Enums können im Mock-Modus nicht OR-kombiniert werden")
@patch("modules.qt_compat.exec_dialog", return_value=qt_compat.YES)
def test_frage_datei_ersetzen(self, mock_exec):
entscheidung = self.manager.frage_datei_ersetzen_oder_anhaengen("dummy.gpkg")
self.assertEqual(entscheidung, DateiEntscheidung.ERSETZEN)
@skip_if_mock("Qt-Enums können im Mock-Modus nicht OR-kombiniert werden")
@patch("modules.qt_compat.exec_dialog", return_value=qt_compat.NO)
def test_frage_datei_anhaengen(self, mock_exec):
entscheidung = self.manager.frage_datei_ersetzen_oder_anhaengen("dummy.gpkg")
self.assertEqual(entscheidung, DateiEntscheidung.ANHAENGEN)
@skip_if_mock("Qt-Enums können im Mock-Modus nicht OR-kombiniert werden")
@patch("modules.qt_compat.exec_dialog", return_value=qt_compat.CANCEL)
def test_frage_datei_abbrechen(self, mock_exec):
entscheidung = self.manager.frage_datei_ersetzen_oder_anhaengen("dummy.gpkg")
self.assertEqual(entscheidung, DateiEntscheidung.ABBRECHEN)
# ---------------------------------------------------------
# Fehlerfall: exec_dialog liefert etwas Unerwartetes
# ---------------------------------------------------------
@skip_if_mock("Qt-Enums können im Mock-Modus nicht OR-kombiniert werden")
@patch("modules.qt_compat.exec_dialog", return_value=999)
def test_frage_datei_unbekannte_antwort(self, mock_exec):
entscheidung = self.manager.frage_datei_ersetzen_oder_anhaengen("dummy.gpkg")
self.assertEqual(entscheidung, DateiEntscheidung.ABBRECHEN)
# ---------------------------------------------------------
# Tests für frage_temporär_verwenden
# ---------------------------------------------------------
@skip_if_mock("Qt-Enums können im Mock-Modus nicht OR-kombiniert werden")
@patch("modules.qt_compat.exec_dialog", return_value=qt_compat.YES)
def test_frage_temporär_verwenden_ja(self, mock_exec):
self.assertTrue(self.manager.frage_temporär_verwenden())
@skip_if_mock("Qt-Enums können im Mock-Modus nicht OR-kombiniert werden")
@patch("modules.qt_compat.exec_dialog", return_value=qt_compat.NO)
def test_frage_temporär_verwenden_nein(self, mock_exec):
self.assertFalse(self.manager.frage_temporär_verwenden())
# ---------------------------------------------------------
# Fehlerfall: exec_dialog liefert etwas Unerwartetes
# ---------------------------------------------------------
@skip_if_mock("Qt-Enums können im Mock-Modus nicht OR-kombiniert werden")
@patch("modules.qt_compat.exec_dialog", return_value=None)
def test_frage_temporär_verwenden_unbekannt(self, mock_exec):
self.assertFalse(self.manager.frage_temporär_verwenden())
if __name__ == "__main__":
unittest.main()