/* global QUnit, MapWidget, ol */ 'use strict'; QUnit.module('gis.OLMapWidget'); QUnit.test('MapWidget.featureAdded', function(assert) { const options = {id: 'id_point', map_id: 'id_point_map', geom_name: 'Point'}; const widget = new MapWidget(options); assert.equal(widget.featureCollection.getLength(), 1); widget.serializeFeatures(); assert.equal( document.getElementById('id_point').value, '{"type":"Point","coordinates":[7.8177,47.397]}', 'Point added to vector layer' ); }); QUnit.test('MapWidget.map_srid', function(assert) { const options = {id: 'id_point', map_id: 'id_point_map', geom_name: 'Point'}; const widget = new MapWidget(options); assert.equal(widget.map.getView().getProjection().getCode(), 'EPSG:3857', 'SRID 3857'); }); QUnit.test('MapWidget.defaultCenter', function(assert) { const options = {id: 'id_point', map_id: 'id_point_map', geom_name: 'Point'}; let widget = new MapWidget(options); assert.equal(widget.defaultCenter().toString(), '0,0', 'Default center at 0, 0'); options.default_lat = 47.08; options.default_lon = 6.81; widget = new MapWidget(options); assert.equal( widget.defaultCenter().toString(), '6.81,47.08', 'Default center at 6.81, 47.08' ); assert.equal(Math.round(widget.map.getView().getZoom()), 17); }); QUnit.test('MapWidget.interactions', function(assert) { const options = {id: 'id_point', map_id: 'id_point_map', geom_name: 'Point'}; const widget = new MapWidget(options); assert.equal(Object.keys(widget.interactions).length, 2); assert.equal(widget.interactions.draw.getActive(), false, "Draw is inactive with an existing point"); assert.equal(widget.interactions.modify.getActive(), true, "Modify is active with an existing point"); }); QUnit.test('MapWidget.clearFeatures', function(assert) { const options = {id: 'id_point', map_id: 'id_point_map', geom_name: 'Point'}; const widget = new MapWidget(options); const initial_value = document.getElementById('id_point').value; widget.clearFeatures(); assert.equal(document.getElementById('id_point').value, ""); document.getElementById('id_point').value = initial_value; }); QUnit.test('MapWidget.multipolygon', function(assert) { const options = {id: 'id_multipolygon', map_id: 'id_multipolygon_map', geom_name: 'MultiPolygon'}; const widget = new MapWidget(options); assert.ok(widget.options.is_collection); assert.equal(widget.interactions.draw.getActive(), true, "Draw is active with no existing content"); }); QUnit.test('MapWidget.IsCollection', function(assert) { const options = {id: 'id_point', map_id: 'id_point_map', geom_name: 'Point'}; let widget = new MapWidget(options); assert.notOk(widget.options.is_collection); // Empty the default initial Point document.getElementById('id_point').value = ""; options.geom_name = 'Polygon'; widget = new MapWidget(options); assert.notOk(widget.options.is_collection); options.geom_name = 'LineString'; widget = new MapWidget(options); assert.notOk(widget.options.is_collection); options.geom_name = 'MultiPoint'; widget = new MapWidget(options); assert.ok(widget.options.is_collection); options.geom_name = 'MultiPolygon'; widget = new MapWidget(options); assert.ok(widget.options.is_collection); options.geom_name = 'MultiLineString'; widget = new MapWidget(options); assert.ok(widget.options.is_collection); options.geom_name = 'GeometryCollection'; 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 = `
`; document.body.appendChild(wrapper1); const wrapper2 = document.createElement('div'); wrapper2.className = 'dj_map_wrapper'; wrapper2.id = 'form-__prefix__-map_wrapper'; wrapper2.innerHTML = `
`; 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(); });