@dbs-portal/tool-mock
Version:
API mocking toolkit using MSW for DBS Portal development workflows
93 lines • 2.59 kB
JavaScript
/**
* Testing helper utilities - thin wrappers around Jest and MSW
*/
import { http, HttpResponse } from 'msw';
import { getGlobalTestServer } from './setup';
/**
* Create a mock API handler - simple wrapper around MSW's http handlers
*/
export function createMockHandler(method, url, response, options = {}) {
const { status = 200, delay = 0, headers = {} } = options;
return http[method.toLowerCase()](url, async () => {
// Apply delay if specified
if (delay > 0) {
await new Promise(resolve => setTimeout(resolve, delay));
}
return HttpResponse.json(response, {
status,
headers: {
'Content-Type': 'application/json',
...headers,
},
});
});
}
/**
* Create a mock error handler
*/
export function createMockErrorHandler(method, url, error, options = {}) {
return createMockHandler(method, url, {
success: false,
error,
}, {
status: error.status,
delay: options.delay || 0,
});
}
/**
* Add handlers to the test server - wrapper around MSW's server.use()
*/
export function addTestHandlers(...handlers) {
const server = getGlobalTestServer();
if (server) {
server.use(...handlers);
}
else {
throw new Error('MSW test server not available. Make sure to call setupMSWJest() or setupMSWVitest() in your test setup.');
}
}
/**
* Reset test handlers - wrapper around MSW's server.resetHandlers()
*/
export function resetTestHandlers() {
const server = getGlobalTestServer();
if (server) {
server.resetHandlers();
}
}
/**
* Quick utilities for common test scenarios
*/
export const testUtils = {
/**
* Create a successful API response handler
*/
mockSuccess: (method, url, data) => {
return createMockHandler(method, url, {
success: true,
data,
});
},
/**
* Create an error API response handler
*/
mockError: (method, url, error) => {
return createMockErrorHandler(method, url, error);
},
/**
* Create a delayed response handler (for testing loading states)
*/
mockLoading: (method, url, data, delay = 1000) => {
return createMockHandler(method, url, {
success: true,
data,
}, { delay });
},
/**
* Create test data using a factory function
*/
createTestData: (factory, count = 1) => {
return Array.from({ length: count }, factory);
},
};
//# sourceMappingURL=helpers.js.map