diff --git a/src/DAL/convertors/recordModelConverter.ts b/src/DAL/convertors/recordModelConverter.ts index 1df5365..3782b9b 100644 --- a/src/DAL/convertors/recordModelConverter.ts +++ b/src/DAL/convertors/recordModelConverter.ts @@ -1,7 +1,7 @@ import { singleton } from 'tsyringe'; import { GeoJSON } from 'geojson'; import { GeoJSONGeometry, stringify as geoJsonToWkt } from 'wellknown'; -import { LayerMetadata, Link, IRasterCatalogUpsertRequestBody, RecordStatus } from '@map-colonies/mc-model-types'; +import { LayerMetadata, Link, IRasterCatalogUpsertRequestBody, RecordStatus, PycswLayerCatalogRecord } from '@map-colonies/mc-model-types'; import { IEditRecordRequest, IFindRecordRequest, IFindRecordResponse, IUpdateRecordRequest } from '../../common/dataModels/records'; import { RecordEntity } from '../entity/generated'; @@ -106,15 +106,18 @@ export class RecordModelConvertor { return links; } - private recordToMetadata(record: RecordEntity): LayerMetadata { - const metadata = new LayerMetadata(); - Object.keys(metadata).forEach((key) => { + private recordToMetadata(record: RecordEntity): LayerMetadata & Pick { + const metadata = new LayerMetadata() as LayerMetadata & Pick; + Object.keys(new LayerMetadata()).forEach((key) => { if (record[key as keyof RecordEntity] !== null) { (metadata[key as keyof LayerMetadata] as unknown) = record[key as keyof RecordEntity]; } }); metadata.sensors = record.sensors !== '' ? record.sensors.split(',') : []; metadata.region = record.region ? record.region.split(',') : []; + if (record.keywords != null) { + metadata.keywords = record.keywords; + } if (typeof metadata.footprint === 'string') { metadata.footprint = JSON.parse(metadata.footprint) as GeoJSON; } diff --git a/tests/unit/DAL/recordModelConverter.spec.ts b/tests/unit/DAL/recordModelConverter.spec.ts index 9ea45e3..f499d48 100644 --- a/tests/unit/DAL/recordModelConverter.spec.ts +++ b/tests/unit/DAL/recordModelConverter.spec.ts @@ -315,6 +315,32 @@ describe('RecordModelConverter', () => { }); }); + describe('entityToModel - keywords', () => { + it('converted model includes keywords when entity has keywords value', () => { + const entity = { + sensors: '', + region: null, + keywords: 'satellite,aerial', + } as unknown as RecordEntity; + + const model = convertor.entityToModel(entity); + + expect(model.metadata?.keywords).toBe('satellite,aerial'); + }); + + it('converted model omits keywords when entity keywords is null', () => { + const entity = { + sensors: '', + region: null, + keywords: null, + } as unknown as RecordEntity; + + const model = convertor.entityToModel(entity); + + expect(model.metadata?.keywords).toBeUndefined(); + }); + }); + describe('findModelToEntity', () => { it('find should return the given attribute', () => { const testUpdateRecordRequest = {