forked from AG_QGIS/Plugin_SN_Basis
Auf Wrapper umgestellt, Prüfarchitektur QT6-kompatibel gemacht (Nicht lauffähig)
This commit is contained in:
@@ -1,77 +1,107 @@
|
||||
#test_linkpruefer.py
|
||||
# sn_basis/test/test_linkpruefer.py
|
||||
|
||||
import unittest
|
||||
from unittest.mock import MagicMock, patch
|
||||
from unittest.mock import patch
|
||||
|
||||
# QGIS-Module mocken, damit der Import funktioniert
|
||||
with patch.dict("sys.modules", {
|
||||
"qgis": MagicMock(),
|
||||
"qgis.PyQt": MagicMock(),
|
||||
"qgis.PyQt.QtCore": MagicMock(),
|
||||
"qgis.PyQt.QtNetwork": MagicMock(),
|
||||
"qgis.core": MagicMock(),
|
||||
}):
|
||||
from modules.linkpruefer import Linkpruefer
|
||||
from sn_basis.modules.linkpruefer import Linkpruefer
|
||||
from sn_basis.modules.pruef_ergebnis import pruef_ergebnis
|
||||
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Mock-Ergebnisse für network_head()
|
||||
# ---------------------------------------------------------
|
||||
|
||||
class MockResponseOK:
|
||||
ok = True
|
||||
status = 200
|
||||
error = None
|
||||
|
||||
|
||||
class MockResponseNotFound:
|
||||
ok = False
|
||||
status = 404
|
||||
error = "Not Found"
|
||||
|
||||
|
||||
class MockResponseConnectionError:
|
||||
ok = False
|
||||
status = None
|
||||
error = "Connection refused"
|
||||
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Testklasse
|
||||
# ---------------------------------------------------------
|
||||
|
||||
class TestLinkpruefer(unittest.TestCase):
|
||||
|
||||
@patch("modules.linkpruefer.QNetworkReply")
|
||||
@patch("modules.linkpruefer.QNetworkRequest")
|
||||
@patch("modules.linkpruefer.QUrl")
|
||||
@patch("modules.linkpruefer.QEventLoop")
|
||||
@patch("modules.linkpruefer.QgsNetworkAccessManager")
|
||||
def test_remote_link_ok(
|
||||
self, mock_manager, mock_loop, mock_url, mock_request, mock_reply
|
||||
):
|
||||
# Setup: simulate successful HEAD request
|
||||
reply_instance = MagicMock()
|
||||
reply_instance.error.return_value = mock_reply.NetworkError.NoError
|
||||
reply_instance.attribute.return_value = 200
|
||||
|
||||
mock_manager.return_value.head.return_value = reply_instance
|
||||
# -----------------------------------------------------
|
||||
# 1. Remote-Link erreichbar
|
||||
# -----------------------------------------------------
|
||||
@patch("sn_basis.functions.qgisqt_wrapper.network_head")
|
||||
def test_remote_link_ok(self, mock_head):
|
||||
mock_head.return_value = MockResponseOK()
|
||||
|
||||
lp = Linkpruefer("http://example.com", "REST")
|
||||
result = lp.pruefe_link()
|
||||
result = lp.pruefe()
|
||||
|
||||
self.assertTrue(result.erfolgreich)
|
||||
self.assertEqual(result.daten["quelle"], "remote")
|
||||
self.assertTrue(result.ok)
|
||||
self.assertEqual(result.aktion, "ok")
|
||||
|
||||
@patch("modules.linkpruefer.QNetworkReply")
|
||||
@patch("modules.linkpruefer.QNetworkRequest")
|
||||
@patch("modules.linkpruefer.QUrl")
|
||||
@patch("modules.linkpruefer.QEventLoop")
|
||||
@patch("modules.linkpruefer.QgsNetworkAccessManager")
|
||||
def test_remote_link_error(
|
||||
self, mock_manager, mock_loop, mock_url, mock_request, mock_reply
|
||||
):
|
||||
# Fake-Reply erzeugen
|
||||
reply_instance = MagicMock()
|
||||
reply_instance.error.return_value = mock_reply.NetworkError.ConnectionRefusedError
|
||||
reply_instance.errorString.return_value = "Connection refused"
|
||||
|
||||
# WICHTIG: finished-Signal simulieren
|
||||
reply_instance.finished = MagicMock()
|
||||
reply_instance.finished.connect = MagicMock()
|
||||
|
||||
# Wenn loop.exec() aufgerufen wird, rufen wir loop.quit() sofort auf
|
||||
mock_loop.return_value.exec.side_effect = lambda: mock_loop.return_value.quit()
|
||||
|
||||
# Manager gibt unser Fake-Reply zurück
|
||||
mock_manager.return_value.head.return_value = reply_instance
|
||||
# -----------------------------------------------------
|
||||
# 2. Remote-Link nicht erreichbar
|
||||
# -----------------------------------------------------
|
||||
@patch("sn_basis.functions.qgisqt_wrapper.network_head")
|
||||
def test_remote_link_error(self, mock_head):
|
||||
mock_head.return_value = MockResponseConnectionError()
|
||||
|
||||
lp = Linkpruefer("http://example.com", "REST")
|
||||
result = lp.pruefe_link()
|
||||
result = lp.pruefe()
|
||||
|
||||
self.assertFalse(result.erfolgreich)
|
||||
self.assertIn("Verbindungsfehler", result.fehler[0])
|
||||
self.assertFalse(result.ok)
|
||||
self.assertEqual(result.aktion, "url_nicht_erreichbar")
|
||||
self.assertIn("Connection refused", result.meldung)
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 3. Remote-Link 404
|
||||
# -----------------------------------------------------
|
||||
@patch("sn_basis.functions.qgisqt_wrapper.network_head")
|
||||
def test_remote_link_404(self, mock_head):
|
||||
mock_head.return_value = MockResponseNotFound()
|
||||
|
||||
lp = Linkpruefer("http://example.com/missing", "REST")
|
||||
result = lp.pruefe()
|
||||
|
||||
self.assertFalse(result.ok)
|
||||
self.assertEqual(result.aktion, "url_nicht_erreichbar")
|
||||
self.assertIn("404", result.meldung)
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 4. Lokaler Pfad existiert nicht
|
||||
# -----------------------------------------------------
|
||||
@patch("sn_basis.functions.syswrapper.file_exists")
|
||||
def test_local_link_not_found(self, mock_exists):
|
||||
mock_exists.return_value = False
|
||||
|
||||
lp = Linkpruefer("/path/to/missing/file.shp", "OGR")
|
||||
result = lp.pruefe()
|
||||
|
||||
self.assertFalse(result.ok)
|
||||
self.assertEqual(result.aktion, "pfad_nicht_gefunden")
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 5. Lokaler Pfad existiert, aber ungewöhnlich
|
||||
# -----------------------------------------------------
|
||||
@patch("sn_basis.functions.syswrapper.file_exists")
|
||||
def test_local_link_warning(self, mock_exists):
|
||||
mock_exists.return_value = True
|
||||
|
||||
def test_local_link_warning(self):
|
||||
lp = Linkpruefer("/path/to/file_without_extension", "OGR")
|
||||
result = lp.pruefe_link()
|
||||
result = lp.pruefe()
|
||||
|
||||
self.assertTrue(result.erfolgreich)
|
||||
self.assertIn("ungewöhnlich", result.warnungen[0])
|
||||
self.assertTrue(result.ok)
|
||||
self.assertEqual(result.aktion, "ok")
|
||||
self.assertIn("ungewöhnlich", result.meldung)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user