mirror of
https://github.com/immich-app/immich.git
synced 2024-11-28 09:33:27 +02:00
2943f93098
* rename albums_shared_users_users to album_permissions and add readonly column * disable synchronize on the original join table * remove unnecessary FK names * set readonly=true as default for new album shares * separate and implement album READ and WRITE permission * expose albumPermissions on the API, deprecate sharedUsers * generate openapi * create readonly view on frontend * ??? move slideshow button out from ellipsis menu so that non-owners can have access too * correct sharedUsers joins * add album permission repository * remove a log * fix assetCount getting reset when adding users * fix lint * add set permission endpoint and UI * sort users * remove log * Revert "??? move slideshow button out from ellipsis menu so that non-owners can have access too" This reverts commit1343bfa311
. * rename stuff * fix db schema annotations * sql generate * change readonly default to follow migration * fix deprecation notice * change readonly boolean to role enum * fix joincolumn as primary key * rename albumUserRepository in album service * clean up userId and albumId * add write access to shared link * fix existing tests * switch to vitest * format and fix tests on web * add new test * fix one e2e test * rename new API field to albumUsers * capitalize serverside enum * remove unused ReadWrite type * missed rename from previous commit * rename to albumUsers in album entity as well * remove outdated Equals calls * unnecessary relation * rename to updateUser in album service * minor renamery * move sorting to backend * rename and separate ALBUM_WRITE as ADD_ASSET and REMOVE_ASSET * fix tests * fix "should migrate single moving picture" test failing on European system timezone * generated changes after merge * lint fix * fix correct page to open after removing user from album * fix e2e tests and some bugs * rename updateAlbumUser rest endpoint * add new e2e tests for updateAlbumUser endpoint * small optimizations * refactor album e2e test, add new album shared with viewer * add new test to check if viewer can see the album * add new e2e tests for readonly share * failing test: User delete doesn't cascade to UserAlbum entity * fix: handle deleted users * use lodash for sort * add role to addUsersToAlbum endpoint * add UI for adding editors * lint fixes * change role back to editor as DB default * fix server tests * redesign user selection modal editor selector * style tweaks * fix type error * Revert "style tweaks" This reverts commitab604f4c8f
. * Revert "redesign user selection modal editor selector" This reverts commite6f344856c
. * chore: cleanup and improve add user modal * chore: open api * small styling --------- Co-authored-by: mgabor <> Co-authored-by: Jason Rasmussen <jrasm91@gmail.com> Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
210 lines
5.8 KiB
TypeScript
210 lines
5.8 KiB
TypeScript
import { AlbumUserRole } from 'src/entities/album-user.entity';
|
|
import { AlbumEntity, AssetOrder } from 'src/entities/album.entity';
|
|
import { assetStub } from 'test/fixtures/asset.stub';
|
|
import { authStub } from 'test/fixtures/auth.stub';
|
|
import { userStub } from 'test/fixtures/user.stub';
|
|
|
|
export const albumStub = {
|
|
empty: Object.freeze<AlbumEntity>({
|
|
id: 'album-1',
|
|
albumName: 'Empty album',
|
|
description: '',
|
|
ownerId: authStub.admin.user.id,
|
|
owner: userStub.admin,
|
|
assets: [],
|
|
albumThumbnailAsset: null,
|
|
albumThumbnailAssetId: null,
|
|
createdAt: new Date(),
|
|
updatedAt: new Date(),
|
|
deletedAt: null,
|
|
sharedLinks: [],
|
|
albumUsers: [],
|
|
isActivityEnabled: true,
|
|
order: AssetOrder.DESC,
|
|
}),
|
|
sharedWithUser: Object.freeze<AlbumEntity>({
|
|
id: 'album-2',
|
|
albumName: 'Empty album shared with user',
|
|
description: '',
|
|
ownerId: authStub.admin.user.id,
|
|
owner: userStub.admin,
|
|
assets: [],
|
|
albumThumbnailAsset: null,
|
|
albumThumbnailAssetId: null,
|
|
createdAt: new Date(),
|
|
updatedAt: new Date(),
|
|
deletedAt: null,
|
|
sharedLinks: [],
|
|
albumUsers: [
|
|
{
|
|
user: userStub.user1,
|
|
album: undefined as unknown as AlbumEntity,
|
|
role: AlbumUserRole.EDITOR,
|
|
userId: userStub.user1.id,
|
|
albumId: 'album-2',
|
|
},
|
|
],
|
|
isActivityEnabled: true,
|
|
order: AssetOrder.DESC,
|
|
}),
|
|
sharedWithMultiple: Object.freeze<AlbumEntity>({
|
|
id: 'album-3',
|
|
albumName: 'Empty album shared with users',
|
|
description: '',
|
|
ownerId: authStub.admin.user.id,
|
|
owner: userStub.admin,
|
|
assets: [],
|
|
albumThumbnailAsset: null,
|
|
albumThumbnailAssetId: null,
|
|
createdAt: new Date(),
|
|
updatedAt: new Date(),
|
|
deletedAt: null,
|
|
sharedLinks: [],
|
|
albumUsers: [
|
|
{
|
|
user: userStub.user1,
|
|
album: undefined as unknown as AlbumEntity,
|
|
role: AlbumUserRole.EDITOR,
|
|
userId: userStub.user1.id,
|
|
albumId: 'album-3',
|
|
},
|
|
{
|
|
user: userStub.user2,
|
|
album: undefined as unknown as AlbumEntity,
|
|
role: AlbumUserRole.EDITOR,
|
|
userId: userStub.user2.id,
|
|
albumId: 'album-3',
|
|
},
|
|
],
|
|
isActivityEnabled: true,
|
|
order: AssetOrder.DESC,
|
|
}),
|
|
sharedWithAdmin: Object.freeze<AlbumEntity>({
|
|
id: 'album-3',
|
|
albumName: 'Empty album shared with admin',
|
|
description: '',
|
|
ownerId: authStub.user1.user.id,
|
|
owner: userStub.user1,
|
|
assets: [],
|
|
albumThumbnailAsset: null,
|
|
albumThumbnailAssetId: null,
|
|
createdAt: new Date(),
|
|
updatedAt: new Date(),
|
|
deletedAt: null,
|
|
sharedLinks: [],
|
|
albumUsers: [
|
|
{
|
|
user: userStub.admin,
|
|
album: undefined as unknown as AlbumEntity,
|
|
role: AlbumUserRole.EDITOR,
|
|
userId: userStub.admin.id,
|
|
albumId: 'album-3',
|
|
},
|
|
],
|
|
isActivityEnabled: true,
|
|
order: AssetOrder.DESC,
|
|
}),
|
|
oneAsset: Object.freeze<AlbumEntity>({
|
|
id: 'album-4',
|
|
albumName: 'Album with one asset',
|
|
description: '',
|
|
ownerId: authStub.admin.user.id,
|
|
owner: userStub.admin,
|
|
assets: [assetStub.image],
|
|
albumThumbnailAsset: null,
|
|
albumThumbnailAssetId: null,
|
|
createdAt: new Date(),
|
|
updatedAt: new Date(),
|
|
deletedAt: null,
|
|
sharedLinks: [],
|
|
albumUsers: [],
|
|
isActivityEnabled: true,
|
|
order: AssetOrder.DESC,
|
|
}),
|
|
twoAssets: Object.freeze<AlbumEntity>({
|
|
id: 'album-4a',
|
|
albumName: 'Album with two assets',
|
|
description: '',
|
|
ownerId: authStub.admin.user.id,
|
|
owner: userStub.admin,
|
|
assets: [assetStub.image, assetStub.withLocation],
|
|
albumThumbnailAsset: assetStub.image,
|
|
albumThumbnailAssetId: assetStub.image.id,
|
|
createdAt: new Date(),
|
|
updatedAt: new Date(),
|
|
deletedAt: null,
|
|
sharedLinks: [],
|
|
albumUsers: [],
|
|
isActivityEnabled: true,
|
|
order: AssetOrder.DESC,
|
|
}),
|
|
emptyWithInvalidThumbnail: Object.freeze<AlbumEntity>({
|
|
id: 'album-5',
|
|
albumName: 'Empty album with invalid thumbnail',
|
|
description: '',
|
|
ownerId: authStub.admin.user.id,
|
|
owner: userStub.admin,
|
|
assets: [],
|
|
albumThumbnailAsset: assetStub.image,
|
|
albumThumbnailAssetId: assetStub.image.id,
|
|
createdAt: new Date(),
|
|
updatedAt: new Date(),
|
|
deletedAt: null,
|
|
sharedLinks: [],
|
|
albumUsers: [],
|
|
isActivityEnabled: true,
|
|
order: AssetOrder.DESC,
|
|
}),
|
|
emptyWithValidThumbnail: Object.freeze<AlbumEntity>({
|
|
id: 'album-5',
|
|
albumName: 'Empty album with invalid thumbnail',
|
|
description: '',
|
|
ownerId: authStub.admin.user.id,
|
|
owner: userStub.admin,
|
|
assets: [],
|
|
albumThumbnailAsset: null,
|
|
albumThumbnailAssetId: null,
|
|
createdAt: new Date(),
|
|
updatedAt: new Date(),
|
|
deletedAt: null,
|
|
sharedLinks: [],
|
|
albumUsers: [],
|
|
isActivityEnabled: true,
|
|
order: AssetOrder.DESC,
|
|
}),
|
|
oneAssetInvalidThumbnail: Object.freeze<AlbumEntity>({
|
|
id: 'album-6',
|
|
albumName: 'Album with one asset and invalid thumbnail',
|
|
description: '',
|
|
ownerId: authStub.admin.user.id,
|
|
owner: userStub.admin,
|
|
assets: [assetStub.image],
|
|
albumThumbnailAsset: assetStub.livePhotoMotionAsset,
|
|
albumThumbnailAssetId: assetStub.livePhotoMotionAsset.id,
|
|
createdAt: new Date(),
|
|
updatedAt: new Date(),
|
|
deletedAt: null,
|
|
sharedLinks: [],
|
|
albumUsers: [],
|
|
isActivityEnabled: true,
|
|
order: AssetOrder.DESC,
|
|
}),
|
|
oneAssetValidThumbnail: Object.freeze<AlbumEntity>({
|
|
id: 'album-6',
|
|
albumName: 'Album with one asset and invalid thumbnail',
|
|
description: '',
|
|
ownerId: authStub.admin.user.id,
|
|
owner: userStub.admin,
|
|
assets: [assetStub.image],
|
|
albumThumbnailAsset: assetStub.image,
|
|
albumThumbnailAssetId: assetStub.image.id,
|
|
createdAt: new Date(),
|
|
updatedAt: new Date(),
|
|
deletedAt: null,
|
|
sharedLinks: [],
|
|
albumUsers: [],
|
|
isActivityEnabled: true,
|
|
order: AssetOrder.DESC,
|
|
}),
|
|
};
|