test.govlab/quality/core/converters/edit.converter.test.ts
test.govlab/quality/core/converters/edit.converter.test.ts is a file in Codebase Testing. 55 lines of code and 0 definitions.
import { describe, expect, it } from "vitest";
import type { CuratedResult } from "@govlab/quality/types/edit.types.ts";
import type { Linter } from "eslint";
import { applyCuratedSuggestions } from "@govlab/quality/core/converters/edit.converter.ts";
const RULE = "@typescript-eslint/explicit-member-accessibility";
const SOURCE = "class C {\n foo() {}\n}\n";
const FOO_OFFSET = 14;
const SEVERITY_ERROR = 2;
const COLUMN = 5;
const LINE = 2;
const accessibilityMessage = (at: number): Linter.LintMessage => {
const range: [number, number] = [at, at];
return {
column: COLUMN,
line: LINE,
message: "Missing accessibility modifier",
messageId: "missingAccessibility",
ruleId: RULE,
severity: SEVERITY_ERROR,
suggestions: [
{ desc: "Add 'public' accessibility modifier", fix: { range, text: "public " } },
{ desc: "Add 'private' accessibility modifier", fix: { range, text: "private " } },
],
};
};
const resultOf = (messages: Linter.LintMessage[]): CuratedResult => ({ errorCount: messages.length, messages });
describe("applyCuratedSuggestions", () => {
it("inserts the public modifier, prunes the consumed message, and decrements errorCount", () => {
const result = resultOf([accessibilityMessage(FOO_OFFSET)]);
const applied = applyCuratedSuggestions(result, SOURCE);
expect(applied?.output).toBe("class C {\n public foo() {}\n}\n");
expect(applied?.appliedCount).toBe(1);
expect(result.messages).toHaveLength(0);
expect(result.errorCount).toBe(0);
});
it("selects the public suggestion, never private or protected", () => {
const result = resultOf([accessibilityMessage(FOO_OFFSET)]);
const applied = applyCuratedSuggestions(result, SOURCE);
expect(applied?.output.includes("public foo")).toBe(true);
expect(applied?.output.includes("private")).toBe(false);
});
it("returns null and leaves messages untouched when no curated rule matches", () => {
const other: Linter.LintMessage = {
column: COLUMN,
line: LINE,
message: "unexpected console statement",
messageId: "x",
ruleId: "no-console",
severity: SEVERITY_ERROR,
};
const result = resultOf([other]);
expect(applyCuratedSuggestions(result, SOURCE)).toBeNull();
expect(result.messages).toHaveLength(1);
});
});