test.govlab/quality/core/classifiers/invocation.classifier.test.ts

test.govlab/quality/core/classifiers/invocation.classifier.test.ts is a file in Codebase Testing. 38 lines of code and 0 definitions.

import type { AdvisoryContext, ToolSpawn } from "@govlab/quality/types/tool.types.ts";
import { describe, expect, it } from "vitest";
import {
    exitOf,
    failedOnStatus,
    failedWhenEmpty,
    passOf,
    terminalOf,
} from "@govlab/quality/core/classifiers/invocation.classifier.ts";

const advisory: AdvisoryContext = { ecosystem: "go", installHint: "Install it.", root: "/repo", tool: "tool" };

const spawnOf = function spawnOf(status: number | null, stdout = "", error?: Error): ToolSpawn {
    const spawned: ToolSpawn = { output: [], pid: 1, signal: null, status, stderr: "", stdout };
    return error === undefined ? spawned : { ...spawned, error };
};

describe("invocation classifier", () => {
    it("reads the exit of a spawn, defaulting a missing status", () => {
        expect(exitOf(spawnOf(null)).status).toBe(-1);
    });

    it("turns a missing binary and a signal death into terminal results", () => {
        const missing = Object.assign(new Error("spawn tool ENOENT"), { code: "ENOENT" });
        expect(terminalOf(advisory, spawnOf(null, "", missing))?.findings[0]?.ruleId).toBe("tool/not-installed");
        expect(terminalOf(advisory, spawnOf(null))?.findings[0]?.ruleId).toBe("tool/tool-error");
        expect(terminalOf(advisory, spawnOf(0))).toBeNull();
    });

    it("fails an empty pass only on a status outside the accepted set", () => {
        expect(failedWhenEmpty(new Set([0]))(spawnOf(2), [])).toBe(true);
        expect(failedOnStatus(new Set([0]))(spawnOf(0))).toBe(false);
    });

    it("classifies a spawn into a reported or terminated pass", () => {
        const spec = {
            failed: () => false,
            failure: () => ({ findings: [], fixedCount: 0, output: "" }),
            parse: () => [],
        };
        expect(passOf(advisory, spawnOf(0), spec).terminal).toBe(false);
        expect(passOf(advisory, spawnOf(0), { ...spec, failed: () => true }).terminal).toBe(true);
    });
});