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