test.scripts/core/validators/dependency.validator.test.ts

test.scripts/core/validators/dependency.validator.test.ts is a file in Codebase Testing. 44 lines of code and 0 definitions.

import {
    EVERY_SCRIPT_DECIDED,
    HOIST_REMEDY,
    ONE_HOIST_HELD,
    REVIEW_REMEDY,
    hoistBreachHeading,
    listingFailed,
    missingAllowScripts,
    undecidedHeading,
} from "@project/scripts/configuration/strings/dependency.strings.ts";
import { describe, expect, it } from "vitest";
import { hoistVerdict, installScriptVerdict } from "@project/scripts/core/validators/dependency.validator.ts";
import { installScriptListing } from "@project/scripts/core/adapters/dependency.adapter.ts";

describe("installScriptVerdict", () => {
    it("holds when npm lists no pending script, and names each pending one by its changed keys", () => {
        expect(installScriptVerdict('{"allowScripts":[]}')).toStrictEqual({ held: true, text: EVERY_SCRIPT_DECIDED });
        const pending = JSON.stringify({ allowScripts: [{ changes: [{ key: "esbuild@0.25.0" }] }, { name: "x" }] });
        const verdict = installScriptVerdict(pending);
        expect(verdict.held).toBe(false);
        expect(verdict.text).toContain(undecidedHeading(2));
        expect(verdict.text).toContain("  esbuild@0.25.0");
        expect(verdict.text).toContain('  {"name":"x"}');
        expect(verdict.text).toContain(REVIEW_REMEDY);
    });

    it("refuses an answer with no allowScripts list", () => {
        expect(() => installScriptVerdict("{}")).toThrow(missingAllowScripts("{}"));
        expect(listingFailed(1, "boom")).toContain("exited 1: boom");
    });
});

describe("hoistVerdict", () => {
    it("holds with no breach, and lists each breach under a counted heading with its remedy", () => {
        expect(hoistVerdict([])).toStrictEqual({ held: true, text: ONE_HOIST_HELD });
        const verdict = hoistVerdict(["member/node_modules"]);
        expect(verdict.held).toBe(false);
        expect(verdict.text).toContain(hoistBreachHeading(1));
        expect(verdict.text).toContain("  member/node_modules");
        expect(verdict.text).toContain(HOIST_REMEDY);
    });
});

describe("installScriptListing", () => {
    it("answers with the json npm prints for the workspace", () => {
        expect(() => installScriptVerdict(installScriptListing())).not.toThrow();
    }, 60_000);
});