test.govlab/quality/configuration/strings/tool.strings.test.ts

test.govlab/quality/configuration/strings/tool.strings.test.ts is a file in Codebase Testing. 79 lines of code and 0 definitions.

import {
    circularDependency,
    commandHint,
    credoIncomplete,
    dependencyEdge,
    dryRunFixes,
    duplicatedBlock,
    electedMissing,
    incompleteScan,
    installHint,
    lintrFailed,
    missingDependency,
    missingFlagValue,
    notInstalledOutput,
    outsideWorkspace,
    pmdRecoverable,
    prettierFailed,
    runSummary,
    scalastyleIncomplete,
    semgrepFailed,
    signalDeathMessage,
    spawnErrorMessage,
    toolErrorBecause,
    toolErrorMessage,
    unimportedExport,
    unknownConcern,
    unknownFlag,
    unknownReporter,
    unusedDependency,
    unusedItem,
} from "@govlab/quality/configuration/strings/tool.strings.ts";
import { describe, expect, it } from "vitest";

const STATUS = 2;

describe("install and command hints", () => {
    it("names the missing tool and how to provide it", () => {
        expect(installHint("ruff")).toContain("govlab install python");
        expect(installHint("unknown-tool")).toBe(notInstalledOutput("unknown-tool"));
        expect(commandHint("bandit", "python")).toContain("bandit.command");
        expect(commandHint("slither", "slither")).toContain("could not run");
        expect(electedMissing("pylint")).toContain("quality.owners");
    });
});

describe("tool failure messages", () => {
    it("carries the tool, the exit status and the detail", () => {
        expect(spawnErrorMessage("ruff", "ENOENT")).toContain("ENOENT");
        expect(toolErrorMessage("ruff", STATUS, "bad")).toContain("exit 2");
        expect(toolErrorBecause("phpmd", STATUS, "a bad ruleset", "bad")).toContain("a bad ruleset");
        expect(incompleteScan("kics", "a missing query library", "bad")).toContain("could not complete a scan");
        expect(credoIncomplete(STATUS, "bad")).toContain("mix credo");
        expect(scalastyleIncomplete("bad")).toContain("Processed");
        expect(semgrepFailed(STATUS, "bad")).toContain("ruleset");
        expect(lintrFailed(STATUS, "bad")).toContain("Rscript");
        expect(pmdRecoverable(STATUS)).toContain("recoverable");
        expect(signalDeathMessage("knip", "SIGKILL")).toContain("SIGKILL");
        expect(prettierFailed(STATUS)).toContain("prettier");
    });
});

describe("finding messages", () => {
    it("names the offending item", () => {
        expect(unusedItem("export", "x")).toBe("Unused export: x");
        expect(duplicatedBlock("a.ts", STATUS)).toContain("a.ts:2");
        expect(unusedDependency("dep", "package.json")).toContain("never used");
        expect(missingDependency("dep", "package.json")).toContain("not declared");
        expect(dependencyEdge("a", "b")).toBe("a → b");
        expect(circularDependency("a → b → a")).toContain("Circular");
        expect(unimportedExport("x")).toContain("never imported");
    });
});

describe("run and command-line messages", () => {
    it("reports counts and refuses malformed input", () => {
        expect(dryRunFixes(1, "  a.ts")).toContain("would be fixed");
        expect(outsideWorkspace("/x/a.ts", "/repo")).toContain("outside the workspace root");
        expect(runSummary(1, 0, 0, 0)).toBe("1 error(s), 0 advisory, 0 notice(s), 0 fixed");
        expect(missingFlagValue("--config")).toContain("needs a value");
        expect(unknownReporter("xml", "human, json")).toContain("xml");
        expect(unknownFlag("--fast")).toContain("--fast");
        expect(unknownConcern("lints", "lint")).toContain("lints");
    });
});