mirror of
https://github.com/immich-app/immich.git
synced 2025-12-23 17:25:11 +03:00
@@ -1,11 +1,12 @@
|
||||
import { Insertable, Kysely } from 'kysely';
|
||||
import { randomBytes, randomUUID } from 'node:crypto';
|
||||
import { Writable } from 'node:stream';
|
||||
import { Assets, DB, Sessions, Users } from 'src/db';
|
||||
import { Assets, DB, Partners, Sessions, Users } from 'src/db';
|
||||
import { AuthDto } from 'src/dtos/auth.dto';
|
||||
import { AssetType } from 'src/enum';
|
||||
import { AlbumRepository } from 'src/repositories/album.repository';
|
||||
import { AssetRepository } from 'src/repositories/asset.repository';
|
||||
import { PartnerRepository } from 'src/repositories/partner.repository';
|
||||
import { SessionRepository } from 'src/repositories/session.repository';
|
||||
import { SyncRepository } from 'src/repositories/sync.repository';
|
||||
import { UserRepository } from 'src/repositories/user.repository';
|
||||
@@ -30,6 +31,7 @@ class CustomWritable extends Writable {
|
||||
type Asset = Insertable<Assets>;
|
||||
type User = Partial<Insertable<Users>>;
|
||||
type Session = Omit<Insertable<Sessions>, 'token'> & { token?: string };
|
||||
type Partner = Insertable<Partners>;
|
||||
|
||||
export const newUuid = () => randomUUID() as string;
|
||||
|
||||
@@ -37,6 +39,7 @@ export class TestFactory {
|
||||
private assets: Asset[] = [];
|
||||
private sessions: Session[] = [];
|
||||
private users: User[] = [];
|
||||
private partners: Partner[] = [];
|
||||
|
||||
private constructor(private context: TestContext) {}
|
||||
|
||||
@@ -100,6 +103,17 @@ export class TestFactory {
|
||||
};
|
||||
}
|
||||
|
||||
static partner(partner: Partner) {
|
||||
const defaults = {
|
||||
inTimeline: true,
|
||||
};
|
||||
|
||||
return {
|
||||
...defaults,
|
||||
...partner,
|
||||
};
|
||||
}
|
||||
|
||||
withAsset(asset: Asset) {
|
||||
this.assets.push(asset);
|
||||
return this;
|
||||
@@ -115,6 +129,11 @@ export class TestFactory {
|
||||
return this;
|
||||
}
|
||||
|
||||
withPartner(partner: Partner) {
|
||||
this.partners.push(partner);
|
||||
return this;
|
||||
}
|
||||
|
||||
async create() {
|
||||
for (const asset of this.assets) {
|
||||
await this.context.createAsset(asset);
|
||||
@@ -124,6 +143,10 @@ export class TestFactory {
|
||||
await this.context.createUser(user);
|
||||
}
|
||||
|
||||
for (const partner of this.partners) {
|
||||
await this.context.createPartner(partner);
|
||||
}
|
||||
|
||||
for (const session of this.sessions) {
|
||||
await this.context.createSession(session);
|
||||
}
|
||||
@@ -138,6 +161,7 @@ export class TestContext {
|
||||
albumRepository: AlbumRepository;
|
||||
sessionRepository: SessionRepository;
|
||||
syncRepository: SyncRepository;
|
||||
partnerRepository: PartnerRepository;
|
||||
|
||||
private constructor(private db: Kysely<DB>) {
|
||||
this.userRepository = new UserRepository(this.db);
|
||||
@@ -145,6 +169,7 @@ export class TestContext {
|
||||
this.albumRepository = new AlbumRepository(this.db);
|
||||
this.sessionRepository = new SessionRepository(this.db);
|
||||
this.syncRepository = new SyncRepository(this.db);
|
||||
this.partnerRepository = new PartnerRepository(this.db);
|
||||
}
|
||||
|
||||
static from(db: Kysely<DB>) {
|
||||
@@ -159,6 +184,10 @@ export class TestContext {
|
||||
return this.userRepository.create(TestFactory.user(user));
|
||||
}
|
||||
|
||||
createPartner(partner: Partner) {
|
||||
return this.partnerRepository.create(TestFactory.partner(partner));
|
||||
}
|
||||
|
||||
createAsset(asset: Asset) {
|
||||
return this.assetRepository.create(TestFactory.asset(asset));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user