refactor: dedupe provider usage fetch logic and tests
This commit is contained in:
27
src/test-utils/provider-usage-fetch.ts
Normal file
27
src/test-utils/provider-usage-fetch.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { vi } from "vitest";
|
||||
import { withFetchPreconnect } from "./fetch-mock.js";
|
||||
|
||||
type UsageFetchInput = string | Request | URL;
|
||||
type UsageFetchHandler = (url: string, init?: RequestInit) => Promise<Response> | Response;
|
||||
type UsageFetchMock = ReturnType<
|
||||
typeof vi.fn<(input: UsageFetchInput, init?: RequestInit) => Promise<Response>>
|
||||
>;
|
||||
|
||||
export function makeResponse(status: number, body: unknown): Response {
|
||||
const payload = typeof body === "string" ? body : JSON.stringify(body);
|
||||
const headers = typeof body === "string" ? undefined : { "Content-Type": "application/json" };
|
||||
return new Response(payload, { status, headers });
|
||||
}
|
||||
|
||||
export function toRequestUrl(input: UsageFetchInput): string {
|
||||
return typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
|
||||
}
|
||||
|
||||
export function createProviderUsageFetch(
|
||||
handler: UsageFetchHandler,
|
||||
): typeof fetch & UsageFetchMock {
|
||||
const mockFetch = vi.fn(async (input: UsageFetchInput, init?: RequestInit) =>
|
||||
handler(toRequestUrl(input), init),
|
||||
);
|
||||
return withFetchPreconnect(mockFetch) as typeof fetch & UsageFetchMock;
|
||||
}
|
||||
Reference in New Issue
Block a user