@masterportal/masterportalapi 2.23.0 → 2.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,8 +6,8 @@ import {getUid} from "olcs/util.js";
6
6
  import TileWMS from "ol/source/TileWMS.js";
7
7
  import ImageWMS from "ol/source/ImageWMS.js";
8
8
  import WMTS from "ol/source/WMTS.js";
9
- import olcsAbstractSynchronizer from "olcs/AbstractSynchronizer.js";
10
- import {extentToRectangle, tileLayerToImageryLayer, updateCesiumLayerProperties} from "olcs/core.js";
9
+ import olcsAbstractSynchronizer from "olcs/AbstractSynchronizer.ts";
10
+ import {extentToRectangle, tileLayerToImageryLayer, updateCesiumLayerProperties} from "olcs/core.ts";
11
11
  import {Tile, Image as ImageLayer} from "ol/layer.js";
12
12
  import {stableSort} from "ol/array.js";
13
13
  import {getBottomLeft, getBottomRight, getTopRight, getTopLeft} from "ol/extent.js";
@@ -1,6 +1,6 @@
1
- import OLCesium from "olcs/OLCesium.js";
1
+ import OLCesium from "olcs/OLCesium.ts";
2
2
  import {transform, get} from "ol/proj.js";
3
- import VectorSynchronizer from "olcs/VectorSynchronizer.js";
3
+ import VectorSynchronizer from "olcs/VectorSynchronizer.ts";
4
4
 
5
5
  import FixedOverlaySynchronizer from "./3dUtils/fixedOverlaySynchronizer.js";
6
6
  import WMSRasterSynchronizer from "./3dUtils/wmsRasterSynchronizer.js";
@@ -1,9 +1,13 @@
1
1
  import WebGLPointsLayer from "ol/layer/WebGLPoints";
2
2
  import WebGLVectorLayerRenderer from "ol/renderer/webgl/VectorLayer";
3
+ import WebGLVectorTileLayerRenderer from "ol/renderer/webgl/VectorTileLayer.js";
4
+ import VectorTile from "ol/layer/VectorTile.js";
3
5
  import VectorLayer from "ol/layer/Layer";
4
6
  import styleList from "../vectorStyle/styleList";
5
7
  import {getRulesForFeature} from "../vectorStyle/lib/getRuleForIndex";
6
8
  import {returnColor} from "../vectorStyle/lib/colorConvertions";
9
+ import {asArray} from "ol/color.js";
10
+ import {packColor, parseLiteralStyle} from "ol/webgl/styleparser.js";
7
11
 
8
12
  /**
9
13
  * The default style for OpenLayers WebGLPoints class
@@ -23,20 +27,20 @@ const defaultStyle = {
23
27
 
24
28
  /** @type {import('ol/style/literal.js').LiteralStyle} */
25
29
  style = {
26
- "stroke-color": ["get", "STROKECOLOR"],
27
- "stroke-width": ["get", "STROKEWIDTH", "number"],
28
- "fill-color": ["get", "FILLCOLOR"],
29
- "opacity": ["get", "OPACITY", "number"],
30
- "size": ["get", "CIRCLESIZE", "number"]
30
+ "stroke-color": ["get", "strokeColor"],
31
+ "stroke-width": ["get", "strokeWidth", "number"],
32
+ "fill-color": ["get", "fillColor"],
33
+ "opacity": ["get", "opacity", "number"],
34
+ "size": ["get", "circleSize", "number"],
35
+ symbol: defaultStyle.symbol
31
36
  };
32
37
 
33
38
  /**
34
- * Creates a layer object to extend from.
39
+ * Creates a vector layer with custom renderer.
35
40
  * @augments VectorLayer
36
41
  * @private
37
42
  * @implements {WebGLVectorLayerRenderer}
38
- * @param {Object} attrs attributes of the layer
39
- * @returns {module:ol/layer/Layer} the LocalWebGLLayer with a custom renderer for WebGL styling
43
+ * @returns {module:ol/layer/VectorLayer} the LocalWebGLLayer with a custom renderer for WebGL styling
40
44
  */
