forked from AG_QGIS/Plugin_SN_Basis
126 lines
4.1 KiB
Python
126 lines
4.1 KiB
Python
# 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()
|