diff --git a/api/services/mapping/converters.js b/api/services/mapping/converters.js index 2e8e867bb..2026f422e 100644 --- a/api/services/mapping/converters.js +++ b/api/services/mapping/converters.js @@ -79,7 +79,9 @@ const c = { temperature: source.temperature, isDiving: source.isDiving, nbEntrances: source.nbEntrances ?? source.entrances?.length ?? 0, - entrances: source.entrances?.map((e) => e.id), + entrances: source.entrances + ?.map((e) => e?.id ?? e) + .filter((e) => e != null), }), toCaver: (source, meta) => { diff --git a/test/integration/1_services/Converters.test.js b/test/integration/1_services/Converters.test.js index 3895b7068..472813b06 100644 --- a/test/integration/1_services/Converters.test.js +++ b/test/integration/1_services/Converters.test.js @@ -204,6 +204,59 @@ describe('Converters Service', () => { const result = converters.toSimpleCave(source); should(result.exploringOrganizations).be.undefined(); }); + + it('should extract entrance IDs from Waterline objects', () => { + const source = { + id: 1, + entrances: [ + { id: 5, name: 'Entrance A' }, + { id: 6, name: 'Entrance B' }, + ], + }; + const result = converters.toSimpleCave(source); + should(result.entrances).deepEqual([5, 6]); + }); + + it('should pass through plain entrance IDs (Typesense format)', () => { + const source = { + id: 1, + nbEntrances: 3, + entrances: [20, 21, 25877], + }; + const result = converters.toSimpleCave(source); + should(result.entrances).deepEqual([20, 21, 25877]); + }); + + it('should pass through string entrance IDs', () => { + const source = { + id: 1, + nbEntrances: 2, + entrances: ['20', '21'], + }; + const result = converters.toSimpleCave(source); + should(result.entrances).deepEqual(['20', '21']); + }); + + it('should filter out null entries from entrances array', () => { + const source = { + id: 1, + entrances: [{ id: 5 }, null, { id: 6 }, undefined], + }; + const result = converters.toSimpleCave(source); + should(result.entrances).deepEqual([5, 6]); + }); + + it('should return an empty array when entrances is empty', () => { + const source = { id: 1, entrances: [] }; + const result = converters.toSimpleCave(source); + should(result.entrances).deepEqual([]); + }); + + it('should return undefined entrances when field is absent', () => { + const source = { id: 1, nbEntrances: 0 }; + const result = converters.toSimpleCave(source); + should(result.entrances).be.undefined(); + }); }); describe('toDocument()', () => {