forked from AG_QGIS/Plugin_SN_Basis
Auf Wrapper umgestellt, Prüfarchitektur QT6-kompatibel gemacht (Nicht lauffähig)
This commit is contained in:
170
test/test_layerpruefer.py
Normal file
170
test/test_layerpruefer.py
Normal file
@@ -0,0 +1,170 @@
|
||||
# sn_basis/test/test_layerpruefer.py
|
||||
|
||||
import unittest
|
||||
|
||||
from sn_basis.modules.layerpruefer import Layerpruefer
|
||||
from sn_basis.modules.pruef_ergebnis import pruef_ergebnis
|
||||
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Mock-Layer für Wrapper-Tests
|
||||
# ---------------------------------------------------------
|
||||
class MockLayer:
|
||||
def __init__(
|
||||
self,
|
||||
exists=True,
|
||||
visible=True,
|
||||
layer_type="vector",
|
||||
geometry_type="Polygon",
|
||||
feature_count=10,
|
||||
crs="EPSG:25833",
|
||||
fields=None,
|
||||
source="/tmp/test.shp",
|
||||
editable=True,
|
||||
):
|
||||
self.exists = exists
|
||||
self.visible = visible
|
||||
self.layer_type = layer_type
|
||||
self.geometry_type = geometry_type
|
||||
self.feature_count = feature_count
|
||||
self.crs = crs
|
||||
self.fields = fields or []
|
||||
self.source = source
|
||||
self.editable = editable
|
||||
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Wrapper-Mocks (monkeypatching)
|
||||
# ---------------------------------------------------------
|
||||
def mock_layer_exists(layer):
|
||||
return layer is not None and layer.exists
|
||||
|
||||
|
||||
def mock_is_layer_visible(layer):
|
||||
return layer.visible
|
||||
|
||||
|
||||
def mock_get_layer_type(layer):
|
||||
return layer.layer_type
|
||||
|
||||
|
||||
def mock_get_layer_geometry_type(layer):
|
||||
return layer.geometry_type
|
||||
|
||||
|
||||
def mock_get_layer_feature_count(layer):
|
||||
return layer.feature_count
|
||||
|
||||
|
||||
def mock_get_layer_crs(layer):
|
||||
return layer.crs
|
||||
|
||||
|
||||
def mock_get_layer_fields(layer):
|
||||
return layer.fields
|
||||
|
||||
|
||||
def mock_get_layer_source(layer):
|
||||
return layer.source
|
||||
|
||||
|
||||
def mock_is_layer_editable(layer):
|
||||
return layer.editable
|
||||
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Testklasse
|
||||
# ---------------------------------------------------------
|
||||
class TestLayerpruefer(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
# Monkeypatching der Wrapper-Funktionen
|
||||
import sn_basis.functions.qgisqt_wrapper as wrapper
|
||||
|
||||
wrapper.layer_exists = mock_layer_exists
|
||||
wrapper.is_layer_visible = mock_is_layer_visible
|
||||
wrapper.get_layer_type = mock_get_layer_type
|
||||
wrapper.get_layer_geometry_type = mock_get_layer_geometry_type
|
||||
wrapper.get_layer_feature_count = mock_get_layer_feature_count
|
||||
wrapper.get_layer_crs = mock_get_layer_crs
|
||||
wrapper.get_layer_fields = mock_get_layer_fields
|
||||
wrapper.get_layer_source = mock_get_layer_source
|
||||
wrapper.is_layer_editable = mock_is_layer_editable
|
||||
|
||||
# -----------------------------------------------------
|
||||
# Tests
|
||||
# -----------------------------------------------------
|
||||
|
||||
def test_layer_exists(self):
|
||||
layer = MockLayer(exists=False)
|
||||
pruefer = Layerpruefer(layer)
|
||||
ergebnis = pruefer.pruefe()
|
||||
self.assertFalse(ergebnis.ok)
|
||||
self.assertEqual(ergebnis.aktion, "layer_nicht_gefunden")
|
||||
|
||||
def test_layer_unsichtbar(self):
|
||||
layer = MockLayer(visible=False)
|
||||
pruefer = Layerpruefer(layer, muss_sichtbar_sein=True)
|
||||
ergebnis = pruefer.pruefe()
|
||||
self.assertFalse(ergebnis.ok)
|
||||
self.assertEqual(ergebnis.aktion, "layer_unsichtbar")
|
||||
|
||||
def test_falscher_layertyp(self):
|
||||
layer = MockLayer(layer_type="raster")
|
||||
pruefer = Layerpruefer(layer, erwarteter_layertyp="vector")
|
||||
ergebnis = pruefer.pruefe()
|
||||
self.assertFalse(ergebnis.ok)
|
||||
self.assertEqual(ergebnis.aktion, "falscher_layertyp")
|
||||
|
||||
def test_falscher_geotyp(self):
|
||||
layer = MockLayer(geometry_type="Point")
|
||||
pruefer = Layerpruefer(layer, erwarteter_geotyp="Polygon")
|
||||
ergebnis = pruefer.pruefe()
|
||||
self.assertFalse(ergebnis.ok)
|
||||
self.assertEqual(ergebnis.aktion, "falscher_geotyp")
|
||||
|
||||
def test_layer_leer(self):
|
||||
layer = MockLayer(feature_count=0)
|
||||
pruefer = Layerpruefer(layer)
|
||||
ergebnis = pruefer.pruefe()
|
||||
self.assertFalse(ergebnis.ok)
|
||||
self.assertEqual(ergebnis.aktion, "layer_leer")
|
||||
|
||||
def test_falsches_crs(self):
|
||||
layer = MockLayer(crs="EPSG:4326")
|
||||
pruefer = Layerpruefer(layer, erwartetes_crs="EPSG:25833")
|
||||
ergebnis = pruefer.pruefe()
|
||||
self.assertFalse(ergebnis.ok)
|
||||
self.assertEqual(ergebnis.aktion, "falsches_crs")
|
||||
|
||||
def test_felder_fehlen(self):
|
||||
layer = MockLayer(fields=["id"])
|
||||
pruefer = Layerpruefer(layer, erforderliche_felder=["id", "name"])
|
||||
ergebnis = pruefer.pruefe()
|
||||
self.assertFalse(ergebnis.ok)
|
||||
self.assertEqual(ergebnis.aktion, "felder_fehlen")
|
||||
|
||||
def test_datenquelle_unerwartet(self):
|
||||
layer = MockLayer(source="/tmp/test.shp")
|
||||
pruefer = Layerpruefer(layer, erlaubte_datenquellen=["/tmp/allowed.shp"])
|
||||
ergebnis = pruefer.pruefe()
|
||||
self.assertFalse(ergebnis.ok)
|
||||
self.assertEqual(ergebnis.aktion, "datenquelle_unerwartet")
|
||||
|
||||
def test_layer_nicht_editierbar(self):
|
||||
layer = MockLayer(editable=False)
|
||||
pruefer = Layerpruefer(layer, muss_editierbar_sein=True)
|
||||
ergebnis = pruefer.pruefe()
|
||||
self.assertFalse(ergebnis.ok)
|
||||
self.assertEqual(ergebnis.aktion, "layer_nicht_editierbar")
|
||||
|
||||
def test_layer_ok(self):
|
||||
layer = MockLayer()
|
||||
pruefer = Layerpruefer(layer)
|
||||
ergebnis = pruefer.pruefe()
|
||||
self.assertTrue(ergebnis.ok)
|
||||
self.assertEqual(ergebnis.aktion, "ok")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user