diff --git a/server/src/domain/metadata/metadata.service.spec.ts b/server/src/domain/metadata/metadata.service.spec.ts index 2b6c633a10..96a1c91c03 100644 --- a/server/src/domain/metadata/metadata.service.spec.ts +++ b/server/src/domain/metadata/metadata.service.spec.ts @@ -122,4 +122,14 @@ describe(MetadataService.name, () => { }); }); }); + + describe('handleMetadataExtraction', () => { + it('should handle lists of numbers', async () => { + assetMock.getByIds.mockResolvedValue([assetStub.image1]); + storageMock.stat.mockResolvedValue({ size: 123456 } as any); + metadataMock.getExifTags.mockResolvedValue({ ISO: [160] as any }); + await sut.handleMetadataExtraction({ id: assetStub.image1.id }); + expect(assetMock.upsertExif).toHaveBeenCalledWith(expect.objectContaining({ iso: 160 })); + }); + }); }); diff --git a/server/src/domain/metadata/metadata.service.ts b/server/src/domain/metadata/metadata.service.ts index 09100267cc..297af82ea8 100644 --- a/server/src/domain/metadata/metadata.service.ts +++ b/server/src/domain/metadata/metadata.service.ts @@ -32,6 +32,11 @@ type ExifEntityWithoutGeocodeAndTypeOrm = Omit< const exifDate = (dt: ExifDateTime | string | undefined) => (dt instanceof ExifDateTime ? dt?.toDate() : null); const validate = (value: T): NonNullable | null => { + // handle lists of numbers + if (Array.isArray(value)) { + value = value[0]; + } + if (typeof value === 'string') { // string means a failure to parse a number, throw out result return null;