test.govlab/quality/core/adapters/remote.adapter.test.ts

test.govlab/quality/core/adapters/remote.adapter.test.ts is a file in Codebase Testing. 26 lines of code and 0 definitions.

import { afterEach, expect, test, vi } from "vitest";
import { firstRemoteText, remoteText } from "@govlab/quality/core/adapters/remote.adapter.ts";

const HTTP_OK = 200;
const HTTP_MISSING = 404;

const respond = function respond(pages: Readonly<Record<string, string>>): void {
    vi.stubGlobal("fetch", async (url: string) => {
        await Promise.resolve();
        const body = pages[url];
        return new Response(body ?? "", { status: body === undefined ? HTTP_MISSING : HTTP_OK });
    });
};

afterEach(() => {
    vi.unstubAllGlobals();
});

test("remoteText answers the body of a found page and null for a missing one", async () => {
    respond({ "https://a.test/x": "body" });
    expect(await remoteText("https://a.test/x")).toBe("body");
    expect(await remoteText("https://a.test/y")).toBeNull();
});

test("firstRemoteText answers the first page that exists, in order, and null when none does", async () => {
    respond({ "https://a.test/second": "two", "https://a.test/third": "three" });
    expect(await firstRemoteText(["https://a.test/first", "https://a.test/second", "https://a.test/third"])).toBe(
        "two",
    );
    expect(await firstRemoteText(["https://a.test/none"])).toBeNull();
});