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