import { Kysely } from 'kysely'; import { AccessRepository } from 'src/repositories/access.repository'; import { AssetRepository } from 'src/repositories/asset.repository'; import { EventRepository } from 'src/repositories/event.repository'; import { LoggingRepository } from 'src/repositories/logging.repository'; import { StackRepository } from 'src/repositories/stack.repository'; import { DB } from 'src/schema'; import { StackService } from 'src/services/stack.service'; import { newMediumService } from 'test/medium.factory'; import { factory } from 'test/small.factory'; import { getKyselyDB } from 'test/utils'; let defaultDatabase: Kysely; const setup = (db?: Kysely) => { return newMediumService(StackService, { database: db || defaultDatabase, real: [AccessRepository, AssetRepository, StackRepository], mock: [EventRepository, LoggingRepository], }); }; beforeAll(async () => { defaultDatabase = await getKyselyDB(); }); describe(StackService.name, () => { describe('create', () => { it('should not stack an asset of another user', async () => { const { sut, ctx } = setup(); const { user } = await ctx.newUser(); const { user: otherUser } = await ctx.newUser(); const { asset } = await ctx.newAsset({ ownerId: user.id }); const { asset: otherAsset } = await ctx.newAsset({ ownerId: otherUser.id }); await expect(sut.create(factory.auth({ user }), { assetIds: [asset.id, otherAsset.id] })).rejects.toThrow( 'Not found or no asset.update access', ); await expect( ctx.database.selectFrom('stack').selectAll().where('ownerId', '=', user.id).execute(), ).resolves.toEqual([]); }); }); });