@geogirafe/lib-geoportal
Version:
GeoGirafe is a flexible application to build online geoportals.
163 lines (162 loc) • 7.31 kB
JavaScript
import { expect, describe, it, beforeEach, afterAll } from 'vitest';
import MFPEncoder from './MFPEncoder';
import MockHelper from '../../../tools/tests/mockhelper';
import MapManager from '../../../tools/state/mapManager';
import StateManager from '../../../tools/state/statemanager';
import Basemap from '../../../models/basemap';
import { createTestLayerWmts, createTestLayerWms, createTestGroupLayer, createTestOgcServer } from '../../../tools/tests/layerhelpers';
import { createOlVectorLayer, createOlWmtsLayer } from '../../../tools/tests/olhelpers';
import { BaseCustomizer } from '@geoblocks/mapfishprint';
describe('MFPEncoder', () => {
let encoder = new MFPEncoder();
let encoderAsAny = encoder;
let defaultOptions = {};
const setPartialOptions = (options) => {
encoder.setOptions({
...defaultOptions,
...options
});
};
beforeEach(() => {
MockHelper.startMocking();
defaultOptions = {
state: StateManager.getInstance().state,
mapManager: MapManager.getInstance(),
scale: 10000,
printResolution: 254,
dpi: 96,
customizer: new BaseCustomizer()
};
setPartialOptions({});
});
afterAll(() => {
MockHelper.stopMocking();
});
describe('encodeLayer', () => {
let topLevelGroup;
let groupLayers;
let layers;
beforeEach(() => {
layers = [...Array(3)].map((_, index) => {
const layer = createTestLayerWms();
layer.layers = `wms-${index}`;
return layer;
});
const wmtsLayer = createTestLayerWmts();
wmtsLayer._olayer = createOlWmtsLayer();
layers.push(wmtsLayer);
groupLayers = [...Array(4)].map((_) => {
return createTestGroupLayer();
});
groupLayers[0].children = [layers[0], layers[1]];
groupLayers[1].children = [layers[2]];
groupLayers[2].children = [layers[3], groupLayers[0]];
groupLayers[3].children = [groupLayers[1], groupLayers[2]];
topLevelGroup = [groupLayers[3]];
});
it('getFlatLayersGroupLayers', () => {
const result = encoder.getFlatLayers(topLevelGroup);
expect(result.length).toBe(4); // 4 wms layers
});
it('encode the map', () => {
StateManager.getInstance().state.layers.layersList = topLevelGroup;
const baseMap = createTestLayerWmts();
baseMap._olayer = createOlWmtsLayer();
baseMap.name = 'basemap-below';
const activeBasemap = (StateManager.getInstance().state.activeBasemap = new Basemap({ id: 1, name: 'test' }));
activeBasemap.layersList = [baseMap];
const vectorLayer = createOlVectorLayer();
vectorLayer.set('addToPrintedLayers', true);
MapManager.getInstance().getMap().addLayer(vectorLayer);
MapManager.getInstance().getMap().getView().setRotation(Math.PI);
const result = encoder.encodeMap(encoderAsAny.options);
expect(result.dpi).toBe(defaultOptions.dpi);
expect(result.scale).toBe(defaultOptions.scale);
expect(result.rotation).toBe(180);
expect(result.layers.length).toBe(6);
// Test order
expect(result.layers[0].name).toBe('Test Vector layer');
expect(result.layers[5].name).toBe('basemap-below');
});
});
describe('encodeImageLayer method', () => {
it('should return null for not visible layer', () => {
const layer = createTestLayerWms({ opacity: 0 });
const result = encoder.encodeImageLayer(layer);
expect(result).toEqual(null);
});
it('should encode a wms layer', () => {
const layer = createTestLayerWms({ layers: 'tree,plant', opacity: 0.6 });
const result = encoder.encodeImageLayer(layer);
expect(result).toEqual({
baseURL: 'https://ogc.test.url/',
customParams: {
TRANSPARENT: 'true'
},
imageFormat: 'image/png',
layers: ['tree', 'plant'],
opacity: 0.6,
serverType: undefined,
styles: ['', ''],
type: 'wms',
useNativeAngle: undefined
});
});
});
describe('encodeTileWmtsLayer', () => {
it('Testing encodeTileWmtsLayer method with inactive layer', () => {
const layer = createTestLayerWmts({ opacity: 0 });
const result = encoder.encodeTileWmtsLayer(layer);
expect(result).toBe(null);
});
it('Testing encodeTileWmtsLayer method', () => {
const layer = createTestLayerWmts();
layer._olayer = createOlWmtsLayer();
const result = encoder.encodeTileWmtsLayer(layer);
const urls = layer._olayer.getSource()?.getUrls() ?? [];
expect(result?.baseURL).toEqual(urls[0]);
expect(result?.imageFormat).toBe(layer._olayer.getSource()?.getFormat());
expect(result?.layer).toBe(layer._olayer.getSource()?.getLayer());
expect(result?.opacity).toBe(layer.opacity);
expect(result?.name).toBe(layer.name);
expect(result?.type).toBe('wmts');
});
it('Testing encodeTileWmtsLayer method with a WMTS Layer which has a configured WMS layer for the print. ', () => {
const layer = createTestLayerWmts();
layer._olayer = createOlWmtsLayer();
layer.wmsLayers = 'wms-print-layer';
const ogcServer = createTestOgcServer();
StateManager.getInstance().state.ogcServers = { [ogcServer.name]: ogcServer };
layer.ogcServer = ogcServer;
const result = encoder.encodeTileWmtsLayer(layer);
// More test in the dedicated tests suits below.
expect(result?.type).toBe('wms');
});
});
describe('encodeWmsFromWmtsLayer', () => {
it('should return null if the ogcServer is missing', () => {
const layer = createTestLayerWmts();
const result = encoder.encodeWmsFromWmtsLayer(layer);
expect(result).toBeNull();
});
it('should correctly encode a WMS layer from a WMTS layer', async () => {
const ogcServer = createTestOgcServer();
StateManager.getInstance().state.ogcServers = { [ogcServer.name]: ogcServer };
const layer = createTestLayerWmts({ printLayers: 'printed-wms-replacing-wmts', opacity: 0.6 }, ogcServer);
const result = encoder.encodeWmsFromWmtsLayer(layer);
expect(result).toEqual({
baseURL: 'https://ogc.test.url/',
customParams: {
TRANSPARENT: 'true'
},
imageFormat: 'image/png',
layers: ['printed-wms-replacing-wmts'],
opacity: 0.6,
serverType: 'mapserver',
styles: [''],
type: 'wms',
useNativeAngle: undefined
});
});
});
});