# test/test_linkpruefer.py import unittest import sys from unittest.mock import patch from qgis.PyQt.QtCore import QCoreApplication, QTimer from qgis.PyQt.QtNetwork import QNetworkRequest from linkpruefer import Linkpruefer # Stelle sicher, dass eine Qt-App existiert app = QCoreApplication.instance() if app is None: app = QCoreApplication(sys.argv) class DummyReply: """Fake-Reply, um Netzwerkabfragen zu simulieren""" HttpStatusCodeAttribute = QNetworkRequest.HttpStatusCodeAttribute def __init__(self, error, status_code): self._error = error self._status_code = status_code self.finished = self # Fake-Signal def connect(self, slot): # sorgt dafür, dass loop.quit() nach Start von loop.exec_() ausgeführt wird QTimer.singleShot(0, slot) def error(self): return self._error def errorString(self): return "Simulierter Fehler" if self._error != 0 else "" def attribute(self, attr): if attr == self.HttpStatusCodeAttribute: return self._status_code return None def deleteLater(self): # kein echtes QObject → wir tun einfach nichts pass class TestLinkpruefer(unittest.TestCase): """Tests für alle Funktionen des Linkpruefer""" # ---------------------------- # Remote-Tests mit DummyReply # ---------------------------- @patch('linkpruefer.QgsNetworkAccessManager.head') def test_remote_link_success(self, mock_head): mock_head.return_value = DummyReply(0, 200) checker = Linkpruefer("https://example.com/service", "REST") result = checker.ausfuehren() self.assertTrue(result.erfolgreich) self.assertEqual(result.daten['typ'], 'REST') self.assertEqual(result.daten['quelle'], 'remote') self.assertEqual(result.fehler, []) self.assertEqual(result.warnungen, []) @patch('linkpruefer.QgsNetworkAccessManager.head') def test_remote_link_failure(self, mock_head): mock_head.return_value = DummyReply(1, 404) checker = Linkpruefer("https://example.com/kaputt", "WMS") result = checker.ausfuehren() self.assertFalse(result.erfolgreich) self.assertIn("Verbindungsfehler: Simulierter Fehler", result.fehler) # ---------------------------- # Klassifizierungstests # ---------------------------- def test_klassifiziere_anbieter_remote(self): checker = Linkpruefer("https://beispiel.de", "wms") daten = checker.klassifiziere_anbieter() self.assertEqual(daten["typ"], "WMS") self.assertEqual(daten["quelle"], "remote") def test_klassifiziere_anbieter_local(self): checker = Linkpruefer("C:/daten/test.shp", "ogr") daten = checker.klassifiziere_anbieter() self.assertEqual(daten["typ"], "OGR") self.assertEqual(daten["quelle"], "local") # ---------------------------- # Lokale Links # ---------------------------- def test_pruefe_link_local_ok(self): checker = Linkpruefer("C:/daten/test.shp", "OGR") result = checker.pruefe_link() self.assertTrue(result.erfolgreich) self.assertEqual(result.warnungen, []) def test_pruefe_link_local_warnung(self): checker = Linkpruefer("C:/daten/ordner/", "OGR") result = checker.pruefe_link() self.assertTrue(result.erfolgreich) self.assertIn("ungewöhnlich", result.warnungen[0]) # ---------------------------- # Sonderfall: leerer Link # ---------------------------- def test_pruefe_link_empty(self): checker = Linkpruefer("", "REST") result = checker.pruefe_link() self.assertFalse(result.erfolgreich) self.assertIn("Link fehlt.", result.fehler) # ---------------------------- # leerer Anbieter # ---------------------------- def test_pruefe_link_leerer_anbieter(self): checker = Linkpruefer("https://example.com/service", "") result = checker.pruefe_link() self.assertFalse(result.erfolgreich) self.assertIn("Anbieter muss gesetzt werden und darf nicht leer sein.", result.fehler) if __name__ == "__main__": unittest.main()