mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
[Maps] Add XYZTMSSource and TileLayer unit test suites (#58567)
This commit is contained in:
parent
07fec2f725
commit
68624da3d5
10 changed files with 177 additions and 4 deletions
|
@ -4,7 +4,6 @@
|
|||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
import { i18n } from '@kbn/i18n';
|
||||
|
||||
export const EMS_CATALOGUE_PATH = 'ems/catalogue';
|
||||
|
||||
export const EMS_FILES_CATALOGUE_PATH = 'ems/files';
|
||||
|
@ -54,6 +53,7 @@ export const EMS_FILE = 'EMS_FILE';
|
|||
export const ES_GEO_GRID = 'ES_GEO_GRID';
|
||||
export const ES_SEARCH = 'ES_SEARCH';
|
||||
export const ES_PEW_PEW = 'ES_PEW_PEW';
|
||||
export const EMS_XYZ = 'EMS_XYZ'; // identifies a custom TMS source. Name is a little unfortunate.
|
||||
|
||||
export const FIELD_ORIGIN = {
|
||||
SOURCE: 'source',
|
||||
|
|
|
@ -4,14 +4,17 @@
|
|||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
|
||||
import { IFieldType } from '../../../../../src/plugins/data/common/index_patterns/fields';
|
||||
|
||||
export interface ISourceDescriptor {
|
||||
id: string;
|
||||
type: string;
|
||||
}
|
||||
|
||||
export interface IXYZTMSSourceDescriptor extends ISourceDescriptor {
|
||||
urlTemplate: string;
|
||||
}
|
||||
|
||||
export interface ILayerDescriptor {
|
||||
sourceDescriptor: ISourceDescriptor;
|
||||
id: string;
|
||||
label?: string;
|
||||
}
|
||||
|
|
21
x-pack/legacy/plugins/maps/public/layers/layer.d.ts
vendored
Normal file
21
x-pack/legacy/plugins/maps/public/layers/layer.d.ts
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
import { ILayerDescriptor } from '../../common/descriptor_types';
|
||||
import { ISource } from './sources/source';
|
||||
|
||||
export interface ILayer {
|
||||
getDisplayName(): Promise<string>;
|
||||
}
|
||||
|
||||
export interface ILayerArguments {
|
||||
layerDescriptor: ILayerDescriptor;
|
||||
source: ISource;
|
||||
}
|
||||
|
||||
export class AbstractLayer implements ILayer {
|
||||
constructor(layerArguments: ILayerArguments);
|
||||
getDisplayName(): Promise<string>;
|
||||
}
|
19
x-pack/legacy/plugins/maps/public/layers/sources/source.d.ts
vendored
Normal file
19
x-pack/legacy/plugins/maps/public/layers/sources/source.d.ts
vendored
Normal file
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
|
||||
import { ISourceDescriptor } from '../../../common/descriptor_types';
|
||||
import { ILayer } from '../layer';
|
||||
|
||||
export interface ISource {
|
||||
createDefaultLayer(): ILayer;
|
||||
getDisplayName(): Promise<string>;
|
||||
}
|
||||
|
||||
export class AbstractSource implements ISource {
|
||||
constructor(sourceDescriptor: ISourceDescriptor, inspectorAdapters: object);
|
||||
createDefaultLayer(): ILayer;
|
||||
getDisplayName(): Promise<string>;
|
||||
}
|
15
x-pack/legacy/plugins/maps/public/layers/sources/tms_source.d.ts
vendored
Normal file
15
x-pack/legacy/plugins/maps/public/layers/sources/tms_source.d.ts
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
|
||||
import { AbstractSource, ISource } from './source';
|
||||
|
||||
export interface ITMSSource extends ISource {
|
||||
getUrlTemplate(): Promise<string>;
|
||||
}
|
||||
|
||||
export class AbstractTMSSource extends AbstractSource implements ITMSSource {
|
||||
getUrlTemplate(): Promise<string>;
|
||||
}
|
11
x-pack/legacy/plugins/maps/public/layers/sources/xyz_tms_source.d.ts
vendored
Normal file
11
x-pack/legacy/plugins/maps/public/layers/sources/xyz_tms_source.d.ts
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
import { AbstractTMSSource } from './tms_source';
|
||||
import { IXYZTMSSourceDescriptor } from '../../../common/descriptor_types';
|
||||
|
||||
export class XYZTMSSource extends AbstractTMSSource {
|
||||
constructor(sourceDescriptor: IXYZTMSSourceDescriptor, inspectorAdapters: unknown);
|
||||
}
|
|
@ -12,9 +12,10 @@ import { TileLayer } from '../tile_layer';
|
|||
import { i18n } from '@kbn/i18n';
|
||||
import { getDataSourceLabel, getUrlLabel } from '../../../common/i18n_getters';
|
||||
import _ from 'lodash';
|
||||
import { EMS_XYZ } from '../../../common/constants';
|
||||
|
||||
export class XYZTMSSource extends AbstractTMSSource {
|
||||
static type = 'EMS_XYZ';
|
||||
static type = EMS_XYZ;
|
||||
static title = i18n.translate('xpack.maps.source.ems_xyzTitle', {
|
||||
defaultMessage: 'Tile Map Service',
|
||||
});
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
|
||||
import { XYZTMSSource } from './xyz_tms_source';
|
||||
import { ILayer } from '../layer';
|
||||
import { TileLayer } from '../tile_layer';
|
||||
import { EMS_XYZ } from '../../../common/constants';
|
||||
import { IXYZTMSSourceDescriptor } from '../../../common/descriptor_types';
|
||||
|
||||
const descriptor: IXYZTMSSourceDescriptor = {
|
||||
type: EMS_XYZ,
|
||||
urlTemplate: 'https://example.com/{x}/{y}/{z}.png',
|
||||
id: 'foobar',
|
||||
};
|
||||
describe('xyz Tilemap Source', () => {
|
||||
it('should create a tile-layer', () => {
|
||||
const source = new XYZTMSSource(descriptor, null);
|
||||
const layer: ILayer = source.createDefaultLayer();
|
||||
expect(layer instanceof TileLayer).toEqual(true);
|
||||
});
|
||||
|
||||
it('should echo url template for url template', async () => {
|
||||
const source = new XYZTMSSource(descriptor, null);
|
||||
const template = await source.getUrlTemplate();
|
||||
expect(template).toEqual(descriptor.urlTemplate);
|
||||
});
|
||||
});
|
18
x-pack/legacy/plugins/maps/public/layers/tile_layer.d.ts
vendored
Normal file
18
x-pack/legacy/plugins/maps/public/layers/tile_layer.d.ts
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
|
||||
import { AbstractLayer, ILayerArguments } from './layer';
|
||||
import { ITMSSource } from './sources/tms_source';
|
||||
import { ILayerDescriptor } from '../../common/descriptor_types';
|
||||
|
||||
interface ITileLayerArguments extends ILayerArguments {
|
||||
source: ITMSSource;
|
||||
layerDescriptor: ILayerDescriptor;
|
||||
}
|
||||
|
||||
export class TileLayer extends AbstractLayer {
|
||||
constructor(args: ITileLayerArguments);
|
||||
}
|
55
x-pack/legacy/plugins/maps/public/layers/tile_layer.test.ts
Normal file
55
x-pack/legacy/plugins/maps/public/layers/tile_layer.test.ts
Normal file
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
|
||||
import { TileLayer } from './tile_layer';
|
||||
import { EMS_XYZ } from '../../common/constants';
|
||||
import { IXYZTMSSourceDescriptor } from '../../common/descriptor_types';
|
||||
import { ITMSSource } from './sources/tms_source';
|
||||
import { ILayer } from './layer';
|
||||
|
||||
const sourceDescriptor: IXYZTMSSourceDescriptor = {
|
||||
type: EMS_XYZ,
|
||||
urlTemplate: 'https://example.com/{x}/{y}/{z}.png',
|
||||
id: 'foobar',
|
||||
};
|
||||
|
||||
class MockTileSource implements ITMSSource {
|
||||
private _descriptor: IXYZTMSSourceDescriptor;
|
||||
constructor(descriptor: IXYZTMSSourceDescriptor) {
|
||||
this._descriptor = descriptor;
|
||||
}
|
||||
createDefaultLayer(): ILayer {
|
||||
throw new Error('not implemented');
|
||||
}
|
||||
|
||||
async getDisplayName(): Promise<string> {
|
||||
return this._descriptor.urlTemplate;
|
||||
}
|
||||
|
||||
async getUrlTemplate(): Promise<string> {
|
||||
return 'template/{x}/{y}/{z}.png';
|
||||
}
|
||||
}
|
||||
|
||||
describe('TileLayer', () => {
|
||||
it('should use display-label from source', async () => {
|
||||
const source = new MockTileSource(sourceDescriptor);
|
||||
const layer: ILayer = new TileLayer({
|
||||
source,
|
||||
layerDescriptor: { id: 'layerid', sourceDescriptor },
|
||||
});
|
||||
expect(await source.getDisplayName()).toEqual(await layer.getDisplayName());
|
||||
});
|
||||
|
||||
it('should override with custom display-label if present', async () => {
|
||||
const source = new MockTileSource(sourceDescriptor);
|
||||
const layer: ILayer = new TileLayer({
|
||||
source,
|
||||
layerDescriptor: { id: 'layerid', sourceDescriptor, label: 'custom' },
|
||||
});
|
||||
expect('custom').toEqual(await layer.getDisplayName());
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue