test.scripts/core/adapters/viewport.adapter.test.ts

test.scripts/core/adapters/viewport.adapter.test.ts is a file in Codebase Testing. 52 lines of code and 0 definitions.

import { describe, expect, it } from "vitest";
import { mkdirSync, mkdtempSync } from "node:fs";
import { builtRoutes } from "@project/scripts/core/loaders/viewport.loader.ts";
import { get } from "node:https";
import { join } from "node:path";
import { serveBuiltSite } from "@project/scripts/core/adapters/viewport.adapter.ts";
import { tmpdir } from "node:os";
import { writeVerbatim } from "@govlab/canonical-write";

const builtSite = function builtSite(): string {
    const root = mkdtempSync(join(tmpdir(), "viewport-"));
    mkdirSync(join(root, "pag"));
    writeVerbatim(join(root, "index.html"), "home");
    writeVerbatim(join(root, "404.html"), "missing");
    writeVerbatim(join(root, "pag", "keywords.html"), "keywords");
    return root;
};

const statusOf = async function statusOf(url: string): Promise<{ status: number; body: string }> {
    return new Promise((settle, fail) => {
        get(url, { rejectUnauthorized: false }, (response) => {
            let body = "";
            response.setEncoding("utf8");
            response.on("data", (chunk: string) => {
                body += chunk;
            });
            response.on("end", () => {
                settle({ body, status: response.statusCode ?? 0 });
            });
        }).on("error", fail);
    });
};

describe("builtRoutes", () => {
    it("lists every built page as a route and leaves the missing page out", () => {
        expect(builtRoutes(builtSite())).toStrictEqual(["/", "/pag/keywords"]);
        const absent = join(tmpdir(), "viewport-absent");
        expect(builtRoutes(absent)).toStrictEqual([]);
    });
});

describe("serveBuiltSite", () => {
    it("serves a route from its page file and answers 404 outside the build", async () => {
        const site = await serveBuiltSite(builtSite());
        try {
            await expect(statusOf(`${site.origin}/`)).resolves.toStrictEqual({ body: "home", status: 200 });
            await expect(statusOf(`${site.origin}/pag/keywords`)).resolves.toStrictEqual({
                body: "keywords",
                status: 200,
            });
            await expect(statusOf(`${site.origin}/absent`)).resolves.toStrictEqual({ body: "", status: 404 });
        } finally {
            site.close();
        }
    });
});