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

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

import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { membersWithoutManifest, workspaceMembers } from "@govlab/docs/core/loaders/package.loader.ts";
import { mkdirSync, mkdtempSync, rmSync } from "node:fs";
import { join } from "node:path";
import { tmpdir } from "node:os";
import { writeVerbatim } from "@govlab/canonical-write";

const state = { root: "" };

const fixture = function fixture(dir: string, name: string, content: string): void {
    const target = join(state.root, ...dir.split("/"));
    mkdirSync(target, { recursive: true });
    writeVerbatim(join(target, name), content);
};

beforeEach(() => {
    state.root = mkdtempSync(join(tmpdir(), "govlab-workspaces-"));
    fixture("", "package.json", '{ "name": "root", "workspaces": ["apps/*", "tools/lint"] }');
    for (const member of ["apps/web", "apps/api", "tools/lint"]) {
        fixture(member, "package.json", '{ "name": "member" }');
    }
    fixture("apps/web", "_manifest.json", '{ "label": "member" }');
    fixture("tools/lint", "_manifest.json", '{ "label": "member" }');
    mkdirSync(join(state.root, "apps", "notes"), { recursive: true });
});

afterEach(() => {
    rmSync(state.root, { force: true, recursive: true });
});

describe("workspaceMembers and membersWithoutManifest", () => {
    it("expand the declared globs to folders with a package file, and name those without a manifest", () => {
        expect(workspaceMembers(state.root)).toStrictEqual(["apps/api", "apps/web", "tools/lint"]);
        expect(membersWithoutManifest(state.root)).toStrictEqual(["apps/api"]);
    });
});