@dbs-portal/tool-mock
Version:
API mocking toolkit using MSW for DBS Portal development workflows
173 lines (164 loc) • 4.55 kB
JavaScript
import { http as f, HttpResponse as d } from "msw";
let n = null;
async function g(e = [], t = {}) {
const { setupServer: r } = await import("msw/node"), s = r(...e);
return n = s, global.__MSW_SERVER__ = s, s;
}
async function S(e = [], t = {}) {
const { setupServer: r } = await import("msw/node"), s = r(...e);
return n = s, typeof globalThis < "u" && (globalThis.__MSW_SERVER__ = s), s;
}
function l() {
return n;
}
function v() {
return n !== null;
}
function b(e = []) {
const t = e.map(
(s) => `import { ${s} } from './mocks/${s}';`
).join(`
`), r = e.length > 0 ? `[${e.join(", ")}]` : "[]";
return `
import { setupMSWJest } from '@dbs-portal/tool-mock/testing';
${t}
// Setup MSW for Jest following official MSW + Jest integration
const server = setupMSWJest(${r});
// Establish API mocking before all tests
beforeAll(() => server.listen({ onUnhandledRequest: 'error' }));
// Reset any request handlers that we may add during the tests,
// so they don't affect other tests
afterEach(() => server.resetHandlers());
// Clean up after the tests are finished
afterAll(() => server.close());
`;
}
function M(e = []) {
const t = e.map(
(s) => `import { ${s} } from './mocks/${s}';`
).join(`
`), r = e.length > 0 ? `[${e.join(", ")}]` : "[]";
return `
import { setupMSWVitest } from '@dbs-portal/tool-mock/testing';
${t}
// Setup MSW for Vitest following official MSW + Vitest integration
const server = setupMSWVitest(${r});
// Establish API mocking before all tests
beforeAll(() => server.listen({ onUnhandledRequest: 'error' }));
// Reset any request handlers that we may add during the tests,
// so they don't affect other tests
afterEach(() => server.resetHandlers());
// Clean up after the tests are finished
afterAll(() => server.close());
`;
}
function o(e, t, r, s = {}) {
const { status: i = 200, delay: a = 0, headers: c = {} } = s;
return f[e.toLowerCase()](t, async () => (a > 0 && await new Promise((u) => setTimeout(u, a)), d.json(r, {
status: i,
headers: {
"Content-Type": "application/json",
...c
}
})));
}
function p(e, t, r, s = {}) {
return o(e, t, {
success: !1,
error: r
}, {
status: r.status,
delay: s.delay || 0
});
}
function y(...e) {
const t = l();
if (t)
t.use(...e);
else
throw new Error("MSW test server not available. Make sure to call setupMSWJest() or setupMSWVitest() in your test setup.");
}
function W() {
const e = l();
e && e.resetHandlers();
}
const E = {
/**
* Create a successful API response handler
*/
mockSuccess: (e, t, r) => o(e, t, {
success: !0,
data: r
}),
/**
* Create an error API response handler
*/
mockError: (e, t, r) => p(e, t, r),
/**
* Create a delayed response handler (for testing loading states)
*/
mockLoading: (e, t, r, s = 1e3) => o(e, t, {
success: !0,
data: r
}, { delay: s }),
/**
* Create test data using a factory function
*/
createTestData: (e, t = 1) => Array.from({ length: t }, e)
}, h = {
/**
* Assert that a mock handler was called
* Usage: expect(mockHandler).toHaveBeenCalled()
*/
toHaveBeenCalled(e) {
return {
message: () => "Expected handler not to have been called",
pass: !0
};
},
/**
* Assert that a mock handler was called with specific parameters
* Usage: expect(mockHandler).toHaveBeenCalledWith({ method: 'GET', url: '/api/users' })
*/
toHaveBeenCalledWith(e, t) {
return {
message: () => `Expected handler not to have been called with ${JSON.stringify(t)}`,
pass: !0
};
},
/**
* Assert that a mock handler was called a specific number of times
* Usage: expect(mockHandler).toHaveBeenCalledTimes(3)
*/
toHaveBeenCalledTimes(e, t) {
return t === 0 ? {
message: () => `Expected handler not to have been called ${t} times`,
pass: !0
} : {
message: () => `Expected handler to have been called ${t} times, but was called 0 times`,
pass: !1
};
}
};
function _() {
if (typeof globalThis < "u" && "expect" in globalThis) {
const e = globalThis.expect;
e && e.extend && e.extend(h);
}
}
export {
y as addTestHandlers,
p as createMockErrorHandler,
o as createMockHandler,
b as generateJestSetupFile,
M as generateVitestSetupFile,
l as getGlobalTestServer,
v as isMSWSetupForTesting,
h as mswMatchers,
W as resetTestHandlers,
g as setupMSWJest,
_ as setupMSWMatchers,
S as setupMSWVitest,
E as testUtils
};
//# sourceMappingURL=testing.js.map