import { type IServiceContainer } from '../container/ServiceContainer';
import { type IKernel } from '../http/Kernel';
import { type IRouter } from '../routes/Router';
export type TestHeaders = Record<string, string>;
export type TestRequestInput = {
    method: string;
    path: string;
    headers?: TestHeaders;
    body?: unknown;
    validated?: {
        body?: unknown;
        query?: unknown;
        params?: unknown;
        headers?: unknown;
    };
};
export type TestResponse = {
    status: number;
    headers: Record<string, string | string[]>;
    bodyText: string;
    json: unknown;
    cookies: Record<string, string>;
};
export type TestEnvironmentOptions = {
    router?: IRouter;
    container?: IServiceContainer;
    registerRoutes?: (router: IRouter) => void;
};
export interface ITestEnvironment {
    router: IRouter;
    container: IServiceContainer;
    kernel: IKernel;
    request(input: TestRequestInput): Promise<TestResponse>;
    swapSingleton<T>(key: string, instance: T): () => void;
    swapFactory<T>(key: string, factory: () => T): () => void;
}
export declare const TestEnvironment: Readonly<{
    create(options?: TestEnvironmentOptions): ITestEnvironment;
}>;
//# sourceMappingURL=TestEnvironment.d.ts.map