Auf Wrapper umgestellt, Prüfarchitektur QT6-kompatibel gemacht (Nicht lauffähig)

This commit is contained in:
2025-12-18 22:00:31 +01:00
parent f64d56d4bc
commit e8fea163b5
31 changed files with 2791 additions and 889 deletions

View File

@@ -1,89 +1,102 @@
#test_dateipruefer.py
# sn_basis/test/test_dateipruefer.py
import unittest
import os
import tempfile
import sys
# 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.Dateipruefer import (
Dateipruefer,
LeererPfadModus,
DateiEntscheidung,
DateipruefErgebnis
)
from unittest.mock import patch
from sn_basis.modules.Dateipruefer import Dateipruefer
from sn_basis.modules.pruef_ergebnis import pruef_ergebnis
class TestDateipruefer(unittest.TestCase):
def setUp(self):
self.pruefer = Dateipruefer()
self.plugin_pfad = tempfile.gettempdir()
self.standardname = "test_standard.gpkg"
def test_verbotener_leerer_pfad(self):
result = self.pruefer.pruefe(
# -----------------------------------------------------
# 1. Leere Eingabe erlaubt
# -----------------------------------------------------
def test_leereingabe_erlaubt(self):
pruefer = Dateipruefer(
pfad="",
leer_modus=LeererPfadModus.VERBOTEN
leereingabe_erlaubt=True
)
self.assertFalse(result.erfolgreich)
self.assertIn("Kein Pfad angegeben.", result.fehler)
def test_standardpfad_wird_verwendet(self):
result = self.pruefer.pruefe(
result = pruefer.pruefe()
self.assertFalse(result.ok)
self.assertEqual(result.aktion, "leereingabe_erlaubt")
# -----------------------------------------------------
# 2. Leere Eingabe nicht erlaubt
# -----------------------------------------------------
def test_leereingabe_nicht_erlaubt(self):
pruefer = Dateipruefer(
pfad="",
leer_modus=LeererPfadModus.NUTZE_STANDARD,
standardname=self.standardname,
plugin_pfad=self.plugin_pfad
leereingabe_erlaubt=False
)
self.assertTrue(result.erfolgreich)
expected_path = os.path.join(self.plugin_pfad, self.standardname)
self.assertEqual(result.pfad, expected_path)
def test_temporärer_layer_wird_erkannt(self):
result = self.pruefer.pruefe(
result = pruefer.pruefe()
self.assertFalse(result.ok)
self.assertEqual(result.aktion, "leereingabe_nicht_erlaubt")
# -----------------------------------------------------
# 3. Standarddatei vorschlagen
# -----------------------------------------------------
def test_standarddatei_vorschlagen(self):
pruefer = Dateipruefer(
pfad="",
leer_modus=LeererPfadModus.TEMPORAER_ERLAUBT
standarddatei="/tmp/std.txt"
)
self.assertTrue(result.erfolgreich)
self.assertIsNone(result.pfad)
self.assertFalse(result.temporär)
def test_existierende_datei_ohne_entscheidung(self):
with tempfile.NamedTemporaryFile(delete=False) as tmp_file:
tmp_path = tmp_file.name
try:
result = self.pruefer.pruefe(
pfad=tmp_path,
leer_modus=LeererPfadModus.VERBOTEN
)
self.assertTrue(result.erfolgreich) # neu: jetzt True, nicht False
self.assertIn("Datei existiert bereits Entscheidung ausstehend.", result.fehler)
self.assertIsNone(result.entscheidung)
finally:
os.remove(tmp_path)
result = pruefer.pruefe()
def test_existierende_datei_mit_entscheidung_ersetzen(self):
with tempfile.NamedTemporaryFile(delete=False) as tmp_file:
tmp_path = tmp_file.name
try:
result = self.pruefer.pruefe(
pfad=tmp_path,
leer_modus=LeererPfadModus.VERBOTEN,
vorhandene_datei_entscheidung=DateiEntscheidung.ERSETZEN
)
self.assertTrue(result.erfolgreich)
self.assertEqual(result.entscheidung, DateiEntscheidung.ERSETZEN)
finally:
os.remove(tmp_path)
self.assertFalse(result.ok)
self.assertEqual(result.aktion, "standarddatei_vorschlagen")
self.assertEqual(result.pfad, "/tmp/std.txt")
def test_datei_nicht_existiert(self):
fake_path = os.path.join(self.plugin_pfad, "nicht_existierend.gpkg")
result = self.pruefer.pruefe(
pfad=fake_path,
leer_modus=LeererPfadModus.VERBOTEN
# -----------------------------------------------------
# 4. Temporäre Datei erlaubt
# -----------------------------------------------------
def test_temporaer_erlaubt(self):
pruefer = Dateipruefer(
pfad="",
temporaer_erlaubt=True
)
self.assertTrue(result.erfolgreich)
self.assertEqual(result.pfad, fake_path)
result = pruefer.pruefe()
self.assertFalse(result.ok)
self.assertEqual(result.aktion, "temporaer_erlaubt")
# -----------------------------------------------------
# 5. Datei existiert nicht
# -----------------------------------------------------
@patch("sn_basis.functions.syswrapper.file_exists", return_value=False)
def test_datei_nicht_gefunden(self, mock_exists):
pruefer = Dateipruefer(
pfad="/tmp/nichtvorhanden.txt"
)
result = pruefer.pruefe()
self.assertFalse(result.ok)
self.assertEqual(result.aktion, "datei_nicht_gefunden")
# -----------------------------------------------------
# 6. Datei existiert
# -----------------------------------------------------
@patch("sn_basis.functions.syswrapper.file_exists", return_value=True)
@patch("sn_basis.functions.syswrapper.is_file", return_value=True)
def test_datei_ok(self, mock_isfile, mock_exists):
pruefer = Dateipruefer(
pfad="/tmp/test.txt"
)
result = pruefer.pruefe()
self.assertTrue(result.ok)
self.assertEqual(result.aktion, "ok")
self.assertEqual(result.pfad, "/tmp/test.txt")
if __name__ == "__main__":