diff --git a/e2e/src/specs/server/api/album.e2e-spec.ts b/e2e/src/specs/server/api/album.e2e-spec.ts index a9e90940ab..d2b6b9befb 100644 --- a/e2e/src/specs/server/api/album.e2e-spec.ts +++ b/e2e/src/specs/server/api/album.e2e-spec.ts @@ -424,6 +424,7 @@ describe('/albums', () => { description: '', albumThumbnailAssetId: null, shared: false, + isFavorite: false, albumUsers: [], hasSharedLink: false, assets: [], @@ -540,6 +541,44 @@ describe('/albums', () => { }); }); + describe('PATCH /albums/:id/user-metadata', () => { + it('should toggle favorite status per user on a shared album', async () => { + const before = await getAlbumInfo({ id: user1Albums[3].id }, { headers: asBearerAuth(user2.accessToken) }); + expect(before.isFavorite).toBe(false); + + const favoriteResponse = await request(app) + .patch(`/albums/${user1Albums[3].id}/user-metadata`) + .set('Authorization', `Bearer ${user2.accessToken}`) + .send({ isFavorite: true }); + + expect(favoriteResponse.status).toBe(200); + expect(favoriteResponse.body).toMatchObject({ id: user1Albums[3].id, isFavorite: true }); + + const favoritedForViewer = await getAlbumInfo( + { id: user1Albums[3].id }, + { headers: asBearerAuth(user2.accessToken) }, + ); + const unchangedForOwner = await getAlbumInfo( + { id: user1Albums[3].id }, + { headers: asBearerAuth(user1.accessToken) }, + ); + + expect(favoritedForViewer.isFavorite).toBe(true); + expect(unchangedForOwner.isFavorite).toBe(false); + + const unfavoriteResponse = await request(app) + .patch(`/albums/${user1Albums[3].id}/user-metadata`) + .set('Authorization', `Bearer ${user2.accessToken}`) + .send({ isFavorite: false }); + + expect(unfavoriteResponse.status).toBe(200); + expect(unfavoriteResponse.body).toMatchObject({ id: user1Albums[3].id, isFavorite: false }); + + const after = await getAlbumInfo({ id: user1Albums[3].id }, { headers: asBearerAuth(user2.accessToken) }); + expect(after.isFavorite).toBe(false); + }); + }); + describe('DELETE /albums/:id/assets', () => { it('should require authorization', async () => { const { status, body } = await request(app) diff --git a/e2e/src/ui/generators/timeline/rest-response.ts b/e2e/src/ui/generators/timeline/rest-response.ts index 0c4bd06dc3..607d98a880 100644 --- a/e2e/src/ui/generators/timeline/rest-response.ts +++ b/e2e/src/ui/generators/timeline/rest-response.ts @@ -427,6 +427,7 @@ export function getAlbum( albumUsers: [], // Empty array for non-shared album shared: false, hasSharedLink: false, + isFavorite: false, isActivityEnabled: true, assetCount: albumAssets.length, assets: albumAssets,