Skip to content

Commit

Permalink
address review and add test
Browse files Browse the repository at this point in the history
  • Loading branch information
alexbruy committed Nov 27, 2023
1 parent c99488e commit 60cc164
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 8 deletions.
34 changes: 34 additions & 0 deletions Mergin/test/test_validations.py
Expand Up @@ -12,10 +12,15 @@
QgsMarkerSymbol,
QgsSvgMarkerSymbolLayer,
QgsSvgMarkerSymbolLayer,
QgsRasterLayer,
QgsVectorTileLayer,
QgsDataSourceUri,
)
from qgis.testing import start_app, unittest

from Mergin.validation import MerginProjectValidator, Warning, SingleLayerWarning
from Mergin.utils import TILES_URL


test_data_path = os.path.join(os.path.dirname(__file__), "data")

Expand Down Expand Up @@ -154,6 +159,35 @@ def test_embedded_svg(self):
validator.check_svgs_embedded()
self.assertTrue(len(validator.issues) == 0)

def test_local_mbtiles(self):
raster_tiles_path = os.path.join(test_data_path, "raster-tiles.mbtiles")
rt_layer = QgsRasterLayer(f"url=file://{raster_tiles_path}&type=mbtiles", "test_raster", "wms")
self.assertTrue(rt_layer.isValid())

vector_tiles_path = os.path.join(test_data_path, "vector-tiles.mbtiles")
vt_layer = QgsVectorTileLayer(f"url={vector_tiles_path}&type=mbtiles", "test_vector")
self.assertTrue(vt_layer.isValid())

validator = MerginProjectValidator()
validator.layers = {"test_raster": rt_layer, "test_vector": vt_layer}

validator.check_offline()
self.assertEqual(len(validator.issues), 0)
validator.issues = []

ds_uri = QgsDataSourceUri()
ds_uri.setParam("type", "xyz")
ds_uri.setParam("url", f"{TILES_URL}/data/default/{{z}}/{{x}}/{{y}}.pbf")
ds_uri.setParam("zmin", "0")
ds_uri.setParam("zmax", "14")
ds_uri.setParam("styleUrl", f"{TILES_URL}/styles/default.json")
vt_layer_online = QgsVectorTileLayer(bytes(ds_uri.encodedUri()).decode(), "test_vector_online")
self.assertTrue(vt_layer_online.isValid())

validator.layers["test_vector_online"] = vt_layer_online
validator.check_offline()
self.assertEqual(len(validator.issues), 1)


if __name__ == "__main__":
nose2.main()
13 changes: 5 additions & 8 deletions Mergin/validation.py
Expand Up @@ -200,15 +200,12 @@ def check_offline(self):
# might be vector tiles - no provider name
continue
if dp_name in QGIS_NET_PROVIDERS + QGIS_DB_PROVIDERS:
# raster mbtiles are loaded using WMS provider, so we need to
# check whether this is a local file or remote service
if dp_name.lower() == "wms":
uri = QgsProviderRegistry.instance().decodeUri("wms", layer.source())
is_local = os.path.isfile(uri["path"]) if "path" in uri else False
if not is_local:
w.items.append(layer.name())
else:
if "type=mbtiles" not in layer.source():
w.items.append(layer.name())
else:
if layer.type() == QgsMapLayerType.VectorTileLayer:
if "type=mbtiles" not in layer.source() and "type=vtpk" not in layer.source():
w.items.append(layer.name())

if w.items:
self.issues.append(w)
Expand Down

0 comments on commit 60cc164

Please sign in to comment.