import { afterEach, describe, expect, it, vi } from "vitest"; vi.mock("@/server/lib/runtime-env", () => ({ getRequiredEnvValue: vi.fn(async () => "encoded-credentials"), })); import { dataforseoPost } from "@/server/lib/dataforseo/core"; afterEach(() => { vi.unstubAllGlobals(); }); describe("DataForSEO transport", () => { it("retries a transient 5xx on idempotent reads and returns the parsed envelope", async () => { const fetchMock = vi .fn() .mockResolvedValueOnce(new Response("upstream failure", { status: 503 })) .mockResolvedValueOnce(Response.json({ status_code: 20000, tasks: [] })); vi.stubGlobal("fetch", fetchMock); await expect( dataforseoPost("/v3/backlinks/summary/live", []), ).resolves.toEqual({ status_code: 20000, tasks: [] }); expect(fetchMock).toHaveBeenCalledTimes(2); const [url, init] = fetchMock.mock.calls[0]; expect(url).toBe("https://api.dataforseo.com/v3/backlinks/summary/live"); expect(new Headers(init?.headers).get("Authorization")).toBe( "Basic encoded-credentials", ); }); });