forked from AG_QGIS/Plugin_SN_Basis
PruefManager und Daten aus P41 übertragen
This commit is contained in:
125
test/test_linkpruefer.py
Normal file
125
test/test_linkpruefer.py
Normal file
@@ -0,0 +1,125 @@
|
||||
# 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()
|
||||
Reference in New Issue
Block a user