forked from AG_QGIS/Plugin_SN_Basis
Tests überarbeitet, Mocks und coverage eingefügt
This commit is contained in:
@@ -1,36 +1,87 @@
|
||||
#test_pruefmanager.py
|
||||
import unittest
|
||||
import os
|
||||
from unittest.mock import patch
|
||||
from pruefmanager import PruefManager
|
||||
from Dateipruefer import DateiEntscheidung
|
||||
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."
|
||||
)
|
||||
|
||||
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
||||
|
||||
class TestPruefManager(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.manager = PruefManager(plugin_pfad="/tmp")
|
||||
|
||||
@patch("PyQt5.QtWidgets.QMessageBox.exec_", return_value=QMessageBox.Yes)
|
||||
def test_frage_datei_ersetzen(self, mock_msgbox):
|
||||
# ---------------------------------------------------------
|
||||
# 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)
|
||||
|
||||
@patch("PyQt5.QtWidgets.QMessageBox.exec_", return_value=QMessageBox.No)
|
||||
def test_frage_datei_anhaengen(self, mock_msgbox):
|
||||
@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)
|
||||
|
||||
@patch("PyQt5.QtWidgets.QMessageBox.exec_", return_value=QMessageBox.Cancel)
|
||||
def test_frage_datei_abbrechen(self, mock_msgbox):
|
||||
@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)
|
||||
|
||||
@patch("PyQt5.QtWidgets.QMessageBox.exec_", return_value=QMessageBox.Yes)
|
||||
def test_frage_temporär_verwenden_ja(self, mock_msgbox):
|
||||
# ---------------------------------------------------------
|
||||
# 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())
|
||||
|
||||
@patch("PyQt5.QtWidgets.QMessageBox.exec_", return_value=QMessageBox.No)
|
||||
def test_frage_temporär_verwenden_nein(self, mock_msgbox):
|
||||
@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()
|
||||
|
||||
Reference in New Issue
Block a user