test.govlab/quality/core/emitters/eslint.emitter.test.ts
test.govlab/quality/core/emitters/eslint.emitter.test.ts is a file in Codebase Testing. 42 lines of code and 0 definitions.
import { describe, expect, it } from "vitest";
import { emitEslintConfig, eslintRulesForConcepts } from "@govlab/quality/core/emitters/eslint.emitter.ts";
const hasPrefix = function hasPrefix(config: Record<string, unknown>, prefix: string): boolean {
return Object.keys(config).some((key) => key.startsWith(prefix));
};
describe("emitEslintConfig activePlugins", () => {
it("emits only core + govlab when activePlugins is absent", () => {
const config = emitEslintConfig({});
expect(hasPrefix(config, "sonarjs/")).toBe(false);
expect(hasPrefix(config, "@typescript-eslint/")).toBe(false);
});
it("emits the same config for an empty activePlugins list as for an absent one", () => {
expect(JSON.stringify(emitEslintConfig({ activePlugins: [] }))).toBe(JSON.stringify(emitEslintConfig({})));
});
it("widens to a plugin's rules under its ruleId prefix when its namespace is active", () => {
const base = emitEslintConfig({});
const config = emitEslintConfig({ activePlugins: ["sonarjs"] });
const sonar = Object.keys(config).filter((key) => key.startsWith("sonarjs/"));
expect(sonar.length).toBeGreaterThan(0);
expect(Object.keys(config)).toHaveLength(Object.keys(base).length + sonar.length);
});
it("handles a scoped namespace plugin", () => {
expect(hasPrefix(emitEslintConfig({ activePlugins: ["@typescript-eslint"] }), "@typescript-eslint/")).toBe(
true,
);
});
it("does not emit a plugin's rules unless its namespace is listed", () => {
expect(hasPrefix(emitEslintConfig({ activePlugins: ["sonarjs"] }), "unicorn/")).toBe(false);
});
it("lets no-magic-numbers ignore -1, 0 and 1", () => {
expect(emitEslintConfig({})["no-magic-numbers"]).toStrictEqual(["error", { ignore: [-1, 0, 1] }]);
const typed = emitEslintConfig({ activePlugins: ["@typescript-eslint"] });
expect(typed["@typescript-eslint/no-magic-numbers"]).toStrictEqual(["error", { ignore: [-1, 0, 1] }]);
});
});
describe("eslintRulesForConcepts", () => {
it("returns the distinct ESLint rule keys that carry a wanted concept", () => {
const keys = eslintRulesForConcepts(["cyclomatic-complexity"]);
expect(keys).toContain("complexity");
expect(new Set(keys).size).toBe(keys.length);
});
});