41
45
  export function createVectorLayerRenderer () {
42
46
  /**
@@ -46,7 +50,7 @@ export function createVectorLayerRenderer () {
46
50
  */
47
51
  class LocalWebGLLayer extends VectorLayer {
48
52
  /**
49
- * Creates a new renderer that takes the defined style of the new layer as an input
53
+ * Creates a new renderer that takes the defined style of the new layer as an input.
50
54
  * @returns {module:ol/renderer/webgl/WebGLVectorLayerRenderer} the custom renderer
51
55
  * @experimental
52
56
  */
@@ -60,9 +64,101 @@ export function createVectorLayerRenderer () {
60
64
  return LocalWebGLLayer;
61
65
  }
62
66
 
67
+ /**
68
+ * Creates a vector tile layer with custom renderer.
69
+ * @augments VectorTile
70
+ * @private
71
+ * @implements {WebGLVectorTileLayerRenderer}
72
+ * @returns {module:ol/layer/VectorTile} the LocalWebGLLayer with a custom renderer for WebGL styling of vectorTile layers.
73
+ */
74
+ export function createVectorTileLayerRenderer () {
75
+ /**
76
+ * @class LocalWebGLLayer
77
+ * @see https://openlayers.org/en/latest/examples/webgl-vector-tiles.html
78
+ * @description the temporary class with a custom renderer to render the vectortiles with WebGL
79
+ */
80
+ class LocalWebGLLayer extends VectorTile {
81
+
82
+ /**
83
+ * Creates a new renderer that takes the defined style of the new layer as an input.
84
+ * @returns {module:ol/renderer/webgl/WebGLVectorTileLayerRenderer} the custom renderer
85
+ * @experimental
86
+ */
87
+ createRenderer () {
88
+ const result = parseLiteralStyle(style),
89
+ invisible = [255, 255, 255, 0],
90
+ grey = [119, 119, 119, 1];
91
+
92
+
93
+ return new WebGLVectorTileLayerRenderer(this, {
94
+ style: {
95
+ fill: {
96
+ fragment: result.builder.getFillFragmentShader(),
97
+ vertex: result.builder.getFillVertexShader()
98
+ },
99
+ stroke: {
100
+ fragment: result.builder.getStrokeFragmentShader(),
101
+ vertex: result.builder.getStrokeVertexShader()
102
+ },
103
+ symbol: {
104
+ fragment: result.builder.getSymbolFragmentShader(),
105
+ vertex: result.builder.getSymbolVertexShader()
106
+ },
107
+ attributes: {
108
+ fillColor: {
109
+ size: 2,
110
+ callback: (feature) => {
111
+ const featureStyle = this.getStyle()(feature, 1);
112
+
113
+ if (featureStyle && featureStyle[0]) {
114
+ const color = featureStyle[0]?.getFill()?.getColor();
115
+
116
+ return packColor(color && typeof color === "string" ? asArray(color) : invisible);
117
+ }
118
+ return packColor(grey);
119
+ }
120
+ },
121
+ strokeColor: {
122
+ size: 2,
123
+ callback: (feature) => {
124
+ const featureStyle = this.getStyle()(feature, 1);
125
+
126
+ if (featureStyle && featureStyle[0]) {
127
+ const color = featureStyle[0]?.getStroke()?.getColor();
128
+
129
+ return packColor(color ? asArray(color) : invisible);
130
+ }
131
+ return packColor(grey);
132
+ }
133
+ },
134
+ strokeWidth: {
135
+ size: 1,
136
+ callback: (feature) => {
137
+ const featureStyle = this.getStyle()(feature, 1);
138
+
139
+ if (featureStyle && featureStyle[0]) {
140
+ const width = featureStyle[0]?.getStroke()?.getWidth();
141
+
142
+ if (width !== undefined) {
143
+ return width > 10 ? width / 10 : 1;/** @todo needs refactoring in later versions */
144
+ }
145
+ }
146
+ return 1;
147
+ }
148
+ }
149
+ }
150
+ }
151
+ });
152
+ }
153
+ }
154
+
155
+ return LocalWebGLLayer;
156
+ }
157
+
63
158
  /**
64
159
  * Parses the vectorStyle from style.json to the feature
65
- * to reduce processing on runtime
160
+ * to reduce processing on runtime.
161
+ * Sets properties with style at feature to use by literalSytle of renderer of VectorLayer.
66
162
  * @private
67
163
  * @param {module:ol/Feature} feature - the feature to check
68
164
  * @param {module:Backbone/Model} [styleObject] - (optional) the style model from StyleList
@@ -87,11 +183,11 @@ export function formatFeatureStyles (feature, styleObject) {
87
183
  strokeWidth = rule.style.polygonStrokeWidth || rule.style.lineStrokeWidth,
88
184
  size = rule.style.circleRadius;
89
185
 
90
- feature.set("FILLCOLOR", fillColor ? fillColor : "#006688");
91
- feature.set("STROKECOLOR", strokeColor ? strokeColor : "#006688");
92
- feature.set("STROKEWIDTH", strokeWidth ? strokeWidth : 1);
93
- feature.set("OPACITY", fillColor ? (rule.style.polygonFillColor || rule.style.circleFillColor)[3] : 1);
94
- feature.set("CIRCLESIZE", size ? size : 20);
186
+ feature.set("fillColor", fillColor ? fillColor : "#006688");
187
+ feature.set("strokeColor", strokeColor ? strokeColor : "#006688");
188
+ feature.set("strokeWidth", strokeWidth ? strokeWidth : 1);
189
+ feature.set("opacity", fillColor ? (rule.style.polygonFillColor || rule.style.circleFillColor)[3] : 1);
190
+ feature.set("circleSize", size ? size : 20);
95
191
  }
96
192
  }
97
193
 
@@ -134,19 +230,28 @@ export function formatFeatureData (feature, excludeTypes = ["boolean"]) {
134
230
  }
135
231
 
136
232
  /**
137
- * feature transformations called after loading
233
+ * feature transformations called after loading - but not for layer of typ VectortTile
138
234
  * called by the layer source loader, binds the instance of the layer model
139
235
  * should be called on each source refresh
140
236
  * @param {module:ol/Feature[]} features - the features loaded by the layer
141
237
  * @param {String} styleId - The layer's styleId
142
238
  * @param {String[]} excludeTypesFromParsing - types that should not be parsed from strings, only necessary for webgl
239
+ * @param {Boolean} isPointLayer - whether the layer source should consist only of points (or multi points)
143
240
  * @returns {void}
144
241
  */
145
- export function afterLoading (features, styleId, excludeTypesFromParsing) {
242
+ export function afterLoading (features, styleId, excludeTypesFromParsing, isPointLayer) {
146
243
  const styleObject = styleList.returnStyleObject(styleId); // load styleModel to extract rules per feature
147
244
 
148
245
  if (Array.isArray(features)) {
149
246
  features.forEach(feature => {
247
+ /**
248
+ * extract first point from Multipoint
249
+ * @deprecated will probably not be necessary anymore in release version
250
+ * @example An example for that behavior can be found when rendering "Strassenbaumkataster"
251
+ */
252
+ if (isPointLayer && feature.getGeometry().getType() === "MultiPoint") {
253
+ feature.setGeometry(feature.getGeometry().getPoint(0)); // other points in the multi point will be ignored for now
254
+ }
150
255
  formatFeatureGeometry(feature); /** @deprecated will propbably not be necessary anymore in release version */
151
256
  formatFeatureStyles(feature, styleObject); /** @todo needs refactoring in release version */
152
257
  formatFeatureData(feature, excludeTypesFromParsing); /** Necessary since the WebGLPoints Style Syntax depends on data types (i.e. numbers not as strings) */
@@ -175,7 +280,8 @@ export function createLayer (attrs) {
175
280
  opacity: attrs.transparency ? (100 - attrs.transparency) / 100 : attrs.opacity,
176
281
  renderer: "webgl",
177
282
  styleId: attrs.styleId,
178
- excludeTypesFromParsing: attrs.excludeTypesFromParsing
283
+ excludeTypesFromParsing: attrs.excludeTypesFromParsing,
284
+ extent: attrs.extent
179
285
  };
180
286
 
181
287
  /**
@@ -196,11 +302,22 @@ export function createLayer (attrs) {
196
302
  });
197
303
  }
198
304
 
199
- /**
200
- * use ol/renderer/webgl/WebGLVectorLayerRenderer if not point layer
201
- * Point styling as quads only
202
- */
203
- LayerConstructor = createVectorLayerRenderer(attrs);
305
+ if (attrs.typ === "VectorTile") {
306
+
307
+ /**
308
+ * use ol/renderer/webgl/WebGLVectorLayerRenderer if not point layer
309
+ * Point styling as quads only
310
+ */
311
+ LayerConstructor = createVectorTileLayerRenderer(attrs);
312
+ }
313
+ else {
314
+
315
+ /**
316
+ * use ol/renderer/webgl/WebGLVectorLayerRenderer if not point layer
317
+ * Point styling as quads only
318
+ */
319
+ LayerConstructor = createVectorLayerRenderer(attrs);
320
+ }
204
321
  return new LayerConstructor({
205
322
  ...options,
206
323
  isPointLayer: false
@@ -230,31 +230,15 @@ function initializeStyleList (styleGetters, Config, layers, tools, callback) {
230
230
  styleConf = Config.styleConf;
231
231
  featureViaUrlLayers = Config.featureViaURL?.layers;
232
232
 
233
- const xhr = new XMLHttpRequest();
234
-
235
- xhr.open("GET", styleConf, false);
236
- xhr.onreadystatechange = function (event) {
237
- const target = event.target,
238
- status = target.status;
239
- let data;
240
-
241
- if (status === 200) {
242
- try {
243
- data = JSON.parse(target.response);
244
- }
245
- catch (error) {
246
- console.error("An error occured when parsing the response after loading '" + styleConf + "':", error);
247
- return callback(false, error);
248
- }
233
+ fetch(styleConf)
234
+ .then(response => response.json())
235
+ .then(data => {
249
236
  styleList = parseStyles(data);
250
- }
251
- else if (status === 404) {
252
- console.error("An error occured when trying to fetch services from '" + styleConf + "':", 404);
253
- return callback(false, true);
254
- }
255
- return callback(styleList);
256
- };
257
- xhr.send();
237
+ })
238
+ .catch(error => {
239
+ console.error(error);
240
+ callback(false, true);
241
+ });
258
242
  }
259
243
 
260
244
  /**
@@ -10,8 +10,10 @@ const features = [new Feature(), new Feature()];
10
10
  jest.mock("../../../src/renderer/webgl.js", () => {
11
11
  const original = jest.requireActual("../../../src/renderer/webgl.js");
12
12
 
13
- original.afterLoading = jest.fn();
14
- return original;
13
+ return {
14
+ ...original,
15
+ afterLoading: jest.fn()
16
+ };
15
17
  });
16
18
 
17
19
  describe("geojson/index", function () {
@@ -96,11 +98,23 @@ describe("geojson/index", function () {
96
98
  it("creates a vectorSource with an additional listener, when renderer is \"webgl\"", () => {
97
99
  const
98
100
  rawLayer = {url: "example.com/geo.json"},
99
- source = geojson.createLayerSource({...rawLayer, renderer: "webgl"}, {});
101
+ layerParams = {
102
+ renderer: "webgl",
103
+ styleId: "id",
104
+ excludeTypesFromParsing: null,
105
+ isPointLayer: true
106
+ },
107
+ source = geojson.createLayerSource({
108
+ ...rawLayer,
109
+ renderer: layerParams.renderer,
110
+ styleId: layerParams.styleId,
111
+ excludeTypesFromParsing: layerParams.excludeTypesFromParsing,
112
+ isPointLayer: layerParams.isPointLayer
113
+ }, {});
100
114
 
101
115
  expect(source.getListeners("featuresloadend")).toHaveLength(2);
102
- source.getListeners("featuresloadend")[1]({features: []});
103
- expect(webgl.afterLoading).toHaveBeenCalled();
116
+ source.getListeners("featuresloadend")[1]({features});
117
+ expect(webgl.afterLoading).toHaveBeenCalledWith(features, layerParams.styleId, layerParams.excludeTypesFromParsing, layerParams.isPointLayer);
104
118
  });
105
119
 
106
120
  });
@@ -19,8 +19,10 @@ jest.mock("../../src/rawLayerList.js", () => {
19
19
  jest.mock("../../src/renderer/webgl.js", () => {
20
20
  const original = jest.requireActual("../../src/renderer/webgl.js");
21
21
 
22
- original.afterLoading = jest.fn();
23
- return original;
22
+ return {
23
+ ...original,
24
+ afterLoading: jest.fn()
25
+ };
24
26
  });
25
27
 
26
28
 
@@ -265,11 +267,24 @@ describe("oaf.js", function () {
265
267
  featureType: "krankenhaeuser_hh",
266
268
  version: "1.0.0"
267
269
  },
268
- source = oaf.createLayerSource({...rawLayer, renderer: "webgl"});
270
+ layerParams = {
271
+ renderer: "webgl",
272
+ styleId: "id",
273
+ excludeTypesFromParsing: null,
274
+ isPointLayer: true
275
+ },
276
+ source = oaf.createLayerSource({
277
+ ...rawLayer,
278
+ renderer: layerParams.renderer,
279
+ styleId: layerParams.styleId,
280
+ excludeTypesFromParsing: layerParams.excludeTypesFromParsing,
281
+ isPointLayer: layerParams.isPointLayer
282
+ }),
283
+ features = [];
269
284
 
270
285
  expect(source.getListeners("featuresloadend")).toHaveLength(1);
271
- source.getListeners("featuresloadend")[0]({features: []});
272
- expect(webgl.afterLoading).toHaveBeenCalled();
286
+ source.getListeners("featuresloadend")[0]({features});
287
+ expect(webgl.afterLoading).toHaveBeenCalledWith(features, layerParams.styleId, layerParams.excludeTypesFromParsing, layerParams.isPointLayer);
273
288
  });
274
289
  });
275
- });
290
+ });
@@ -5,8 +5,10 @@ describe("terrain.js", function () {
5
5
 
6
6
  beforeEach(() => {
7
7
  global.Cesium = {};
8
- global.Cesium.CesiumTerrainProvider = jest.fn();
8
+ global.Cesium.CesiumTerrainProvider = {};
9
+ global.Cesium.CesiumTerrainProvider.fromUrl = jest.fn();
9
10
  global.Cesium.EllipsoidTerrainProvider = jest.fn();
11
+
10
12
  attr = {
11
13
  id: "12883",
12
14
  name: "Gelaende",
@@ -21,7 +23,7 @@ describe("terrain.js", function () {
21
23
  return {};
22
24
  }
23
25
  };
24
- cesiumTerrainProviderSpy = jest.spyOn(global.Cesium, "CesiumTerrainProvider");
26
+ cesiumTerrainProviderSpy = jest.spyOn(global.Cesium.CesiumTerrainProvider, "fromUrl");
25
27
  });
26
28
 
27
29
  afterEach(() => {
@@ -6,7 +6,8 @@ describe("tileset.js", function () {
6
6
 
7
7
  beforeEach(() => {
8
8
  global.Cesium = {};
9
- global.Cesium.Cesium3DTileset = jest.fn();
9
+ global.Cesium.Cesium3DTileset = {};
10
+ global.Cesium.Cesium3DTileset.fromUrl = jest.fn();
10
11
  global.Cesium.Cesium3DTileStyle = jest.fn(color => color);
11
12
  attr = {
12
13
  id: "4002",
@@ -28,7 +29,9 @@ describe("tileset.js", function () {
28
29
  };
29
30
  }
30
31
  };
31
- cesium3DTilesetSpy = jest.spyOn(global.Cesium, "Cesium3DTileset");
32
+ cesium3DTilesetSpy = jest.spyOn(global.Cesium.Cesium3DTileset, "fromUrl").mockImplementation(() => {
33
+ return Promise.resolve({});
34
+ });
32
35
  console.warn = jest.fn();
33
36
  });
34
37
 
@@ -38,21 +41,23 @@ describe("tileset.js", function () {
38
41
  console.warn = consoleWarn;
39
42
  });
40
43
 
41
- function checkAttributes (layer, attrs) {
44
+ async function checkAttributes (layer, attrs) {
45
+ const tileset = await layer.tileset;
46
+
42
47
  expect(layer.get("name")).toEqual(attrs.name);
43
48
  expect(layer.get("typ")).toEqual(attrs.typ);
44
49
  expect(layer.get("id")).toEqual(attrs.id);
45
- expect(layer.tileset.layerReferenceId).toEqual(attrs.id);
50
+ expect(tileset.layerReferenceId).toEqual(attrs.id);
46
51
  }
47
52
 
48
53
  describe("createLayer", function () {
49
54
  it("creates tileset layer without map", function () {
50
55
  const layer = new Tileset(attr);
51
56
 
52
- checkAttributes(layer, attr);
53
57
  expect(layer.tileSet).toEqual(undefined);
54
58
  expect(layer.tileset.show).toEqual(undefined);
55
59
  expect(cesium3DTilesetSpy).toHaveBeenCalledTimes(1);
60
+ checkAttributes(layer, attr);
56
61
  });
57
62
  it("creates 2 tileset layers with map and checks attributes", function () {
58
63
  const attr2 = {
@@ -2,6 +2,7 @@ import OpenLayersVectorTileLayer from "ol/layer/VectorTile";
2
2
  import OpenLayersVectorTileSource from "ol/source/VectorTile";
3
3
  import OpenLayersTileGrid from "ol/tilegrid/TileGrid";
4
4
 
5
+
5
6
  import {Feature} from "ol";
6
7
  import Polygon from "ol/geom/Polygon";
7
8
 
@@ -16,11 +17,21 @@ jest.mock("../../src/rawLayerList.js", () => {
16
17
  return original;
17
18
  });
18
19
 
20
+ jest.mock("../../src/renderer/webgl.js", () => {
21
+ const original = jest.requireActual("../../src/renderer/webgl.js");
22
+
23
+ return {
24
+ ...original,
25
+ afterLoading: jest.fn()
26
+ };
27
+ });
28
+
29
+
19
30
  describe("vectorTile.js", function () {
20
31
 
21
32
  beforeAll(() => crs.registerProjections());
22
33
 
23
- const layerParams = {
34
+ const rawLayer = {
24
35
  name: "VT Test",
25
36
  id: "VT_01",
26
37
  url: "https://example.org"
@@ -79,12 +90,13 @@ describe("vectorTile.js", function () {
79
90
  source = vectorTile.createLayerSource("https://foo.example.org", sourceParams);
80
91
 
81
92
  expect(source).toBeInstanceOf(OpenLayersVectorTileSource);
93
+ expect(typeof source.getTileLoadFunction()).toEqual("function");
82
94
  });
83
95
  });
84
96
 
85
97
  describe("createLayer", function () {
86
98
  it("creates a vector Tile Layer", function () {
87
- const layer = vectorTile.createLayer(layerParams);
99
+ const layer = vectorTile.createLayer(rawLayer);
88
100
 
89
101
  expect(layer).toBeInstanceOf(OpenLayersVectorTileLayer);
90
102
  expect(layer.getSource()).toBeInstanceOf(OpenLayersVectorTileSource);
@@ -92,6 +104,13 @@ describe("vectorTile.js", function () {
92
104
  expect(layer.get("id")).toEqual("VT_01");
93
105
  });
94
106
 
107
+ it("creates a vector Tile Layer with webgl renderer", function () {
108
+ const layer = vectorTile.createLayer(rawLayer, {layerParams: {renderer: "webgl"}});
109
+
110
+ expect(layer.constructor.name).toEqual("LocalWebGLLayer");
111
+ expect(layer.getSource()).toBeInstanceOf(OpenLayersVectorTileSource);
112
+ });
113
+
95
114
  it("should log an error when required param is missing", function () {
96
115
  const spyConsole = jest.spyOn(console, "error").mockImplementation(() => ""),
97
116
  layer = vectorTile.createLayer({
@@ -139,7 +158,7 @@ describe("vectorTile.js", function () {
139
158
  ],
140
159
  tileSize: 512
141
160
  },
142
- layer = vectorTile.createLayer(layerParams),
161
+ layer = vectorTile.createLayer(rawLayer),
143
162
  source = layer.getSource(),
144
163
  tileGrid = source.getTileGrid();
145
164
 
@@ -156,7 +175,7 @@ describe("vectorTile.js", function () {
156
175
 
157
176
  describe("setStyle", function () {
158
177
  it("should apply a given style", function () {
159
- const layer = vectorTile.createLayer(layerParams);
178
+ const layer = vectorTile.createLayer(rawLayer);
160
179
 
161
180
  let featureStyle = null;
162
181
 
@@ -24,8 +24,10 @@ jest.mock("../../src/rawLayerList.js", () => {
24
24
  jest.mock("../../src/renderer/webgl.js", () => {
25
25
  const original = jest.requireActual("../../src/renderer/webgl.js");
26
26
 
27
- original.afterLoading = jest.fn();
28
- return original;
27
+ return {
28
+ ...original,
29
+ afterLoading: jest.fn()
30
+ };
29
31
  });
30
32
 
31
33
 
@@ -420,11 +422,24 @@ describe("wfs.js", function () {
420
422
  featureType: "krankenhaeuser_hh",
421
423
  version: "1.0.0"
422
424
  },
423
- source = wfs.createLayerSource({...rawLayer, renderer: "webgl"});
425
+ layerParams = {
426
+ renderer: "webgl",
427
+ styleId: "id",
428
+ excludeTypesFromParsing: null,
429
+ isPointLayer: true
430
+ },
431
+ source = wfs.createLayerSource({
432
+ ...rawLayer,
433
+ renderer: layerParams.renderer,
434
+ styleId: layerParams.styleId,
435
+ excludeTypesFromParsing: layerParams.excludeTypesFromParsing,
436
+ isPointLayer: layerParams.isPointLayer
437
+ }),
438
+ features = [];
424
439
 
425
440
  expect(source.getListeners("featuresloadend")).toHaveLength(1);
426
- source.getListeners("featuresloadend")[0]({features: []});
427
- expect(webgl.afterLoading).toHaveBeenCalled();
441
+ source.getListeners("featuresloadend")[0]({features});
442
+ expect(webgl.afterLoading).toHaveBeenCalledWith(features, layerParams.styleId, layerParams.excludeTypesFromParsing, layerParams.isPointLayer);
428
443
  });
429
444
  it("creates a vectorSource with credentials: include as params", () => {
430
445
  global.fetch = jest.fn().mockImplementationOnce(() => {
@@ -6,6 +6,40 @@ import VectorSource from "ol/source/Vector";
6
6
  import drawInteractions, {styleObject} from "../../../src/maps/interactions/drawInteraction";
7
7
 
8
8
  describe("src/maps/interactions/drawInteraction.js", () => {
9
+ describe("convertUnits", () => {
10
+ it("shold return 1000 for sourceUnit === 'm' and targetUnit === 'm'", () =>{
11
+ const value = 1000,
12
+ sourceUnit = "m",
13
+ targetUnit = "m";
14
+
15
+ expect(drawInteractions.convertUnits(value, sourceUnit, targetUnit)).toEqual(1000);
16
+ });
17
+
18
+ it("shold return 1000 for sourceUnit === 'm' and targetUnit === 'km'", () =>{
19
+ const value = 1000,
20
+ sourceUnit = "m",
21
+ targetUnit = "km";
22
+
23
+ expect(drawInteractions.convertUnits(value, sourceUnit, targetUnit)).toEqual(1);
24
+ });
25
+
26
+ it("shold return 1000 for sourceUnit === 'km' and targetUnit === 'm'", () =>{
27
+ const value = 1000,
28
+ sourceUnit = "km",
29
+ targetUnit = "m";
30
+
31
+ expect(drawInteractions.convertUnits(value, sourceUnit, targetUnit)).toEqual(1000000);
32
+ });
33
+
34
+ it("shold return 1000 for sourceUnit === 'abc' and targetUnit === 'def'", () =>{
35
+ const value = 1000,
36
+ sourceUnit = "abc",
37
+ targetUnit = "def";
38
+
39
+ expect(drawInteractions.convertUnits(value, sourceUnit, targetUnit)).toEqual(1000);
40
+ });
41
+ });
42
+
9
43
  describe("transformMapUnitRadius", () => {
10
44
  it("should return the input meter radius in meter ", () => {
11
45
  const radius = 100,