@kenniy/godeye-data-contracts
Version:
Enterprise-grade base repository architecture for GOD-EYE microservices with zero overhead and maximum code reuse
202 lines (201 loc) • 6.38 kB
TypeScript
/**
* DTO Test Factory
* Provides factory methods for creating test DTOs with various configurations
*/
import { BaseQueryDto, FindOneDto, FindManyDto, UserQueryDto, FileQueryDto } from '../../core/dto';
import { ICriteria } from '../../types/repository.types';
/**
* DTO Factory - Creates DTO instances with common test configurations
*/
export declare class DtoFactory {
/**
* Creates basic query DTO with default pagination
*/
static createBaseQuery(overrides?: Partial<BaseQueryDto>): BaseQueryDto;
/**
* Creates query DTO with search configuration
*/
static createSearchQuery(searchTerm: string, overrides?: Partial<BaseQueryDto>): BaseQueryDto;
/**
* Creates query DTO with sorting
*/
static createSortedQuery(sortConfig?: string, overrides?: Partial<BaseQueryDto>): BaseQueryDto;
/**
* Creates query DTO with relations/includes
*/
static createIncludeQuery(include?: string, overrides?: Partial<BaseQueryDto>): BaseQueryDto;
/**
* Creates FindOne DTO
*/
static createFindOneDto(overrides?: Partial<FindOneDto>): FindOneDto;
/**
* Creates FindMany DTO with pagination
*/
static createFindManyDto(overrides?: Partial<FindManyDto>): FindManyDto;
/**
* Creates User-specific query DTO
*/
static createUserQuery(overrides?: Partial<UserQueryDto>): UserQueryDto;
/**
* Creates business user query DTO
*/
static createBusinessUserQuery(overrides?: Partial<UserQueryDto>): UserQueryDto;
/**
* Creates admin user query DTO
*/
static createAdminUserQuery(overrides?: Partial<UserQueryDto>): UserQueryDto;
/**
* Creates user query with date filtering
*/
static createUserQueryWithDateRange(createdAfter?: string, createdBefore?: string, overrides?: Partial<UserQueryDto>): UserQueryDto;
/**
* Creates File query DTO
*/
static createFileQuery(overrides?: Partial<FileQueryDto>): FileQueryDto;
/**
* Creates file query for specific user
*/
static createUserFileQuery(userId: string, overrides?: Partial<FileQueryDto>): FileQueryDto;
/**
* Creates file query with size filtering
*/
static createFileSizeQuery(minSize?: number, maxSize?: number, overrides?: Partial<FileQueryDto>): FileQueryDto;
/**
* Creates file query for specific MIME type
*/
static createFileTypeQuery(mimeType: string, fileType?: string, overrides?: Partial<FileQueryDto>): FileQueryDto;
}
/**
* DTO Builder - Fluent interface for complex DTO construction
*/
export declare class DtoBuilder<T extends BaseQueryDto> {
protected dto: T;
constructor(dtoInstance: T);
static forBaseQuery(): DtoBuilder<BaseQueryDto>;
static forUserQuery(): DtoBuilder<UserQueryDto>;
static forFileQuery(): DtoBuilder<FileQueryDto>;
static forFindOne(): DtoBuilder<FindOneDto>;
static forFindMany(): DtoBuilder<FindManyDto>;
/**
* Configure pagination
*/
withPagination(page: number, limit: number): DtoBuilder<T>;
/**
* Configure search
*/
withSearch(searchTerm: string): DtoBuilder<T>;
/**
* Configure sorting
*/
withSort(sort: string): DtoBuilder<T>;
/**
* Configure includes/relations
*/
withInclude(include: string): DtoBuilder<T>;
/**
* Configure status filter
*/
withStatus(status: string): DtoBuilder<T>;
/**
* Configure user-specific properties (if T extends UserQueryDto)
*/
withUserType(userType: 'business' | 'individual' | 'admin'): DtoBuilder<T>;
withEmail(email: string): DtoBuilder<T>;
withVerified(verified: boolean): DtoBuilder<T>;
withDateRange(createdAfter?: string, createdBefore?: string): DtoBuilder<T>;
/**
* Configure file-specific properties (if T extends FileQueryDto)
*/
withFileType(fileType: 'image' | 'document' | 'video' | 'audio'): DtoBuilder<T>;
withMimeType(mimeType: string): DtoBuilder<T>;
withUserId(userId: string): DtoBuilder<T>;
withSizeRange(minSize?: number, maxSize?: number): DtoBuilder<T>;
/**
* Build the final DTO
*/
build(): T;
/**
* Build and convert to ICriteria
*/
buildCriteria(id?: string): ICriteria<any>;
}
/**
* Common DTO Test Scenarios
*/
export declare class DtoScenarios {
/**
* Basic pagination scenario
*/
static basicPagination(): BaseQueryDto;
/**
* Search with pagination scenario
*/
static searchWithPagination(searchTerm?: string): BaseQueryDto;
/**
* Complex user query scenario
*/
static complexUserQuery(): UserQueryDto;
/**
* File query for images scenario
*/
static imageFilesQuery(): FileQueryDto;
/**
* Admin user query scenario
*/
static adminUsersQuery(): UserQueryDto;
/**
* Minimal query scenario
*/
static minimalQuery(): BaseQueryDto;
/**
* Large pagination scenario
*/
static largePagination(): BaseQueryDto;
/**
* Multi-sort scenario
*/
static multiSort(): BaseQueryDto;
/**
* Full includes scenario
*/
static fullIncludes(): UserQueryDto;
/**
* Date range filtering scenario
*/
static dateRangeQuery(): UserQueryDto;
}
/**
* ICriteria Mock Factory - Creates mock ICriteria objects for testing
*/
export declare class CriteriaFactory {
/**
* Creates basic ICriteria with where conditions
*/
static createBasic(where?: any, overrides?: Partial<ICriteria<any>>): ICriteria<any>;
/**
* Creates ICriteria with relations
*/
static withRelations(relations: string[], where?: any): ICriteria<any>;
/**
* Creates ICriteria with sorting
*/
static withSort(sort: {
[key: string]: 'ASC' | 'DESC';
}, where?: any): ICriteria<any>;
/**
* Creates ICriteria with field selection
*/
static withSelect(select: string[], where?: any): ICriteria<any>;
/**
* Creates ICriteria with search
*/
static withSearch(term: string, where?: any): ICriteria<any>;
/**
* Creates ICriteria with pagination
*/
static withPagination(page: number, limit: number, where?: any): ICriteria<any>;
/**
* Creates complete ICriteria with all options
*/
static createComplete(): ICriteria<any>;
}