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

> 52 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-scripts-core-adapters-viewport-adapter-test-ts
Source text: https://banes-lab.com/source/testing/test.scripts/core/adapters/viewport.adapter.test.ts.txt

Listed in [test.scripts/core/adapters](https://banes-lab.com/api/source/testing/test.scripts/core/adapters.md).

## Contained in

- [test.scripts/core/adapters](https://banes-lab.com/anatomy/testing/folder-testing-test-scripts-core-adapters.md)

## Source

```typescript
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();
        }
    });
});
```
