import { Kysely } from 'kysely'; import { AssetFileType } from 'src/enum'; import { LoggingRepository } from 'src/repositories/logging.repository'; import { PersonRepository } from 'src/repositories/person.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; const setup = (db?: Kysely) => { const { ctx } = newMediumService(BaseService, { database: db || defaultDatabase, real: [], mock: [LoggingRepository], }); return { ctx, sut: ctx.get(PersonRepository) }; }; beforeAll(async () => { defaultDatabase = await getKyselyDB(); }); describe(PersonRepository.name, () => { describe('getDataForThumbnailGenerationJob', () => { it('should not return the edited preview path', async () => { const { ctx, sut } = setup(); const { user } = await ctx.newUser(); const { asset } = await ctx.newAsset({ ownerId: user.id }); const { person } = await ctx.newPerson({ ownerId: user.id }); const { assetFace } = await ctx.newAssetFace({ assetId: asset.id, personId: person.id, boundingBoxX1: 10, boundingBoxY1: 10, boundingBoxX2: 90, boundingBoxY2: 90, }); // theres a circular dependency between assetFace and person, so we need to update the person after creating the assetFace await ctx.database.updateTable('person').set({ faceAssetId: assetFace.id }).where('id', '=', person.id).execute(); await ctx.newAssetFile({ assetId: asset.id, type: AssetFileType.Preview, path: 'preview_edited.jpg', isEdited: true, }); await ctx.newAssetFile({ assetId: asset.id, type: AssetFileType.Preview, path: 'preview_unedited.jpg', isEdited: false, }); const result = await sut.getDataForThumbnailGenerationJob(person.id); expect(result).toEqual( expect.objectContaining({ previewPath: 'preview_unedited.jpg', }), ); }); }); });