import { describe, expect, it, vi } from "vitest"; const { ProxyAgent, undiciFetch, proxyAgentSpy, getLastAgent } = vi.hoisted(() => { const undiciFetch = vi.fn(); const proxyAgentSpy = vi.fn(); class ProxyAgent { static lastCreated: ProxyAgent | undefined; proxyUrl: string; constructor(proxyUrl: string) { this.proxyUrl = proxyUrl; ProxyAgent.lastCreated = this; proxyAgentSpy(proxyUrl); } } return { ProxyAgent, undiciFetch, proxyAgentSpy, getLastAgent: () => ProxyAgent.lastCreated, }; }); vi.mock("undici", () => ({ ProxyAgent, fetch: undiciFetch, })); import { makeProxyFetch } from "./proxy.js"; describe("makeProxyFetch", () => { it("uses undici fetch with ProxyAgent dispatcher", async () => { const proxyUrl = "http://proxy.test:8080"; undiciFetch.mockResolvedValue({ ok: true }); const proxyFetch = makeProxyFetch(proxyUrl); await proxyFetch("https://api.telegram.org/bot123/getMe"); expect(proxyAgentSpy).toHaveBeenCalledWith(proxyUrl); expect(undiciFetch).toHaveBeenCalledWith( "https://api.telegram.org/bot123/getMe", expect.objectContaining({ dispatcher: getLastAgent() }), ); }); });