Vercel/__tests__/path.test.ts
Sam Becker 3607d51c06
Select All Photos (2 of 2) (#375)
* Enable select all toggle

* Extend category path test coverage

* Preview queries when selecting all

* Hoist select all query count to app state

* Refine select photo behavior/presentation

* Refactor batch edit actions

* Refactor limit handling in path-based photo queries

* Show all tags in admin views

* Fix select all z-order
2026-02-16 09:23:28 -06:00

231 lines
7.8 KiB
TypeScript

/* eslint-disable max-len */
import {
getEscapePath,
getPathComponents,
isPathCamera,
isPathCameraPhoto,
isPathFilm,
isPathFilmPhoto,
isPathFocalLength,
isPathFocalLengthPhoto,
isPathPhoto,
isPathProtected,
isPathTag,
isPathTagPhoto,
PATH_ADMIN,
PATH_ADMIN_PHOTOS,
PATH_FULL,
PATH_GRID,
PATH_OG,
PATH_OG_ALL,
PATH_OG_SAMPLE,
PATH_ROOT,
PREFIX_ALBUM,
PREFIX_CAMERA,
PREFIX_FILM,
PREFIX_FOCAL_LENGTH,
PREFIX_LENS,
PREFIX_RECENTS,
PREFIX_RECIPE,
PREFIX_TAG,
PREFIX_YEAR,
} from '@/app/path';
import { TAG_PRIVATE } from '@/tag';
const PHOTO_ID = 'UsKSGcbt';
const YEAR = '2025';
const CAMERA_MAKE = 'fujifilm';
const CAMERA_MODEL = 'x-t1';
const CAMERA_OBJECT = { make: CAMERA_MAKE, model: CAMERA_MODEL };
const LENS_MAKE = 'fujifilm';
const LENS_MODEL = 'xf90mmf2-r-lm-wr';
const LENS_OBJECT = { make: LENS_MAKE, model: LENS_MODEL };
const ALBUM = 'album-name';
const TAG = 'tag-name';
const RECIPE = 'nature-nurture';
const FILM = 'acros';
const FOCAL_LENGTH = 90;
const FOCAL_LENGTH_STRING = `${FOCAL_LENGTH}mm`;
const PATH_PHOTO = `/p/${PHOTO_ID}`;
const PATH_RECENTS = PREFIX_RECENTS;
const PATH_RECENTS_PHOTO = `${PATH_RECENTS}/${PHOTO_ID}`;
const PATH_YEAR = `${PREFIX_YEAR}/${YEAR}`;
const PATH_YEAR_PHOTO = `${PATH_YEAR}/${PHOTO_ID}`;
const PATH_CAMERA = `${PREFIX_CAMERA}/${CAMERA_MAKE}/${CAMERA_MODEL}`;
const PATH_CAMERA_PHOTO = `${PATH_CAMERA}/${PHOTO_ID}`;
const PATH_LENS = `${PREFIX_LENS}/${LENS_MAKE}/${LENS_MODEL}`;
const PATH_LENS_PHOTO = `${PATH_LENS}/${PHOTO_ID}`;
const PATH_ALBUM = `${PREFIX_ALBUM}/${ALBUM}`;
const PATH_ALBUM_PHOTO = `${PATH_ALBUM}/${PHOTO_ID}`;
const PATH_TAG = `${PREFIX_TAG}/${TAG}`;
const PATH_TAG_PHOTO = `${PATH_TAG}/${PHOTO_ID}`;
const PATH_TAG_PRIVATE = `${PREFIX_TAG}/${TAG_PRIVATE}`;
const PATH_TAG_PRIVATE_PHOTO = `${PATH_TAG_PRIVATE}/${PHOTO_ID}`;
const PATH_RECIPE = `${PREFIX_RECIPE}/${RECIPE}`;
const PATH_RECIPE_PHOTO = `${PATH_RECIPE}/${PHOTO_ID}`;
const PATH_FILM = `${PREFIX_FILM}/${FILM}`;
const PATH_FILM_PHOTO = `${PATH_FILM}/${PHOTO_ID}`;
const PATH_FOCAL_LENGTH = `${PREFIX_FOCAL_LENGTH}/${FOCAL_LENGTH_STRING}`;
const PATH_FOCAL_LENGTH_PHOTO = `${PATH_FOCAL_LENGTH}/${PHOTO_ID}`;
describe('Paths', () => {
it('can be protected', () => {
// Public
expect(isPathProtected(PATH_ROOT)).toBe(false);
expect(isPathProtected(PATH_PHOTO)).toBe(false);
expect(isPathProtected(PATH_TAG)).toBe(false);
expect(isPathProtected(PATH_TAG_PHOTO)).toBe(false);
expect(isPathProtected(PATH_CAMERA)).toBe(false);
expect(isPathProtected(PATH_FILM)).toBe(false);
// Private
expect(isPathProtected(PATH_ADMIN)).toBe(true);
expect(isPathProtected(PATH_ADMIN_PHOTOS)).toBe(true);
expect(isPathProtected(PATH_OG)).toBe(true);
expect(isPathProtected(PATH_OG_ALL)).toBe(true);
expect(isPathProtected(PATH_OG_SAMPLE)).toBe(true);
expect(isPathProtected(PATH_TAG_PRIVATE)).toBe(true);
expect(isPathProtected(PATH_TAG_PRIVATE_PHOTO)).toBe(true);
});
it('can be classified', () => {
// Positive
expect(isPathPhoto(PATH_PHOTO)).toBe(true);
expect(isPathCamera(PATH_CAMERA)).toBe(true);
expect(isPathCameraPhoto(PATH_CAMERA_PHOTO)).toBe(true);
expect(isPathTag(PATH_TAG)).toBe(true);
expect(isPathTagPhoto(PATH_TAG_PHOTO)).toBe(true);
expect(isPathFilm(PATH_FILM)).toBe(true);
expect(isPathFilmPhoto(PATH_FILM_PHOTO)).toBe(true);
expect(isPathFocalLength(PATH_FOCAL_LENGTH)).toBe(true);
expect(isPathFocalLengthPhoto(PATH_FOCAL_LENGTH_PHOTO)).toBe(true);
// Negative
expect(isPathFocalLength(PATH_FILM)).toBe(false);
expect(isPathFocalLengthPhoto(PATH_FILM_PHOTO)).toBe(false);
});
it('can be parsed', () => {
// Core
expect(getPathComponents(PATH_ROOT)).toEqual({});
expect(getPathComponents(PATH_PHOTO)).toEqual({
photoId: PHOTO_ID,
});
// Recents
expect(getPathComponents(PATH_RECENTS)).toEqual({
recent: true,
});
expect(getPathComponents(PATH_RECENTS_PHOTO)).toEqual({
photoId: PHOTO_ID,
recent: true,
});
// Year
expect(getPathComponents(PATH_YEAR)).toEqual({
year: YEAR,
});
expect(getPathComponents(PATH_YEAR_PHOTO)).toEqual({
photoId: PHOTO_ID,
year: YEAR,
});
// Camera
expect(getPathComponents(PATH_CAMERA)).toEqual({
camera: CAMERA_OBJECT,
});
expect(getPathComponents(PATH_CAMERA_PHOTO)).toEqual({
photoId: PHOTO_ID,
camera: CAMERA_OBJECT,
});
// Lens
expect(getPathComponents(PATH_LENS)).toEqual({
lens: LENS_OBJECT,
});
expect(getPathComponents(PATH_LENS_PHOTO)).toEqual({
photoId: PHOTO_ID,
lens: LENS_OBJECT,
});
// Album
expect(getPathComponents(PATH_ALBUM)).toEqual({
album: ALBUM,
});
expect(getPathComponents(PATH_ALBUM_PHOTO)).toEqual({
photoId: PHOTO_ID,
album: ALBUM,
});
// Tag
expect(getPathComponents(PATH_TAG)).toEqual({
tag: TAG,
});
expect(getPathComponents(PATH_TAG_PHOTO)).toEqual({
photoId: PHOTO_ID,
tag: TAG,
});
// Recipe
expect(getPathComponents(PATH_RECIPE)).toEqual({
recipe: RECIPE,
});
expect(getPathComponents(PATH_RECIPE_PHOTO)).toEqual({
photoId: PHOTO_ID,
recipe: RECIPE,
});
// Film
expect(getPathComponents(PATH_FILM)).toEqual({
film: FILM,
});
expect(getPathComponents(PATH_FILM_PHOTO)).toEqual({
photoId: PHOTO_ID,
film: FILM,
});
// Focal Length
expect(getPathComponents(PATH_FOCAL_LENGTH)).toEqual({
focal: FOCAL_LENGTH,
});
expect(getPathComponents(PATH_FOCAL_LENGTH_PHOTO)).toEqual({
photoId: PHOTO_ID,
focal: FOCAL_LENGTH,
});
});
it('can be escaped', () => {
// Root
expect(getEscapePath(PATH_ROOT)).toEqual(undefined);
expect(getEscapePath(PATH_GRID)).toEqual(undefined);
expect(getEscapePath(PATH_FULL)).toEqual(undefined);
expect(getEscapePath(PATH_ADMIN)).toEqual(undefined);
// Photo
expect(getEscapePath(PATH_PHOTO)).toEqual(PATH_ROOT);
// Recents
expect(getEscapePath(PATH_RECENTS)).toEqual(PATH_ROOT);
expect(getEscapePath(PATH_RECENTS_PHOTO)).toEqual(PATH_RECENTS);
// Year
expect(getEscapePath(PATH_YEAR)).toEqual(PATH_ROOT);
expect(getEscapePath(PATH_YEAR_PHOTO)).toEqual(PATH_YEAR);
// Camera
expect(getEscapePath(PATH_CAMERA)).toEqual(PATH_ROOT);
expect(getEscapePath(PATH_CAMERA_PHOTO)).toEqual(PATH_CAMERA);
// Lens
expect(getEscapePath(PATH_LENS)).toEqual(PATH_ROOT);
expect(getEscapePath(PATH_LENS_PHOTO)).toEqual(PATH_LENS);
// Album
expect(getEscapePath(PATH_ALBUM)).toEqual(PATH_ROOT);
expect(getEscapePath(PATH_ALBUM_PHOTO)).toEqual(PATH_ALBUM);
// Tag
expect(getEscapePath(PATH_TAG)).toEqual(PATH_ROOT);
expect(getEscapePath(PATH_TAG_PHOTO)).toEqual(PATH_TAG);
// Recipe
expect(getEscapePath(PATH_RECIPE)).toEqual(PATH_ROOT);
expect(getEscapePath(PATH_RECIPE_PHOTO)).toEqual(PATH_RECIPE);
// Film
expect(getEscapePath(PATH_FILM)).toEqual(PATH_ROOT);
expect(getEscapePath(PATH_FILM_PHOTO)).toEqual(PATH_FILM);
// Focal Length
expect(getEscapePath(PATH_FOCAL_LENGTH)).toEqual(PATH_ROOT);
expect(getEscapePath(PATH_FOCAL_LENGTH_PHOTO)).toEqual(PATH_FOCAL_LENGTH);
});
});