mirror of
https://github.com/immich-app/immich.git
synced 2026-04-18 00:21:55 -04:00
* Multi add to album picker: - update modal for multi select - Update add-to-album and add-to-album-action to work with new array return from AlbumPickerModal - Add asset-utils.addAssetsToAlbums (incomplete) * initial addToAlbums endpoint * - fix endpoint - add test * - update return type - make open-api * - simplify return dto - handle notification * - fix returns - clean up * - update i18n - format & check * - checks * - correct successId count - fix assets_cannot_be_added language call * tests * foromat * refactor * - update successful add message to included total attempted * - fix web test - format i18n * - fix open-api * - fix imports to resolve checks * - PR suggestions * open-api * refactor addAssetsToAlbums * refactor it again * - fix error returns and tests * - swap icon for IconButton - don't nest the buttons * open-api * - Cleanup multi-select button to match Thumbnail * merge and openapi * - remove onclick from icon element * - fix double onClose call with keyboard shortcuts * - spelling and formatting - apply new api permission * - open-api * chore: styling * translation --------- Co-authored-by: Alex <alex.tran1502@gmail.com>
182 lines
7.0 KiB
TypeScript
182 lines
7.0 KiB
TypeScript
import {
|
|
type AlbumModalRow,
|
|
AlbumModalRowConverter,
|
|
AlbumModalRowType,
|
|
} from '$lib/components/shared-components/album-selection/album-selection-utils';
|
|
import { AlbumSortBy, SortOrder } from '$lib/stores/preferences.store';
|
|
import type { AlbumResponseDto } from '@immich/sdk';
|
|
import { albumFactory } from '@test-data/factories/album-factory';
|
|
|
|
// Some helper functions to make tests below more readable
|
|
const createNewAlbumRow = (selected: boolean) => ({
|
|
type: AlbumModalRowType.NEW_ALBUM,
|
|
selected,
|
|
});
|
|
const createMessageRow = (message: string): AlbumModalRow => ({
|
|
type: AlbumModalRowType.MESSAGE,
|
|
text: message,
|
|
});
|
|
const createSectionRow = (message: string): AlbumModalRow => ({
|
|
type: AlbumModalRowType.SECTION,
|
|
text: message,
|
|
});
|
|
const createAlbumRow = (album: AlbumResponseDto, selected: boolean) => ({
|
|
type: AlbumModalRowType.ALBUM_ITEM,
|
|
album,
|
|
selected,
|
|
multiSelected: false,
|
|
});
|
|
|
|
describe('Album Modal', () => {
|
|
it('non-shared with no albums configured yet shows message and new', () => {
|
|
const converter = new AlbumModalRowConverter(false, AlbumSortBy.MostRecentPhoto, SortOrder.Desc);
|
|
const modalRows = converter.toModalRows('', [], [], -1, []);
|
|
|
|
expect(modalRows).toStrictEqual([createNewAlbumRow(false), createMessageRow('no_albums_yet')]);
|
|
});
|
|
|
|
it('non-shared with no matching albums shows message and new', () => {
|
|
const converter = new AlbumModalRowConverter(false, AlbumSortBy.MostRecentPhoto, SortOrder.Desc);
|
|
const modalRows = converter.toModalRows(
|
|
'matches_nothing',
|
|
[],
|
|
[albumFactory.build({ albumName: 'Holidays' })],
|
|
-1,
|
|
[],
|
|
);
|
|
|
|
expect(modalRows).toStrictEqual([createNewAlbumRow(false), createMessageRow('no_albums_with_name_yet')]);
|
|
});
|
|
|
|
it('non-shared displays single albums', () => {
|
|
const converter = new AlbumModalRowConverter(false, AlbumSortBy.MostRecentPhoto, SortOrder.Desc);
|
|
const holidayAlbum = albumFactory.build({ albumName: 'Holidays' });
|
|
const modalRows = converter.toModalRows('', [], [holidayAlbum], -1, []);
|
|
|
|
expect(modalRows).toStrictEqual([
|
|
createNewAlbumRow(false),
|
|
createSectionRow('ALL_ALBUMS'),
|
|
createAlbumRow(holidayAlbum, false),
|
|
]);
|
|
});
|
|
|
|
it('non-shared displays multiple albums and recents', () => {
|
|
const converter = new AlbumModalRowConverter(false, AlbumSortBy.MostRecentPhoto, SortOrder.Desc);
|
|
const holidayAlbum = albumFactory.build({ albumName: 'Holidays' });
|
|
const constructionAlbum = albumFactory.build({ albumName: 'Construction' });
|
|
const birthdayAlbum = albumFactory.build({ albumName: 'Birthday' });
|
|
const christmasAlbum = albumFactory.build({ albumName: 'Christmas' });
|
|
const modalRows = converter.toModalRows(
|
|
'',
|
|
[holidayAlbum, constructionAlbum],
|
|
[holidayAlbum, constructionAlbum, birthdayAlbum, christmasAlbum],
|
|
-1,
|
|
[],
|
|
);
|
|
|
|
expect(modalRows).toStrictEqual([
|
|
createNewAlbumRow(false),
|
|
createSectionRow('RECENT'),
|
|
createAlbumRow(holidayAlbum, false),
|
|
createAlbumRow(constructionAlbum, false),
|
|
createSectionRow('ALL_ALBUMS'),
|
|
createAlbumRow(holidayAlbum, false),
|
|
createAlbumRow(constructionAlbum, false),
|
|
createAlbumRow(birthdayAlbum, false),
|
|
createAlbumRow(christmasAlbum, false),
|
|
]);
|
|
});
|
|
|
|
it('shared only displays albums and no recents', () => {
|
|
const converter = new AlbumModalRowConverter(true, AlbumSortBy.MostRecentPhoto, SortOrder.Desc);
|
|
const holidayAlbum = albumFactory.build({ albumName: 'Holidays' });
|
|
const constructionAlbum = albumFactory.build({ albumName: 'Construction' });
|
|
const birthdayAlbum = albumFactory.build({ albumName: 'Birthday' });
|
|
const christmasAlbum = albumFactory.build({ albumName: 'Christmas' });
|
|
const modalRows = converter.toModalRows(
|
|
'',
|
|
[holidayAlbum, constructionAlbum],
|
|
[holidayAlbum, constructionAlbum, birthdayAlbum, christmasAlbum],
|
|
-1,
|
|
[],
|
|
);
|
|
|
|
expect(modalRows).toStrictEqual([
|
|
createNewAlbumRow(false),
|
|
createAlbumRow(holidayAlbum, false),
|
|
createAlbumRow(constructionAlbum, false),
|
|
createAlbumRow(birthdayAlbum, false),
|
|
createAlbumRow(christmasAlbum, false),
|
|
]);
|
|
});
|
|
|
|
it('search changes messaging and removes recent and non-matching albums', () => {
|
|
const converter = new AlbumModalRowConverter(false, AlbumSortBy.MostRecentPhoto, SortOrder.Desc);
|
|
const holidayAlbum = albumFactory.build({ albumName: 'Holidays' });
|
|
const constructionAlbum = albumFactory.build({ albumName: 'Construction' });
|
|
const birthdayAlbum = albumFactory.build({ albumName: 'Birthday' });
|
|
const christmasAlbum = albumFactory.build({ albumName: 'Christmas' });
|
|
const modalRows = converter.toModalRows(
|
|
'Cons',
|
|
[holidayAlbum, constructionAlbum],
|
|
[holidayAlbum, constructionAlbum, birthdayAlbum, christmasAlbum],
|
|
-1,
|
|
[],
|
|
);
|
|
|
|
expect(modalRows).toStrictEqual([
|
|
createNewAlbumRow(false),
|
|
createSectionRow('ALBUMS'),
|
|
createAlbumRow(constructionAlbum, false),
|
|
]);
|
|
});
|
|
|
|
it('selection can select new album row', () => {
|
|
const converter = new AlbumModalRowConverter(false, AlbumSortBy.MostRecentPhoto, SortOrder.Desc);
|
|
const holidayAlbum = albumFactory.build({ albumName: 'Holidays' });
|
|
const constructionAlbum = albumFactory.build({ albumName: 'Construction' });
|
|
const modalRows = converter.toModalRows('', [holidayAlbum], [holidayAlbum, constructionAlbum], 0, []);
|
|
|
|
expect(modalRows).toStrictEqual([
|
|
createNewAlbumRow(true),
|
|
createSectionRow('RECENT'),
|
|
createAlbumRow(holidayAlbum, false),
|
|
createSectionRow('ALL_ALBUMS'),
|
|
createAlbumRow(holidayAlbum, false),
|
|
createAlbumRow(constructionAlbum, false),
|
|
]);
|
|
});
|
|
|
|
it('selection can select recent row', () => {
|
|
const converter = new AlbumModalRowConverter(false, AlbumSortBy.MostRecentPhoto, SortOrder.Desc);
|
|
const holidayAlbum = albumFactory.build({ albumName: 'Holidays' });
|
|
const constructionAlbum = albumFactory.build({ albumName: 'Construction' });
|
|
const modalRows = converter.toModalRows('', [holidayAlbum], [holidayAlbum, constructionAlbum], 1, []);
|
|
|
|
expect(modalRows).toStrictEqual([
|
|
createNewAlbumRow(false),
|
|
createSectionRow('RECENT'),
|
|
createAlbumRow(holidayAlbum, true),
|
|
createSectionRow('ALL_ALBUMS'),
|
|
createAlbumRow(holidayAlbum, false),
|
|
createAlbumRow(constructionAlbum, false),
|
|
]);
|
|
});
|
|
|
|
it('selection can select last row', () => {
|
|
const converter = new AlbumModalRowConverter(false, AlbumSortBy.MostRecentPhoto, SortOrder.Desc);
|
|
const holidayAlbum = albumFactory.build({ albumName: 'Holidays' });
|
|
const constructionAlbum = albumFactory.build({ albumName: 'Construction' });
|
|
const modalRows = converter.toModalRows('', [holidayAlbum], [holidayAlbum, constructionAlbum], 3, []);
|
|
|
|
expect(modalRows).toStrictEqual([
|
|
createNewAlbumRow(false),
|
|
createSectionRow('RECENT'),
|
|
createAlbumRow(holidayAlbum, false),
|
|
createSectionRow('ALL_ALBUMS'),
|
|
createAlbumRow(holidayAlbum, false),
|
|
createAlbumRow(constructionAlbum, true),
|
|
]);
|
|
});
|
|
});
|