react-antd-admin-panel
Version:
Modern TypeScript-first React admin panel builder with Ant Design 6
98 lines • 2.6 kB
JavaScript
/**
* createMockHttp - Mock HTTP request utility for testing
*
* Provides a fluent API for mocking Get/Post requests with configurable responses.
*
* @example
* const mockHttp = createMockHttp()
* .onGet('/api/users', { data: mockUsers })
* .onPost('/api/users', { data: newUser })
* .onGet('/api/error', { error: new Error('Failed') });
*
* // Use in tests
* await mockHttp.get('/api/users'); // Returns { data: mockUsers }
*/
/**
* MockHttp - Chainable mock HTTP handler
*/
export class MockHttp {
_getHandlers = new Map();
_postHandlers = new Map();
_defaultDelay = 0;
constructor(config) {
this._defaultDelay = config?.defaultDelay || 0;
}
/**
* Register a mock GET response
*/
onGet(url, response) {
this._getHandlers.set(url, response);
return this;
}
/**
* Register a mock POST response
*/
onPost(url, response) {
this._postHandlers.set(url, response);
return this;
}
/**
* Clear all registered handlers
*/
clear() {
this._getHandlers.clear();
this._postHandlers.clear();
return this;
}
/**
* Get the mock GET handler function
*/
get = async (url, params) => {
return this._handleRequest(this._getHandlers, url, params);
};
/**
* Get the mock POST handler function
*/
post = async (url, data) => {
return this._handleRequest(this._postHandlers, url, data);
};
/**
* Internal request handler
*/
async _handleRequest(handlers, url, _data) {
const response = handlers.get(url);
if (!response) {
throw new Error(`No mock handler registered for ${url}`);
}
const delay = response.delay ?? this._defaultDelay;
if (delay > 0) {
await new Promise(resolve => setTimeout(resolve, delay));
}
if (response.error) {
throw response.error;
}
return {
data: response.data,
status: response.status ?? 200,
};
}
/**
* Get all registered GET handlers (for inspection in tests)
*/
getRegisteredGetHandlers() {
return Array.from(this._getHandlers.keys());
}
/**
* Get all registered POST handlers (for inspection in tests)
*/
getRegisteredPostHandlers() {
return Array.from(this._postHandlers.keys());
}
}
/**
* Create a new MockHttp instance
*/
export function createMockHttp(config) {
return new MockHttp(config);
}
//# sourceMappingURL=createMockHttp.js.map