summaryrefslogtreecommitdiff
path: root/js_tests
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2024-08-18 15:29:30 +0200
committernessita <124304+nessita@users.noreply.github.com>2025-06-12 17:35:14 -0300
commitf2f6046c0f92ff1faed057da0711ac478eef439c (patch)
tree56bcb44d903637bbdf319190a805e69eaf4d9f2a /js_tests
parente80b33ae4d6f93375b10b2fe50bd6f588f1246ad (diff)
Fixed #25706 -- Refactored geometry widgets to remove inline JavaScript.
Refactored GIS-related JavaScript initialization to eliminate inline scripts from templates. Added support for specifying a base layer using the new `base_layer_name` attribute on `BaseGeometryWidget`, allowing custom map tile providers via user-defined JavaScript. As a result, the `gis/openlayers-osm.html` template was removed. Thanks Sarah Boyce for reviews. Co-authored-by: Natalia <124304+nessita@users.noreply.github.com>
Diffstat (limited to 'js_tests')
-rw-r--r--js_tests/gis/mapwidget.test.js83
1 files changed, 82 insertions, 1 deletions
diff --git a/js_tests/gis/mapwidget.test.js b/js_tests/gis/mapwidget.test.js
index e0cc617a1e..723c63d22b 100644
--- a/js_tests/gis/mapwidget.test.js
+++ b/js_tests/gis/mapwidget.test.js
@@ -1,4 +1,4 @@
-/* global QUnit, MapWidget */
+/* global QUnit, MapWidget, ol */
'use strict';
QUnit.module('gis.OLMapWidget');
@@ -91,3 +91,84 @@ QUnit.test('MapWidget.IsCollection', function(assert) {
widget = new MapWidget(options);
assert.ok(widget.options.is_collection);
});
+
+QUnit.test('MapWidget.layerBuilder.osm returns OSM layer', function(assert) {
+ const layer = MapWidget.layerBuilder.osm();
+ assert.ok(layer instanceof ol.layer.Tile, 'Layer is Tile');
+ assert.ok(layer.getSource() instanceof ol.source.OSM, 'Source is OSM');
+});
+
+QUnit.test('MapWidget.layerBuilder.nasaWorldview returns XYZ layer', function(assert) {
+ const layer = MapWidget.layerBuilder.nasaWorldview();
+ assert.ok(layer instanceof ol.layer.Tile, 'Layer is Tile');
+ assert.ok(layer.getSource() instanceof ol.source.XYZ, 'Source is XYZ');
+ assert.ok(layer.getSource().getUrls()[0].includes('earthdata.nasa.gov'), 'URL is NASA-hosted');
+});
+
+QUnit.test('MapWidget uses default OSM base layer when none specified', function(assert) {
+ const widget = new MapWidget({
+ id: 'id_point',
+ map_id: 'id_point_map',
+ geom_name: 'Point'
+ });
+ assert.ok(widget.baseLayer.getSource() instanceof ol.source.OSM, 'Default base layer is OSM');
+});
+
+QUnit.test('MapWidget uses named base layer from layerBuilder', function(assert) {
+ const widget = new MapWidget({
+ id: 'id_point',
+ map_id: 'id_point_map',
+ geom_name: 'Point',
+ base_layer: 'nasaWorldview'
+ });
+ assert.ok(widget.baseLayer.getSource() instanceof ol.source.XYZ, 'Uses named base layer from builder');
+});
+
+QUnit.test('MapWidget uses passed-in base layer object directly', function(assert) {
+ const customLayer = new ol.layer.Tile({source: new ol.source.OSM()});
+ const widget = new MapWidget({
+ id: 'id_point',
+ map_id: 'id_point_map',
+ geom_name: 'Point',
+ base_layer: customLayer
+ });
+ assert.strictEqual(widget.baseLayer, customLayer, 'Uses provided layer object');
+});
+
+QUnit.test('initMapWidgetInSection initializes widgets and skips __prefix__', function(assert) {
+ const wrapper1 = document.createElement('div');
+ wrapper1.className = 'dj_map_wrapper';
+ wrapper1.id = 'id_point_map_wrapper';
+ wrapper1.innerHTML = `
+ <textarea id="id_point"></textarea>
+ <div class="dj_map" id="id_point_map"></div>
+ <script type="application/json" id="mapwidget-options">
+ { "geom_name": "Point" }
+ </script>
+ `;
+ document.body.appendChild(wrapper1);
+
+ const wrapper2 = document.createElement('div');
+ wrapper2.className = 'dj_map_wrapper';
+ wrapper2.id = 'form-__prefix__-map_wrapper';
+ wrapper2.innerHTML = `
+ <textarea id="id_fake"></textarea>
+ <div class="dj_map" id="id_fake_map"></div>
+ <script type="application/json" id="mapwidget-options">
+ { "geom_name": "MultiPoint" }
+ </script>
+ `;
+
+ document.body.appendChild(wrapper2);
+
+ const maps = window.initMapWidgetInSection(document);
+
+ assert.equal(maps.length, 1, 'Only one map widget is initialized');
+ assert.ok(maps[0] instanceof MapWidget, 'Map is instance of MapWidget');
+ assert.equal(maps[0].options.id, 'id_point', 'Correct widget was initialized');
+ assert.equal(maps[0].options.map_id, 'id_point_map', 'Map ID is correct');
+
+ // Clean up
+ wrapper1.remove();
+ wrapper2.remove();
+});