mirror of
https://github.com/immich-app/immich
synced 2025-11-07 17:27:20 +00:00
fix(server): live photo relation (#10637)
* fix(server): live photo relation * handle deletion and unit test * lint * chore: clean up and e2e tests * fix test * sql --------- Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
This commit is contained in:
parent
8ff9c37d79
commit
7e99394c70
12 changed files with 140 additions and 7 deletions
|
|
@ -588,6 +588,58 @@ describe('/asset', () => {
|
|||
const after = await utils.getAssetInfo(admin.accessToken, assetId);
|
||||
expect(after.isTrashed).toBe(true);
|
||||
});
|
||||
|
||||
it('should clean up live photos', async () => {
|
||||
const { id: motionId } = await utils.createAsset(admin.accessToken, {
|
||||
assetData: { filename: 'test.mp4', bytes: makeRandomImage() },
|
||||
});
|
||||
const { id: photoId } = await utils.createAsset(admin.accessToken, { livePhotoVideoId: motionId });
|
||||
|
||||
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: photoId });
|
||||
await utils.waitForWebsocketEvent({ event: 'assetHidden', id: motionId });
|
||||
|
||||
const asset = await utils.getAssetInfo(admin.accessToken, photoId);
|
||||
expect(asset.livePhotoVideoId).toBe(motionId);
|
||||
|
||||
const { status } = await request(app)
|
||||
.delete('/assets')
|
||||
.send({ ids: [photoId], force: true })
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(status).toBe(204);
|
||||
|
||||
await utils.waitForWebsocketEvent({ event: 'assetDelete', id: photoId });
|
||||
await utils.waitForWebsocketEvent({ event: 'assetDelete', id: motionId });
|
||||
});
|
||||
|
||||
it('should not delete a shared motion asset', async () => {
|
||||
const { id: motionId } = await utils.createAsset(admin.accessToken, {
|
||||
assetData: { filename: 'test.mp4', bytes: makeRandomImage() },
|
||||
});
|
||||
const { id: asset1 } = await utils.createAsset(admin.accessToken, { livePhotoVideoId: motionId });
|
||||
const { id: asset2 } = await utils.createAsset(admin.accessToken, { livePhotoVideoId: motionId });
|
||||
|
||||
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset1 });
|
||||
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset2 });
|
||||
await utils.waitForWebsocketEvent({ event: 'assetHidden', id: motionId });
|
||||
|
||||
const asset = await utils.getAssetInfo(admin.accessToken, asset1);
|
||||
expect(asset.livePhotoVideoId).toBe(motionId);
|
||||
|
||||
const { status } = await request(app)
|
||||
.delete('/assets')
|
||||
.send({ ids: [asset1], force: true })
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(status).toBe(204);
|
||||
|
||||
await utils.waitForWebsocketEvent({ event: 'assetDelete', id: asset1 });
|
||||
await utils.waitForQueueFinish(admin.accessToken, 'backgroundTask');
|
||||
|
||||
await expect(utils.getAssetInfo(admin.accessToken, motionId)).resolves.toMatchObject({ id: motionId });
|
||||
await expect(utils.getAssetInfo(admin.accessToken, asset2)).resolves.toMatchObject({
|
||||
id: asset2,
|
||||
livePhotoVideoId: motionId,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('GET /assets/:id/thumbnail', () => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue