test.rules/rules/eslint/no-secret-value.eslint.rule.test.ts

test.rules/rules/eslint/no-secret-value.eslint.rule.test.ts is a file in Codebase Testing. 38 lines of code and 0 definitions.

import { describe, expect, it } from "vitest";
import { Linter } from "eslint";
import rule from "@ssot/govlab/rules/eslint/no-secret-value.eslint.rule.ts";

const linter = new Linter();
const config = [
    {
        files: ["**/*.ts"],
        languageOptions: { ecmaVersion: 2025 as const, sourceType: "module" as const },
        plugins: { t: { rules: { r: rule } } },
        rules: { "t/r": "error" as const },
    },
];

const FILE = "sample.ts";

const messagesFor = function messagesFor(code: string): readonly string[] {
    return linter.verify(code, config, FILE).map((message) => message.message);
};

const run = function run(character: string, length: number): string {
    return character.repeat(length);
};

describe("no-secret-value", () => {
    it("reports a secret-shaped literal by its kind and never repeats the value", () => {
        const token = `sk-${run("a", 24)}`;
        const [message] = messagesFor(`const key = ${JSON.stringify(token)};`);
        expect(message).toContain("token");
        expect(message).not.toContain(token);
        expect(messagesFor(`const host = "${["203", "0", "113", "7"].join(".")}";`)[0]).toContain("address");
    });

    it("reports a secret shape inside a template's static text", () => {
        const placeholder = ["$", "{", "host", "}"].join("");
        const url = ["const url = `https://", "user:", "pass@", placeholder, "/`;"].join("");
        expect(messagesFor(url)[0]).toContain("credential");
    });

    it("accepts prose, a plain URL and a bare scheme", () => {
        expect(messagesFor('const text = "a token and a key";')).toStrictEqual([]);
        expect(messagesFor('const url = "https://banes-lab.com/";')).toStrictEqual([]);
        expect(messagesFor('const scheme = "postgres://";')).toStrictEqual([]);
    });
});