diff --git a/server/src/services/library.service.spec.ts b/server/src/services/library.service.spec.ts index 5f81d92ec2b3d3..6c22996bbc4836 100644 --- a/server/src/services/library.service.spec.ts +++ b/server/src/services/library.service.spec.ts @@ -337,12 +337,35 @@ describe(LibraryService.name, () => { expect(assetMock.updateAll).toHaveBeenCalledWith([assetStub.trashedOffline.id], { deletedAt: null, - fileCreatedAt: assetStub.trashedOffline.fileModifiedAt, fileModifiedAt: assetStub.trashedOffline.fileModifiedAt, isOffline: false, originalFileName: 'path.jpg', }); }); + + // regression test for https://github.com/immich-app/immich/issues/15640 + it('should not touch fileCreatedAt when un-trashing an asset previously marked as offline', async () => { + // After the initial import, fileCreatedAt is overwritten with metadata information (dateTimeOriginal). + // We need to retain this information. If we overwrite this, we'd need to trigger a new metadata extraction job. + + const mockAssetJob: ILibraryAssetJob = { + id: assetStub.external.id, + importPaths: ['/'], + exclusionPatterns: [], + }; + + assetMock.getById.mockResolvedValue(assetStub.trashedOffline); + storageMock.stat.mockResolvedValue({ mtime: assetStub.trashedOffline.fileModifiedAt } as Stats); + + await expect(sut.handleSyncAsset(mockAssetJob)).resolves.toBe(JobStatus.SUCCESS); + + expect(assetMock.updateAll).toHaveBeenCalledWith( + [assetStub.trashedOffline.id], + expect.not.objectContaining({ + fileCreatedAt: expect.anything(), + }), + ); + }); }); it('should update file when mtime has changed', async () => { @@ -360,7 +383,6 @@ describe(LibraryService.name, () => { expect(assetMock.updateAll).toHaveBeenCalledWith([assetStub.external.id], { fileModifiedAt: newMTime, - fileCreatedAt: newMTime, isOffline: false, originalFileName: 'photo.jpg', deletedAt: null, diff --git a/server/src/services/library.service.ts b/server/src/services/library.service.ts index dca1dec9e2786e..daccf01dceedb1 100644 --- a/server/src/services/library.service.ts +++ b/server/src/services/library.service.ts @@ -511,7 +511,6 @@ export class LibraryService extends BaseService { await this.assetRepository.updateAll([asset.id], { isOffline: false, deletedAt: null, - fileCreatedAt: mtime, fileModifiedAt: mtime, originalFileName: parse(asset.originalPath).base, });