diff --git a/docs/developer-guide/local-config.md b/docs/developer-guide/local-config.md index 1b0e74ad9d..1878a75fce 100644 --- a/docs/developer-guide/local-config.md +++ b/docs/developer-guide/local-config.md @@ -190,6 +190,7 @@ Set `selectedService` value to one of the ID of the services object ("Demo CSW S "format": "image/png8" // the image format to use by default for layers coming from this catalog (or tiles). "layerOptions": { // optional "format": "image/png8", // image format needs to be configured also inside layerOptions + "serverType": "geoserver or no-vendor, depending on this some geoserver vendor extensions will be used for WMS requests.", "tileSize": 512 // determine the default tile size for the catalog, valid for WMS and CSW catalogs }, "filter": { // applicable only for CSW service diff --git a/web/client/api/catalog/WMS.js b/web/client/api/catalog/WMS.js index 4cc94a23e1..8f4ff9262e 100644 --- a/web/client/api/catalog/WMS.js +++ b/web/client/api/catalog/WMS.js @@ -39,7 +39,8 @@ const recordToLayer = (record, { map = {}, layerBaseConfig, localizedLayerStyles, - allowUnsecureLayers + allowUnsecureLayers, + service } = {}) => { if (!record || !record.references) { // we don't have a valid record so no buttons to add @@ -103,6 +104,7 @@ const recordToLayer = (record, { allowedSRS: allowedSRS, catalogURL, ...layerBaseConfig, + ...service?.layerOptions, ...record.layerOptions, localizedLayerStyles: !isNil(localizedLayerStyles) ? localizedLayerStyles : undefined, ...(!isEmpty(formats) && {imageFormats: formats.imageFormats, infoFormats: formats.infoFormats}), diff --git a/web/client/api/catalog/__tests__/WMS-test.js b/web/client/api/catalog/__tests__/WMS-test.js index 4b1f5f7d14..1f67ceab24 100644 --- a/web/client/api/catalog/__tests__/WMS-test.js +++ b/web/client/api/catalog/__tests__/WMS-test.js @@ -90,12 +90,14 @@ describe('Test correctness of the WMS APIs', () => { }, { url: 'http://sample', layerOptions: { - tileSize: 512 + tileSize: 512, + serverType: "no-vendor" } }); expect(records.length).toBe(1); const layer = getLayerFromRecord(records[0]); expect(layer.tileSize).toBe(512); + expect(layer.serverType).toBe("no-vendor"); }); it('wms layer with visibility limits', () => { diff --git a/web/client/components/TOC/fragments/settings/Display.jsx b/web/client/components/TOC/fragments/settings/Display.jsx index 3b994a496c..2757abf55a 100644 --- a/web/client/components/TOC/fragments/settings/Display.jsx +++ b/web/client/components/TOC/fragments/settings/Display.jsx @@ -17,6 +17,7 @@ import Message from '../../../I18N/Message'; import InfoPopover from '../../../widgets/widget/InfoPopover'; import Legend from '../legend/Legend'; import VisibilityLimitsForm from './VisibilityLimitsForm'; +import { ServerTypes } from '../../../../utils/LayersUtils'; import Select from 'react-select'; import { DEFAULT_FORMAT_WMS, getSupportedFormat } from '../../../../api/WMS'; export default class extends React.Component { @@ -155,7 +156,7 @@ export default class extends React.Component { - + - WMS Layer tile size + onChangeServiceProperty("layerOptions", { ...service.layerOptions, serverType: event?.value })} /> + + {!isNil(service.type) && service.type === "csw" && } diff --git a/web/client/components/catalog/editor/AdvancedSettings/__tests__/RasterAdvancedSettings-test.js b/web/client/components/catalog/editor/AdvancedSettings/__tests__/RasterAdvancedSettings-test.js index 344bd2ad93..48ab178a9b 100644 --- a/web/client/components/catalog/editor/AdvancedSettings/__tests__/RasterAdvancedSettings-test.js +++ b/web/client/components/catalog/editor/AdvancedSettings/__tests__/RasterAdvancedSettings-test.js @@ -33,7 +33,7 @@ describe('Test Raster advanced settings', () => { const advancedSettingPanel = document.getElementsByClassName("mapstore-switch-panel"); expect(advancedSettingPanel).toBeTruthy(); const fields = document.querySelectorAll(".form-group"); - expect(fields.length).toBe(10); + expect(fields.length).toBe(11); }); it('test csw advanced options', () => { ReactDOM.render(, document.getElementById("container")); @@ -41,7 +41,7 @@ describe('Test Raster advanced settings', () => { expect(advancedSettingPanel).toBeTruthy(); const fields = document.querySelectorAll(".form-group"); const cswFilters = document.getElementsByClassName("catalog-csw-filters"); - expect(fields.length).toBe(8); + expect(fields.length).toBe(9); expect(cswFilters).toBeTruthy(); }); it('test component onChangeServiceProperty autoload', () => { @@ -217,11 +217,29 @@ describe('Test Raster advanced settings', () => { const advancedSettingsPanel = document.getElementsByClassName("mapstore-switch-panel"); expect(advancedSettingsPanel).toBeTruthy(); const formGroup = document.querySelectorAll('.form-group')[3]; - expect(formGroup.textContent.trim()).toBe('catalog.singleTile.label'); + expect(formGroup.textContent.trim()).toBe('layerProperties.singleTile'); const singleTileLayer = formGroup.querySelector('input[type="checkbox"]'); expect(singleTileLayer).toBeTruthy(); TestUtils.Simulate.change(singleTileLayer, { "target": { "checked": true }}); expect(spyOn).toHaveBeenCalled(); expect(spyOn.calls[0].arguments).toEqual([ 'layerOptions', { singleTile: true } ]); }); + it('test component onChangeServiceProperty serverType', () => { + const action = { + onChangeServiceProperty: () => {} + }; + const spyOn = expect.spyOn(action, 'onChangeServiceProperty'); + ReactDOM.render(, document.getElementById("container")); + const advancedSettingsPanel = document.getElementsByClassName("mapstore-switch-panel"); + expect(advancedSettingsPanel).toBeTruthy(); + const serverTypeOption = document.querySelectorAll('input[role="combobox"]')[2]; + expect(serverTypeOption).toBeTruthy(); + TestUtils.Simulate.change(serverTypeOption, { target: { value: "geoserver" }}); + TestUtils.Simulate.keyDown(serverTypeOption, { keyCode: 9, key: 'Tab' }); + expect(spyOn).toHaveBeenCalled(); + expect(spyOn.calls[0].arguments).toEqual([ 'layerOptions', { serverType: "geoserver" } ]); + }); }); diff --git a/web/client/components/map/cesium/plugins/WMSLayer.js b/web/client/components/map/cesium/plugins/WMSLayer.js index 5e3a78338a..4b8c52b2cc 100644 --- a/web/client/components/map/cesium/plugins/WMSLayer.js +++ b/web/client/components/map/cesium/plugins/WMSLayer.js @@ -12,7 +12,7 @@ import GeoServerBILTerrainProvider from '../../../../utils/cesium/GeoServerBILTe import assign from 'object-assign'; import {isArray, isEqual} from 'lodash'; import WMSUtils from '../../../../utils/cesium/WMSUtils'; -import { getAuthenticationParam, getURLs } from '../../../../utils/LayersUtils'; +import { getAuthenticationParam, getURLs, getWMSVendorParams } from '../../../../utils/LayersUtils'; import { optionsToVendorParams } from '../../../../utils/VendorParamsUtils'; import { addAuthenticationToSLD, getAuthenticationHeaders } from '../../../../utils/SecurityUtils'; @@ -30,7 +30,7 @@ function wmsToCesiumOptionsSingleTile(options) { format: isVectorFormat(options.format) && 'image/png' || options.format || 'image/png', transparent: options.transparent !== undefined ? options.transparent : true, opacity: opacity, - tiled: options.tiled !== undefined ? options.tiled : true, + ...getWMSVendorParams(options), layers: options.name, width: options.size || 2000, height: options.size || 2000, diff --git a/web/client/components/map/leaflet/plugins/WMSLayer.js b/web/client/components/map/leaflet/plugins/WMSLayer.js index 4ab4ed3acb..51192c1eec 100644 --- a/web/client/components/map/leaflet/plugins/WMSLayer.js +++ b/web/client/components/map/leaflet/plugins/WMSLayer.js @@ -15,7 +15,7 @@ import objectAssign from 'object-assign'; import {isArray, isNil} from 'lodash'; import {addAuthenticationToSLD, addAuthenticationParameter} from '../../../../utils/SecurityUtils'; import { loadTile, getElevation } from '../../../../utils/ElevationUtils'; -import { creditsToAttribution } from '../../../../utils/LayersUtils'; +import { creditsToAttribution, getWMSVendorParams } from '../../../../utils/LayersUtils'; import { isVectorFormat } from '../../../../utils/VectorTileUtils'; @@ -170,7 +170,7 @@ function wmsToLeafletOptions(options) { styles: options.style || "", format: isVectorFormat(options.format) && 'image/png' || options.format || 'image/png', transparent: options.transparent !== undefined ? options.transparent : true, - tiled: options.tiled !== undefined ? options.tiled : true, + ...getWMSVendorParams(options), opacity: opacity, zIndex: options.zIndex, version: options.version || "1.3.0", diff --git a/web/client/components/map/openlayers/plugins/WMSLayer.js b/web/client/components/map/openlayers/plugins/WMSLayer.js index 8d06af0ff9..87ad6931ce 100644 --- a/web/client/components/map/openlayers/plugins/WMSLayer.js +++ b/web/client/components/map/openlayers/plugins/WMSLayer.js @@ -20,7 +20,7 @@ import { getConfigProp } from '../../../../utils/ConfigUtils'; import {optionsToVendorParams} from '../../../../utils/VendorParamsUtils'; import {addAuthenticationToSLD, addAuthenticationParameter, getAuthenticationHeaders} from '../../../../utils/SecurityUtils'; -import { creditsToAttribution } from '../../../../utils/LayersUtils'; +import { creditsToAttribution, getWMSVendorParams } from '../../../../utils/LayersUtils'; import MapUtils from '../../../../utils/MapUtils'; import {loadTile, getElevation as getElevationFunc} from '../../../../utils/ElevationUtils'; @@ -123,7 +123,7 @@ function wmsToOpenlayersOptions(options) { TRANSPARENT: options.transparent !== undefined ? options.transparent : true, SRS: CoordinatesUtils.normalizeSRS(options.srs || 'EPSG:3857', options.allowedSRS), CRS: CoordinatesUtils.normalizeSRS(options.srs || 'EPSG:3857', options.allowedSRS), - TILED: options.singleTile ? false : (!isNil(options.tiled) ? options.tiled : true), + ...getWMSVendorParams(options), VERSION: options.version || "1.3.0" }, assign( {}, diff --git a/web/client/epics/catalog.js b/web/client/epics/catalog.js index d2cf78ac4a..48fdf1876f 100644 --- a/web/client/epics/catalog.js +++ b/web/client/epics/catalog.js @@ -176,13 +176,13 @@ export default (API) => ({ API[format] .textSearch(url, startPosition, maxRecords, text, { ...layerOptions, ...service, options: { service } }) .catch(() => ({ records: [] })) - ).map(r => ({ ...r, format, url, text, layerOptions })); + ).map(r => ({ ...r, format, url, text, layerOptions, service })); }); return Rx.Observable.forkJoin(actions) .switchMap((results) => { if (isArray(results) && results.length) { return Rx.Observable.of(results.map(r => { - const { format, url, text, layerOptions, ...result } = r; + const { format, url, text, layerOptions, service, ...result } = r; const locales = currentMessagesSelector(state); const records = API[format].getCatalogRecords(result, layerOptions, locales) || []; const record = head(records.filter(rec => rec.identifier || rec.name === text)); // exact match of text and record identifier @@ -198,6 +198,7 @@ export default (API) => ({ const layerBaseConfig = {}; // DO WE NEED TO FETCH IT FROM STATE??? const authkeyParamName = authkeyParamNameSelector(state); const layer = API[format].getLayerFromRecord(record, { + service, removeParams: authkeyParamName, catalogURL: format === 'csw' && url ? url + "?request=GetRecordById&service=CSW&version=2.0.2&elementSetName=full&id=" + record.identifier diff --git a/web/client/plugins/widgetbuilder/CatalogServiceEditor.jsx b/web/client/plugins/widgetbuilder/CatalogServiceEditor.jsx index d8fe4c789e..6a206850c2 100644 --- a/web/client/plugins/widgetbuilder/CatalogServiceEditor.jsx +++ b/web/client/plugins/widgetbuilder/CatalogServiceEditor.jsx @@ -2,7 +2,6 @@ import React, { useState } from 'react'; import { isEmpty } from 'lodash'; import uuid from 'uuid'; -import {set} from "../../utils/ImmutableUtils"; import CatalogServiceEditorComponent from '../../components/catalog/CatalogServiceEditor'; import { DEFAULT_ALLOWED_PROVIDERS } from '../MetadataExplorer'; @@ -41,17 +40,8 @@ export default ({service: defaultService, catalogServices, onAddService(newService, existingServices, isNew); }; - const handleChangeServiceFormat = (property, value) => { - let currentData = service; - if (property === "provider") { - currentData.provider = value; - } - if (currentData[property]) { - currentData[property] = typeof value === 'boolean' ? !(currentData[property]) : value; - } else { - currentData = set(`${property}`, value, currentData); - } - setService(currentData); + const handleChangeServiceProperty = (property, value) => { + setService({ ...service, [property]: value }); }; return (
@@ -63,7 +53,7 @@ export default ({service: defaultService, catalogServices, onChangeServiceFormat={(format) => setService({...service, format})} onToggleAdvancedSettings={() => setService({...service, showAdvancedSettings: !service.showAdvancedSettings})} onAddService={addNewService} - onChangeServiceProperty={handleChangeServiceFormat} + onChangeServiceProperty={handleChangeServiceProperty} onToggleTemplate={() => setService({...service, showTemplate: !service.showTemplate})} onToggleThumbnail={() => setService({...service, hideThumbnail: !service.hideThumbnail})} serviceTypes={[{ name: "csw", label: "CSW" }, { name: "wms", label: "WMS" }, diff --git a/web/client/plugins/widgetbuilder/enhancers/layerSelector.js b/web/client/plugins/widgetbuilder/enhancers/layerSelector.js index 6e68720774..5dba1ae0f5 100644 --- a/web/client/plugins/widgetbuilder/enhancers/layerSelector.js +++ b/web/client/plugins/widgetbuilder/enhancers/layerSelector.js @@ -16,7 +16,7 @@ import API from '../../../api/catalog'; export const toLayer = (r, service) => ["tms", "wfs"].includes(service?.type) // for tms and wfs the layer is ready ? r // the type wms is default (for csw and wms), wmts have to be passed. // TODO: improve and centralize more - : API[service?.type || 'wms'].getLayerFromRecord(r); + : API[service?.type || 'wms'].getLayerFromRecord(r, { service }); // checks for tms wmts in order to addSearch() to skip addSearch export const addSearchObservable = (selected, service) => ["tms", "wmts"].includes(service?.type) ? Rx.Observable.of(toLayer(selected, service)) : addSearch(toLayer(selected, service)); diff --git a/web/client/translations/data.de-DE.json b/web/client/translations/data.de-DE.json index 59f857f731..84c2383379 100644 --- a/web/client/translations/data.de-DE.json +++ b/web/client/translations/data.de-DE.json @@ -113,6 +113,12 @@ "templateError": "Beim Anwenden der Vorlage auf die vom Server zurückgegebenen Informationen ist ein Fehler aufgetreten. Bitte überprüfen Sie die Vorlage", "templatePreview": "Vorschau template", "heightOffset": "Höhenversatz (m)", + "wmsLayerTileSize": "Kachelgröße (WMS)", + "serverType": "Servertyp", + "serverTypeOption": { + "noVendor": "No Vendor", + "geoserver": "GeoServer" + }, "visibilityLimits": { "title": "Sichtbarkeitsgrenzen", "serverValuesUpdateUndefined": "Der Server hat keine Skalierungssichtbarkeitsbeschränkungen für diese Ebene angegeben", @@ -1540,7 +1546,6 @@ "tooltip": "Wendet automatisch die vom Server vorgeschlagenen Sichtbarkeitsgrenzen an" }, "singleTile": { - "label": "Single Tile", "tooltip": "Die Ebene wird als einzelnes Kachelbild gerendert, wenn sie mit aktivierter Option zur Karte hinzugefügt wird." }, "domainAliases": { diff --git a/web/client/translations/data.en-US.json b/web/client/translations/data.en-US.json index 3fdefd1769..1a51a538a4 100644 --- a/web/client/translations/data.en-US.json +++ b/web/client/translations/data.en-US.json @@ -113,6 +113,12 @@ "templateError": "There was an error applying the template to the information returned by the server, please check the template", "templatePreview": "Template preview", "heightOffset": "Height offset (m)", + "wmsLayerTileSize": "Tile size (WMS)", + "serverType": "Server Type", + "serverTypeOption": { + "noVendor": "No Vendor", + "geoserver": "GeoServer" + }, "visibilityLimits": { "title": "Visibility limits", "serverValuesUpdateUndefined": "The server did not provided scale visibility limits for this layer", @@ -1502,7 +1508,6 @@ "tooltip": "Automatically applies the visibility limits suggested by the server" }, "singleTile": { - "label": "Single Tile", "tooltip": "The layer is rendered as a single tile image when added to the map with this option enabled" }, "allowUnsecureLayers": { diff --git a/web/client/translations/data.es-ES.json b/web/client/translations/data.es-ES.json index 40dfe85a2f..4c96e8f5c9 100644 --- a/web/client/translations/data.es-ES.json +++ b/web/client/translations/data.es-ES.json @@ -110,6 +110,12 @@ "templateFormatInfoAlert1": "Haga clic en el botón Editar para agregar una nueva plantilla.", "templateFormatInfoAlert2": "Use ${ attribute } para ajustar las propiedades que necesita visualizar", "heightOffset": "Desplazamiento de altura (m)", + "wmsLayerTileSize": "Tamaño del mosaico (WMS)", + "serverType": "Tipo de servidor", + "serverTypeOption": { + "noVendor": "No Vendor", + "geoserver": "GeoServer" + }, "visibilityLimits": { "title": "Límites de visibilidad", "serverValuesUpdateUndefined": "El servidor no proporcionó límites de visibilidad de escala para esta capa", @@ -1502,7 +1508,6 @@ "tooltip": "Aplica automáticamente los límites de visibilidad sugeridos por el servidor" }, "singleTile": { - "label": "Single Tile", "tooltip": "La capa se representa como una sola imagen de mosaico cuando se agrega al mapa con esta opción habilitada" }, "domainAliases": { diff --git a/web/client/translations/data.fr-FR.json b/web/client/translations/data.fr-FR.json index d472425e0c..69ec5e1975 100644 --- a/web/client/translations/data.fr-FR.json +++ b/web/client/translations/data.fr-FR.json @@ -113,6 +113,12 @@ "templateError": "Une erreur s'est produite lors de l'application du modèle aux informations renvoyées par le serveur, veuillez vérifier le modèle", "templatePreview": "Aperçu du modèle", "heightOffset": "Décalage en hauteur (m)", + "wmsLayerTileSize": "Taille de la tuile (WMS)", + "serverType": "Type de serveur", + "serverTypeOption": { + "noVendor": "No Vendor", + "geoserver": "GeoServer" + }, "visibilityLimits": { "title": "Limites de visibilité", "serverValuesUpdateUndefined": "Le serveur n'a pas fourni de limites de visibilité d'échelle pour cette couche", @@ -1503,7 +1509,6 @@ "tooltip": "Applique automatiquement les limites de visibilité suggérées par le serveur" }, "singleTile": { - "label": "Single Tile", "tooltip": "Lorsque cette option est activée, la couche ajoutée à la carte est rendue sous la forme d'une seule image" }, "domainAliases": { diff --git a/web/client/translations/data.it-IT.json b/web/client/translations/data.it-IT.json index 354988af37..7cf27b8fa5 100644 --- a/web/client/translations/data.it-IT.json +++ b/web/client/translations/data.it-IT.json @@ -113,6 +113,12 @@ "templateError": "Si è verificato un errore durante l'applicazione del template alle informazioni restituite dal server, controllare il template.", "templatePreview": "Anteprima template", "heightOffset": "Spostamento in altezza (m)", + "wmsLayerTileSize": "Dimensione tile (WMS)", + "serverType": "Tipo di Server", + "serverTypeOption": { + "noVendor": "No Vendor", + "geoserver": "GeoServer" + }, "visibilityLimits": { "title": "Limiti di visibilità", "serverValuesUpdateUndefined": "Il server non ha fornito limiti di visibilità di scala per questo livello", @@ -1502,7 +1508,6 @@ "tooltip": "Applica automaticamente i limiti di visibilità suggeriti dal server" }, "singleTile": { - "label": "Single Tile", "tooltip": "Il layer viene renderizzato come immagine a singola tile quando aggiunto alla mappa con questa opzione abilitata" }, "domainAliases": { diff --git a/web/client/utils/LayersUtils.js b/web/client/utils/LayersUtils.js index 3ea5292dbd..00bbd754dc 100644 --- a/web/client/utils/LayersUtils.js +++ b/web/client/utils/LayersUtils.js @@ -628,6 +628,7 @@ export const saveLayer = (layer) => { featureInfo: layer.featureInfo, catalogURL: layer.catalogURL, capabilitiesURL: layer.capabilitiesURL, + serverType: layer.serverType, useForElevation: layer.useForElevation || false, hidden: layer.hidden || false, origin: layer.origin, @@ -646,6 +647,16 @@ export const saveLayer = (layer) => { layer.credits ? { credits: layer.credits } : {}, !isNil(layer.forceProxy) ? { forceProxy: layer.forceProxy } : {}); }; + +/** + * constants to specify whether we can use some geoserver vendor extensions of if they + * should rather be avoided +*/ +export const ServerTypes = { + GEOSERVER: 'geoserver', + NO_VENDOR: 'no-vendor' +}; + /** * default initial constant regex rule for searching for a /geoserver/ string in a url * useful for a reset to an initial state of the rule @@ -837,6 +848,17 @@ export const removeWorkspace = (layer) => { return layer; }; +/** + * Returns vendor params that can be used when calling wms server for display requests + * @param {layer} the layer object + */ +export const getWMSVendorParams = (layer) => { + if (layer?.serverType === ServerTypes.NO_VENDOR) { + return {}; + } + return { TILED: layer.singleTile ? false : (!isNil(layer.tiled) ? layer.tiled : true)}; +}; + LayersUtils = { getGroupByName, getLayerId, diff --git a/web/client/utils/PrintUtils.js b/web/client/utils/PrintUtils.js index e2d835e9ed..d1c0a533d6 100644 --- a/web/client/utils/PrintUtils.js +++ b/web/client/utils/PrintUtils.js @@ -21,6 +21,7 @@ import { get as getProjection } from 'ol/proj'; import { isArray, filter, find, isEmpty, toNumber, castArray, reverse } from 'lodash'; import { getFeature } from '../api/WFS'; import { generateEnvString } from './LayerLocalizationUtils'; +import { ServerTypes } from './LayersUtils'; import url from 'url'; import { getStore } from "./StateUtils"; @@ -495,6 +496,17 @@ export function getResolutionMultiplier(printSize, screenSize, dpiRatio = DEFAUL return printSize / screenSize * dpiRatio; } +/** + * Returns vendor params that can be used when calling wms server for print requests + * @param {layer} the layer object + */ +export const getPrintVendorParams = (layer) => { + if (layer?.serverType === ServerTypes.NO_VENDOR) { + return {}; + } + return { "TILED": true }; +}; + /** * Generate the layers (or legend) specification for print. * @param {array} layers the layers configurations @@ -523,7 +535,7 @@ export const specCreators = { ], "customParams": addAuthenticationParameter(PrintUtils.normalizeUrl(layer.url), assign({ "TRANSPARENT": true, - "TILED": true, + ...getPrintVendorParams(layer), "EXCEPTIONS": "application/vnd.ogc.se_inimage", "scaleMethod": "accurate", "ENV": generateEnvString(spec.env) diff --git a/web/client/utils/__tests__/LayersUtils-test.js b/web/client/utils/__tests__/LayersUtils-test.js index 6b75943114..24f1a1b0ee 100644 --- a/web/client/utils/__tests__/LayersUtils-test.js +++ b/web/client/utils/__tests__/LayersUtils-test.js @@ -32,6 +32,10 @@ const mapquestLayerWithoutApikey = { const wmsLayer = { type: 'wms' }; +const noVendorWmsLayer = { + type: 'wms', + serverType: 'no-vendor' +}; describe('LayersUtils', () => { it('getLayerUrl supports single and multiple url layers', () => { expect(['a', 'b']).toContain(LayersUtils.getLayerUrl({url: ['a', 'b']})); @@ -1409,4 +1413,9 @@ describe('LayersUtils', () => { expect(LayersUtils.removeWorkspace('workspace:layerName')).toBe('layerName'); expect(LayersUtils.removeWorkspace('layerName')).toBe('layerName'); }); + it('getWMSVendorParams', () => { + const params = LayersUtils.getWMSVendorParams(wmsLayer); + expect(params.TILED).toBe(true); + expect(LayersUtils.getWMSVendorParams(noVendorWmsLayer)).toEqual({}); + }); }); diff --git a/web/client/utils/__tests__/MapUtils-test.js b/web/client/utils/__tests__/MapUtils-test.js index 07661d5ea7..ec8b6b68a9 100644 --- a/web/client/utils/__tests__/MapUtils-test.js +++ b/web/client/utils/__tests__/MapUtils-test.js @@ -326,6 +326,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -375,6 +376,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -424,6 +426,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -473,6 +476,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -695,6 +699,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -744,6 +749,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -793,6 +799,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -842,6 +849,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -891,6 +899,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -940,6 +949,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -1129,6 +1139,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -1178,6 +1189,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -1227,6 +1239,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -1431,6 +1444,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -1485,6 +1499,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -1533,6 +1548,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -1702,6 +1718,7 @@ describe('Test the MapUtils', () => { thumbURL: undefined, group: undefined, search: {}, + serverType: undefined, source: undefined, name: 'annotations', opacity: undefined, @@ -1873,6 +1890,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -2037,6 +2055,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -2241,6 +2260,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -2290,6 +2310,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -2339,6 +2360,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, @@ -2388,6 +2410,7 @@ describe('Test the MapUtils', () => { params: {}, provider: undefined, search: {}, + serverType: undefined, singleTile: false, source: undefined, style: undefined, diff --git a/web/client/utils/__tests__/PrintUtils-test.js b/web/client/utils/__tests__/PrintUtils-test.js index 9f68a0f447..0a352c8d6e 100644 --- a/web/client/utils/__tests__/PrintUtils-test.js +++ b/web/client/utils/__tests__/PrintUtils-test.js @@ -24,6 +24,7 @@ import { getMapTransformerChain, getSpecTransformerChain, getValidatorsChain, + getPrintVendorParams, resetDefaultPrintingService, getDefaultPrintingService } from '../PrintUtils'; @@ -41,6 +42,13 @@ const layer = { params: { myparam: "myvalue" } }; +const noVendorLayer = { + url: "http://mapproxy", + name: "some_layer", + type: "wms", + serverType: "no-vendor" +}; + const layerSottoPasso = { id: 'DBT:SOTTOPASSO__6', type: 'wms', @@ -519,6 +527,17 @@ describe('PrintUtils', () => { expect(rgb).toExist(); expect(rgb).toBe("rgb(255, 255, 255)"); }); + it('getPrintVendorParams default', () => { + const params = getPrintVendorParams(layer); + expect(params).toExist(); + expect(params.TILED).toBe(true); + }); + it('getPrintVendorParams no-vendor', () => { + const params = getPrintVendorParams(noVendorLayer); + expect(params).toExist(); + expect(params).toEqual({}); + }); + describe('specCreators', () => { describe('opacity', () => { const testBase = {