UNPKG

@kenniy/godeye-data-contracts

Version:

Enterprise-grade base repository architecture for GOD-EYE microservices with zero overhead and maximum code reuse

153 lines (152 loc) 4.93 kB
/** * Entity Test Data Factories * Provides consistent test data generation for domain entities */ export interface MockUserEntity { _id: string; id?: string; name: string; email: string; firstName?: string; lastName?: string; status: 'active' | 'inactive' | 'deleted'; userType?: 'business' | 'individual' | 'admin'; verified?: boolean; phone?: string; createdAt: Date; updatedAt: Date; profile?: MockProfileEntity; business?: MockBusinessEntity; posts?: MockPostEntity[]; } export interface MockProfileEntity { _id: string; id?: string; bio: string; avatar?: string; userId: string; profileKind: 'doctor' | 'patient' | 'admin'; } export interface MockBusinessEntity { _id: string; id?: string; name: string; type: string; ownerId: string; owner?: MockUserEntity; contact?: MockContactEntity; } export interface MockPostEntity { _id: string; id?: string; title: string; content: string; authorId: string; author?: MockUserEntity; comments?: MockCommentEntity[]; } export interface MockCommentEntity { _id: string; id?: string; content: string; authorId: string; author?: MockUserEntity; } export interface MockContactEntity { _id: string; id?: string; email: string; phone: string; } export interface MockFileEntity { _id: string; id?: string; name: string; originalName: string; mimeType: string; size: number; fileType: 'image' | 'document' | 'video' | 'audio'; userId: string; user?: MockUserEntity; folderId?: string; folder?: MockFolderEntity; tags?: string[]; createdAt: Date; updatedAt: Date; } export interface MockFolderEntity { _id: string; id?: string; name: string; userId: string; user?: MockUserEntity; } /** * Entity Factory - Creates consistent test entities with sensible defaults */ export declare class EntityFactory { private static idCounter; private static generateId; static createUser(overrides?: Partial<MockUserEntity>): MockUserEntity; static createBusinessUser(overrides?: Partial<MockUserEntity>): MockUserEntity; static createAdminUser(overrides?: Partial<MockUserEntity>): MockUserEntity; static createProfile(userId?: string, overrides?: Partial<MockProfileEntity>): MockProfileEntity; static createDoctorProfile(userId?: string, overrides?: Partial<MockProfileEntity>): MockProfileEntity; static createBusiness(ownerId?: string, overrides?: Partial<MockBusinessEntity>): MockBusinessEntity; static createPost(authorId?: string, overrides?: Partial<MockPostEntity>): MockPostEntity; static createComment(authorId?: string, overrides?: Partial<MockCommentEntity>): MockCommentEntity; static createFile(userId?: string, overrides?: Partial<MockFileEntity>): MockFileEntity; static createFolder(userId?: string, overrides?: Partial<MockFolderEntity>): MockFolderEntity; /** * Creates entities with relationships pre-populated */ static createUserWithRelations(overrides?: Partial<MockUserEntity>): MockUserEntity; /** * Creates arrays of entities for list/pagination scenarios */ static createUsers(count: number, overrides?: Partial<MockUserEntity>): MockUserEntity[]; static createFiles(count: number, userId?: string, overrides?: Partial<MockFileEntity>): MockFileEntity[]; /** * Creates entities for specific test scenarios */ static createInactiveUser(overrides?: Partial<MockUserEntity>): MockUserEntity; static createDeletedUser(overrides?: Partial<MockUserEntity>): MockUserEntity; static createLargeFile(userId?: string, overrides?: Partial<MockFileEntity>): MockFileEntity; /** * Reset the ID counter for consistent test runs */ static resetIdCounter(): void; } /** * Builder Pattern for Complex Entity Creation */ export declare class UserBuilder { private user; static create(): UserBuilder; withBasicInfo(name: string, email: string): UserBuilder; withStatus(status: 'active' | 'inactive' | 'deleted'): UserBuilder; withType(userType: 'business' | 'individual' | 'admin'): UserBuilder; withVerification(verified: boolean): UserBuilder; withPhone(phone: string): UserBuilder; withProfile(profile: MockProfileEntity): UserBuilder; withBusiness(business: MockBusinessEntity): UserBuilder; withPosts(posts: MockPostEntity[]): UserBuilder; build(): MockUserEntity; } /** * Scenario-based entity creation */ export declare class EntityScenarios { /** * Doctor with complete profile and business */ static doctorWithClinic(): MockUserEntity; /** * Patient with medical files */ static patientWithFiles(): MockUserEntity; /** * Admin user with system access */ static systemAdmin(): MockUserEntity; }