forked from AG_QGIS/Plugin_SN_Basis
Auf Wrapper umgestellt, Prüfarchitektur QT6-kompatibel gemacht (Nicht lauffähig)
This commit is contained in:
@@ -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__":
|
||||
|
||||
Reference in New Issue
Block a user