import { Kysely } from 'kysely'; import { randomBytes } from 'node:crypto'; import { SharedLinkType } from 'src/enum'; import { AccessRepository } from 'src/repositories/access.repository'; import { DatabaseRepository } from 'src/repositories/database.repository'; import { LoggingRepository } from 'src/repositories/logging.repository'; import { SharedLinkRepository } from 'src/repositories/shared-link.repository'; import { StorageRepository } from 'src/repositories/storage.repository'; import { DB } from 'src/schema'; import { SharedLinkService } from 'src/services/shared-link.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(SharedLinkService, { database: db || defaultDatabase, real: [AccessRepository, DatabaseRepository, SharedLinkRepository], mock: [LoggingRepository, StorageRepository], }); }; beforeAll(async () => { defaultDatabase = await getKyselyDB(); }); describe(SharedLinkService.name, () => { describe('get', () => { it('should return the correct dates on the shared link album', async () => { const { sut, ctx } = setup(); const { user } = await ctx.newUser(); const auth = factory.auth({ user }); const { album } = await ctx.newAlbum({ ownerId: user.id }); const dates = ['2021-01-01T00:00:00.000Z', '2022-01-01T00:00:00.000Z', '2020-01-01T00:00:00.000Z']; for (const date of dates) { const { asset } = await ctx.newAsset({ fileCreatedAt: date, localDateTime: date, ownerId: user.id }); await ctx.newExif({ assetId: asset.id, make: 'Canon' }); await ctx.newAlbumAsset({ albumId: album.id, assetId: asset.id }); } const sharedLinkRepo = ctx.get(SharedLinkRepository); const sharedLink = await sharedLinkRepo.create({ key: randomBytes(16), id: factory.uuid(), userId: user.id, albumId: album.id, allowUpload: true, type: SharedLinkType.Album, }); await expect(sut.get(auth, sharedLink.id)).resolves.toMatchObject({ album: expect.objectContaining({ startDate: '2020-01-01T00:00:00+00:00', endDate: '2022-01-01T00:00:00+00:00', }), }); }); }); });