/** * Shared HTTP Mock Framework * * Provides common HTTP mocking patterns and utilities to reduce * duplication across MSW-based mock implementations. */ import { setupServer } from 'msw/node'; import { MockHttpClient, MockHttpClientConfig, MockResponse } from '../httpMock/mockTypes.js'; export interface SharedMockConfig extends MockHttpClientConfig { moduleResolutionEnabled?: boolean; enableGraphQL?: boolean; logRequests?: boolean; customHandlers?: Map; presetResponses?: Map; defaultResponse?: any; defaultStatus?: number; responseDelay?: number; } export interface RequestHandler { method: string; url: string; handler: Function; } export interface GraphQLHandler { operationType: 'query' | 'mutation'; handler: Function; } /** * Base HTTP Mock class with shared functionality */ export declare abstract class BaseHttpMock implements MockHttpClient { protected server: ReturnType | null; protected defaultResponse: any; protected defaultStatus: number; protected responseDelay: number; protected config: SharedMockConfig; constructor(config?: SharedMockConfig); protected abstract setupServer(): void; protected abstract handleRequest(method: string, request: any): Promise; protected abstract handleGraphQLRequest(operationType: string, query: any, variables: any): Promise; protected isModuleRequest(url: string): boolean; protected handleModuleResolution(url: string): any; protected createResponse(data: any, status?: number): any; protected logRequest(method: string, url: string, data?: any): void; /** * Convert a result from handleRequest() to an axios-style MockResponse. * * handleRequest() is shared by two callers: * 1. MSW server handlers — MSW expects a Response/HttpResponse object. * 2. Direct HTTP method calls (get/post/…) — callers expect axios-style * { status, data, headers, … }. * * When a preset response or the default response path is taken, handleRequest * returns createResponse() which wraps the data in an MSW HttpResponse. That * object has .status on its prototype but no .data, so JSON.stringify gives {}. * This helper unwraps it back into a plain axios-compatible object so every * direct mock.get/post/… call returns usable data. */ protected toAxiosStyle(result: any, fallbackData?: any): Promise; protected executeWithErrorHandling(operation: () => Promise, context: string): Promise; get(url: string, config?: any): Promise; post(url: string, data?: any, config?: any): Promise; put(url: string, data?: any, config?: any): Promise; patch(url: string, data?: any, config?: any): Promise; delete(url: string, config?: any): Promise; request(config: any): Promise; cleanup(): void; start(): void; stop(): void; reset(): void; } /** * MSW-based Mock Implementation */ export declare class MSWMock extends BaseHttpMock { private customHandlers; protected setupServer(): void; protected handleRequest(method: string, request: any): Promise; protected handleGraphQLRequest(operationType: string, query: any, variables: any): Promise; addCustomHandler(method: string, url: string, handler: Function): void; removeCustomHandler(method: string, url: string): void; addGraphQLHandler(operationType: 'query' | 'mutation', handler: Function): void; removeGraphQLHandler(operationType: 'query' | 'mutation'): void; reset(): void; setDefaultResponse(response: any, status?: number): void; setResponseDelay(delay: number): void; enableModuleResolution(enabled: boolean): void; } export declare function createMSWMock(config?: SharedMockConfig): MSWMock; export declare function createQtestsMock(): MSWMock; export declare function createGraphQLMock(config?: SharedMockConfig): MSWMock; export declare const mockUtils: { withPresetResponses: (responses: Record) => MSWMock; forEndpoints: (endpoints: RequestHandler[]) => MSWMock; forGraphQL: (handlers: GraphQLHandler[]) => MSWMock; withDelay: (delay: number, config?: SharedMockConfig) => MSWMock; silent: (config?: SharedMockConfig) => MSWMock; }; //# sourceMappingURL=httpMockFramework.d.ts.map