hts/packages/isdk/tests/utils/mock-server.ts

56 lines
1.3 KiB
TypeScript

import { HttpResponse, http, passthrough } from 'msw';
import { setupServer } from 'msw/node';
export const DEFAULT_TEST_URL = 'http://localhost:3030/';
export function createMockServer(
testConfigs: Array<{
url: string;
chunks: any[];
formatChunk: (chunk: any) => string;
suffix?: string;
}>,
passthroughUrls?: string[],
) {
return setupServer(
...testConfigs.map(({ url, chunks, formatChunk, suffix }) =>
http.all(url, createHandler(chunks, formatChunk, suffix)),
),
...(passthroughUrls ?? []).map(url => http.all(url, () => passthrough())),
);
}
function createHandler(
chunks: any[],
formatChunk: (chunk: any) => string,
suffix?: string,
) {
return () => {
const encoder = new TextEncoder();
const stream = new ReadableStream({
async start(controller) {
try {
for (const chunk of chunks) {
controller.enqueue(encoder.encode(formatChunk(chunk)));
}
if (suffix != null) {
controller.enqueue(encoder.encode(suffix));
}
} finally {
controller.close();
}
},
});
return new HttpResponse(stream, {
status: 200,
headers: {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
Connection: 'keep-alive',
},
});
};
}