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

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

import { describe, expect, it } from "vitest";
import { dirname, join } from "node:path";
import { findingsPathOf, loadModuleFindings } from "@govlab/patterns/core/loaders/finding.loader.ts";
import { mkdirSync, mkdtempSync } from "node:fs";
import { tmpdir } from "node:os";
import { writeVerbatim } from "@govlab/canonical-write";

describe("the module findings loader", () => {
    it("reads the findings a module wrote, coercing each field", () => {
        const moduleDir = mkdtempSync(join(tmpdir(), "pl-findings-"));
        const path = findingsPathOf(moduleDir);
        mkdirSync(dirname(path), { recursive: true });
        writeVerbatim(path, JSON.stringify({ findings: [{ kind: "dead-code", line: "x", name: "orphan" }, "noise"] }));
        const loaded = loadModuleFindings(moduleDir, "mod");
        expect(loaded?.module).toBe("mod");
        expect(loaded?.findings).toStrictEqual([
            {
                confidence: "",
                detail: "",
                file: "",
                kind: "dead-code",
                line: 0,
                members: [],
                name: "orphan",
                relevance: 0,
                remedy: "",
                severity: "",
            },
        ]);
    });

    it("answers null for a module with no findings file or an unreadable one", () => {
        const moduleDir = mkdtempSync(join(tmpdir(), "pl-findings-"));
        expect(loadModuleFindings(moduleDir, "mod")).toBeNull();
        const path = findingsPathOf(moduleDir);
        mkdirSync(dirname(path), { recursive: true });
        writeVerbatim(path, "{not json");
        expect(loadModuleFindings(moduleDir, "mod")).toBeNull();
    });
});