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