Files
Plugin_SN_Basis/tests/test_linkpruefer.py
T
DanielandClaude Sonnet 5 8c39593239 test_linkpruefer: Testfall für leere Eingabe ergänzt
Linkpruefer.pruefe() hat einen dritten Zweig (leere Eingabe -> aktion
"leer"), der bisher ungetestet war - die fünf bestehenden Tests deckten
nur den URL- und den Datei-Zweig ab.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-17 14:46:15 +02:00

97 lines
3.8 KiB
Python

# sn_basis/test/test_linkpruefer.py
import unittest
from pathlib import Path
from unittest.mock import patch
from sn_basis.modules.linkpruefer import Linkpruefer
from sn_basis.functions.qgiscore_wrapper import NetworkReply
class TestLinkpruefer(unittest.TestCase):
# -----------------------------------------------------
# 1. Leere Eingabe
# -----------------------------------------------------
def test_leere_eingabe(self):
"""Prüft, dass eine leere Eingabe ohne Netzwerk-/Dateizugriff als 'leer' abgelehnt wird."""
lp = Linkpruefer()
result = lp.pruefe("")
self.assertFalse(result.ok)
self.assertEqual(result.aktion, "leer")
self.assertIsNone(result.kontext)
# -----------------------------------------------------
# 2. Remote-Link erreichbar
# -----------------------------------------------------
@patch("sn_basis.modules.linkpruefer.network_head")
def test_remote_link_ok(self, mock_head):
"""Prüft, dass eine erreichbare Remote-URL (HTTP HEAD ohne Fehler) als 'ok' bestätigt wird."""
mock_head.return_value = NetworkReply(error=0)
lp = Linkpruefer()
result = lp.pruefe("http://example.com")
self.assertTrue(result.ok)
self.assertEqual(result.aktion, "ok")
self.assertEqual(result.kontext, "http://example.com")
# -----------------------------------------------------
# 3. Remote-Link nicht erreichbar
# -----------------------------------------------------
@patch("sn_basis.modules.linkpruefer.network_head")
def test_remote_link_error(self, mock_head):
"""Prüft, dass eine Remote-URL mit Fehlerantwort als 'url_nicht_erreichbar' abgelehnt wird."""
mock_head.return_value = NetworkReply(error=1)
lp = Linkpruefer()
result = lp.pruefe("http://example.com")
self.assertFalse(result.ok)
self.assertEqual(result.aktion, "url_nicht_erreichbar")
self.assertEqual(result.kontext, "http://example.com")
# -----------------------------------------------------
# 4. Netzwerkfehler (None)
# -----------------------------------------------------
@patch("sn_basis.modules.linkpruefer.network_head", return_value=None)
def test_remote_link_network_error(self, mock_head):
"""Prüft, dass eine ausbleibende Netzwerkantwort (None) als 'netzwerkfehler' gemeldet wird."""
lp = Linkpruefer()
result = lp.pruefe("http://example.com")
self.assertFalse(result.ok)
self.assertEqual(result.aktion, "netzwerkfehler")
self.assertEqual(result.kontext, "http://example.com")
# -----------------------------------------------------
# 5. Lokaler Pfad existiert nicht
# -----------------------------------------------------
@patch("sn_basis.modules.linkpruefer.file_exists", return_value=False)
def test_local_link_not_found(self, mock_exists):
"""Prüft, dass ein nicht existierender lokaler Pfad als 'pfad_nicht_gefunden' abgelehnt wird."""
lp = Linkpruefer()
result = lp.pruefe("/path/to/missing/file.shp")
self.assertFalse(result.ok)
self.assertEqual(result.aktion, "pfad_nicht_gefunden")
self.assertEqual(result.kontext, Path("/path/to/missing/file.shp"))
# -----------------------------------------------------
# 6. Lokaler Pfad existiert
# -----------------------------------------------------
@patch("sn_basis.modules.linkpruefer.file_exists", return_value=True)
def test_local_link_ok(self, mock_exists):
"""Prüft, dass ein existierender lokaler Pfad als 'ok' bestätigt wird."""
lp = Linkpruefer()
result = lp.pruefe("/path/to/file.shp")
self.assertTrue(result.ok)
self.assertEqual(result.aktion, "ok")
self.assertEqual(result.kontext, Path("/path/to/file.shp"))
if __name__ == "__main__":
unittest.main()