test.govlab/patterns/core/loaders/package.loader.test.ts

test.govlab/patterns/core/loaders/package.loader.test.ts is a file in Codebase Testing. 47 lines of code and 0 definitions.

import { basename, join } from "node:path";
import {
    buildPackageMap,
    discoverModules,
    sourceFiles,
    testFilesOf,
} from "@govlab/patterns/core/loaders/package.loader.ts";
import { describe, expect, it } from "vitest";
import { mkdirSync, mkdtempSync } from "node:fs";
import { tmpdir } from "node:os";
import { writeVerbatim } from "@govlab/canonical-write";

const MANIFEST = { label: "m", maturity: "stable", visibility: {} };

const seed = function seed(): string {
    const root = mkdtempSync(join(tmpdir(), "pl-packages-"));
    for (const name of ["alpha", "beta"]) {
        mkdirSync(join(root, name, "core"), { recursive: true });
        writeVerbatim(join(root, name, "_manifest.json"), JSON.stringify(MANIFEST));
        writeVerbatim(join(root, name, "package.json"), JSON.stringify({ name: `@scope/${name}` }));
        writeVerbatim(join(root, name, "core", "run.ts"), "export const run = 1;\n");
        writeVerbatim(join(root, name, "core", "run.test.ts"), "run;\n");
    }
    mkdirSync(join(root, "skip"));
    writeVerbatim(join(root, "skip", "_manifest.json"), JSON.stringify(MANIFEST));
    return root;
};

const pruned = function pruned(folder: string): boolean {
    return basename(folder) === "skip";
};

describe("the package loader", () => {
    const root = seed();

    it("discovers every shaped manifest outside a pruned folder", () => {
        expect(discoverModules(root, pruned).map((dir) => dir.slice(root.length + 1))).toStrictEqual(["alpha", "beta"]);
    });

    it("maps each package name to its folder", () => {
        const map = buildPackageMap(discoverModules(root, pruned));
        expect([...map.keys()]).toStrictEqual(["@scope/alpha", "@scope/beta"]);
    });

    it("splits a module's code into sources and tests", () => {
        const alpha = join(root, "alpha");
        expect(sourceFiles(alpha, pruned).map((file) => file.slice(alpha.length + 1))).toStrictEqual([
            join("core", "run.ts"),
        ]);
        expect(testFilesOf(alpha, pruned).map((file) => file.slice(alpha.length + 1))).toStrictEqual([
            join("core", "run.test.ts"),
        ]);
    });
});