diff --git a/server/src/domain/metadata/metadata.service.spec.ts b/server/src/domain/metadata/metadata.service.spec.ts index 194294f94c..a854c0152e 100644 --- a/server/src/domain/metadata/metadata.service.spec.ts +++ b/server/src/domain/metadata/metadata.service.spec.ts @@ -566,4 +566,41 @@ describe(MetadataService.name, () => { }); }); }); + + describe('handleSidecarWrite', () => { + it('should skip assets that do not exist anymore', async () => { + assetMock.getByIds.mockResolvedValue([]); + await expect(sut.handleSidecarWrite({ id: 'asset-123' })).resolves.toBe(false); + expect(metadataMock.writeTags).not.toHaveBeenCalled(); + }); + + it('should skip jobs with not metadata', async () => { + assetMock.getByIds.mockResolvedValue([assetStub.sidecar]); + await expect(sut.handleSidecarWrite({ id: assetStub.sidecar.id })).resolves.toBe(true); + expect(metadataMock.writeTags).not.toHaveBeenCalled(); + }); + + it('should write tags', async () => { + const description = 'this is a description'; + const gps = 12; + const date = '2023-11-22T04:56:12.196Z'; + + assetMock.getByIds.mockResolvedValue([assetStub.sidecar]); + await expect( + sut.handleSidecarWrite({ + id: assetStub.sidecar.id, + description, + latitude: gps, + longitude: gps, + dateTimeOriginal: date, + }), + ).resolves.toBe(true); + expect(metadataMock.writeTags).toHaveBeenCalledWith(assetStub.sidecar.sidecarPath, { + ImageDescription: description, + CreationDate: date, + GPSLatitude: gps, + GPSLongitude: gps, + }); + }); + }); }); diff --git a/server/src/domain/metadata/metadata.service.ts b/server/src/domain/metadata/metadata.service.ts index 5a5b620d05..353be4e19b 100644 --- a/server/src/domain/metadata/metadata.service.ts +++ b/server/src/domain/metadata/metadata.service.ts @@ -254,7 +254,7 @@ export class MetadataService { async handleSidecarWrite(job: ISidecarWriteJob) { const { id, description, dateTimeOriginal, latitude, longitude } = job; - const asset = await this.assetRepository.getById(id); + const [asset] = await this.assetRepository.getByIds([id]); if (!asset) { return false; }