mirror of
https://github.com/immich-app/immich.git
synced 2026-02-28 09:38:43 +03:00
151 lines
4.9 KiB
TypeScript
151 lines
4.9 KiB
TypeScript
import { Kysely } from 'kysely';
|
|
import { AssetRepository } from 'src/repositories/asset.repository';
|
|
import { LoggingRepository } from 'src/repositories/logging.repository';
|
|
import { DB } from 'src/schema';
|
|
import { BaseService } from 'src/services/base.service';
|
|
import { newMediumService } from 'test/medium.factory';
|
|
import { getKyselyDB } from 'test/utils';
|
|
|
|
let defaultDatabase: Kysely<DB>;
|
|
|
|
const setup = (db?: Kysely<DB>) => {
|
|
const { ctx } = newMediumService(BaseService, {
|
|
database: db || defaultDatabase,
|
|
real: [],
|
|
mock: [LoggingRepository],
|
|
});
|
|
return { ctx, sut: ctx.get(AssetRepository) };
|
|
};
|
|
|
|
beforeAll(async () => {
|
|
defaultDatabase = await getKyselyDB();
|
|
});
|
|
|
|
describe(AssetRepository.name, () => {
|
|
describe('upsertExif', () => {
|
|
it('should append to locked columns', async () => {
|
|
const { ctx, sut } = setup();
|
|
const { user } = await ctx.newUser();
|
|
const { asset } = await ctx.newAsset({ ownerId: user.id });
|
|
await ctx.newExif({
|
|
assetId: asset.id,
|
|
dateTimeOriginal: '2023-11-19T18:11:00',
|
|
lockedProperties: ['dateTimeOriginal'],
|
|
});
|
|
|
|
await expect(
|
|
ctx.database
|
|
.selectFrom('asset_exif')
|
|
.select('lockedProperties')
|
|
.where('assetId', '=', asset.id)
|
|
.executeTakeFirstOrThrow(),
|
|
).resolves.toEqual({ lockedProperties: ['dateTimeOriginal'] });
|
|
|
|
await sut.upsertExif(
|
|
{ assetId: asset.id, lockedProperties: ['description'] },
|
|
{ lockedPropertiesBehavior: 'append' },
|
|
);
|
|
|
|
await expect(
|
|
ctx.database
|
|
.selectFrom('asset_exif')
|
|
.select('lockedProperties')
|
|
.where('assetId', '=', asset.id)
|
|
.executeTakeFirstOrThrow(),
|
|
).resolves.toEqual({ lockedProperties: ['description', 'dateTimeOriginal'] });
|
|
});
|
|
|
|
it('should deduplicate locked columns', async () => {
|
|
const { ctx, sut } = setup();
|
|
const { user } = await ctx.newUser();
|
|
const { asset } = await ctx.newAsset({ ownerId: user.id });
|
|
await ctx.newExif({
|
|
assetId: asset.id,
|
|
dateTimeOriginal: '2023-11-19T18:11:00',
|
|
lockedProperties: ['dateTimeOriginal', 'description'],
|
|
});
|
|
|
|
await expect(
|
|
ctx.database
|
|
.selectFrom('asset_exif')
|
|
.select('lockedProperties')
|
|
.where('assetId', '=', asset.id)
|
|
.executeTakeFirstOrThrow(),
|
|
).resolves.toEqual({ lockedProperties: ['dateTimeOriginal', 'description'] });
|
|
|
|
await sut.upsertExif(
|
|
{ assetId: asset.id, lockedProperties: ['description'] },
|
|
{ lockedPropertiesBehavior: 'append' },
|
|
);
|
|
|
|
await expect(
|
|
ctx.database
|
|
.selectFrom('asset_exif')
|
|
.select('lockedProperties')
|
|
.where('assetId', '=', asset.id)
|
|
.executeTakeFirstOrThrow(),
|
|
).resolves.toEqual({ lockedProperties: ['description', 'dateTimeOriginal'] });
|
|
});
|
|
});
|
|
|
|
describe('unlockProperties', () => {
|
|
it('should unlock one property', async () => {
|
|
const { ctx, sut } = setup();
|
|
const { user } = await ctx.newUser();
|
|
const { asset } = await ctx.newAsset({ ownerId: user.id });
|
|
await ctx.newExif({
|
|
assetId: asset.id,
|
|
dateTimeOriginal: '2023-11-19T18:11:00',
|
|
lockedProperties: ['dateTimeOriginal', 'description'],
|
|
});
|
|
|
|
await expect(
|
|
ctx.database
|
|
.selectFrom('asset_exif')
|
|
.select('lockedProperties')
|
|
.where('assetId', '=', asset.id)
|
|
.executeTakeFirstOrThrow(),
|
|
).resolves.toEqual({ lockedProperties: ['dateTimeOriginal', 'description'] });
|
|
|
|
await sut.unlockProperties(asset.id, ['dateTimeOriginal']);
|
|
|
|
await expect(
|
|
ctx.database
|
|
.selectFrom('asset_exif')
|
|
.select('lockedProperties')
|
|
.where('assetId', '=', asset.id)
|
|
.executeTakeFirstOrThrow(),
|
|
).resolves.toEqual({ lockedProperties: ['description'] });
|
|
});
|
|
|
|
it('should unlock all properties', async () => {
|
|
const { ctx, sut } = setup();
|
|
const { user } = await ctx.newUser();
|
|
const { asset } = await ctx.newAsset({ ownerId: user.id });
|
|
await ctx.newExif({
|
|
assetId: asset.id,
|
|
dateTimeOriginal: '2023-11-19T18:11:00',
|
|
lockedProperties: ['dateTimeOriginal', 'description'],
|
|
});
|
|
|
|
await expect(
|
|
ctx.database
|
|
.selectFrom('asset_exif')
|
|
.select('lockedProperties')
|
|
.where('assetId', '=', asset.id)
|
|
.executeTakeFirstOrThrow(),
|
|
).resolves.toEqual({ lockedProperties: ['dateTimeOriginal', 'description'] });
|
|
|
|
await sut.unlockProperties(asset.id, ['description', 'dateTimeOriginal']);
|
|
|
|
await expect(
|
|
ctx.database
|
|
.selectFrom('asset_exif')
|
|
.select('lockedProperties')
|
|
.where('assetId', '=', asset.id)
|
|
.executeTakeFirstOrThrow(),
|
|
).resolves.toEqual({ lockedProperties: null });
|
|
});
|
|
});
|
|
});
|