@geogirafe/lib-geoportal
Version:
GeoGirafe is a flexible application to build online geoportals.
83 lines (82 loc) • 2.98 kB
JavaScript
import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
import OgcApiFeaturesManager from './ogcapifeaturesmanager';
import Feature from 'ol/Feature';
import MockHelper from '../tests/mockhelper';
import ServerOgc from '../../models/serverogc';
vi.mock('./ogcapifeaturesclient');
describe('OgcApiFeaturesManager', () => {
beforeAll(() => {
MockHelper.startMocking();
});
afterAll(() => {
MockHelper.stopMocking();
});
let manager;
let layer = {
url: 'https://testUrl.com',
collectionId: 'collectionId',
crs: '',
credentials: '',
geometryType: 'Point',
attributeName: '',
attributeType: '',
serverType: 'default',
server: new ServerOgc('test', {
url: 'https://testUrl.com',
wfsSupport: false,
urlWfs: '',
oapifSupport: true,
urlOapif: "'https://testUrl.com",
type: 'default',
imageType: ''
})
};
beforeEach(() => {
vi.clearAllMocks();
manager = OgcApiFeaturesManager.getInstance();
});
describe('getSchema', () => {
const mockSchemaResponse = {
properties: {
geometry: {
'format': 'geometry-any',
'x-ogc-role': 'primary-geometry'
},
id: {
'type': 'integer',
'x-ogc-role': 'id', // Primary key
'x-ogc-propertySeq': 0 // Attribute order
},
titleAttribute: {
'title': 'Attr Title',
'type': 'string',
'maxLength': 100,
'x-ogc-propertySeq': 1
},
doubleAttribute: {
'type': 'number',
'format': 'double',
'x-ogc-propertySeq': 3
}
}
};
it('should return a template object based on the schema', async () => {
manager.getClient(layer.server).getSchema.mockResolvedValue(mockSchemaResponse);
const result = await manager.getSchema(layer);
expect(result.template).toEqual({ titleAttribute: null, doubleAttribute: null });
});
});
describe('getItems', () => {
it('should return a list of features', async () => {
const mockFeatures = [new Feature()];
manager.getClient(layer.server).getItems.mockResolvedValue(mockFeatures);
const result = await manager.getItems(layer);
expect(result).toEqual(mockFeatures);
});
it('should handle failure and return empty list', async () => {
manager.getClient(layer.server).getItems.mockRejectedValue(new Error('Error'));
const result = await manager.getItems(layer);
expect(result).toEqual([]);
});
});
});