@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
TypeScript
/**
* 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;
}