test.govlab/quality/core/converters/emitter.xml.converter.test.ts

test.govlab/quality/core/converters/emitter.xml.converter.test.ts is a file in Codebase Testing. 52 lines of code and 0 definitions.

import { describe, expect, it } from "vitest";
import type { EmitDescriptor } from "@govlab/quality/types/emitter.types.ts";
import { xmlRulesetTree } from "@govlab/quality/core/converters/emitter.xml.converter.ts";

const MAX_LINES = 300;

const DESCRIPTOR: EmitDescriptor = {
    configTarget: "ruleset.xml",
    format: "xml",
    idiom: "rules-container",
    selectContainer: null,
    settingsContainer: null,
    tool: "pmd",
    xmlDescription: "Generated ruleset",
    xmlPropsWrap: "properties",
    xmlRefPrefix: "rulesets/",
    xmlRuleTag: "rule",
    xmlWrap: [{ attrs: { name: "govlab" }, tag: "ruleset" }],
};

describe("xmlRulesetTree", () => {
    it("wraps a description and one rule element per concept, with a valued knob as a wrapped property", () => {
        const tree = xmlRulesetTree(DESCRIPTOR, [
            { canonicalId: "file-length", knob: "maximum", ruleIds: ["ExcessiveLength"], value: MAX_LINES },
            { canonicalId: "no-unused", knob: null, ruleIds: ["UnusedVariable"] },
        ]);
        expect(tree.tag).toBe("ruleset");
        expect(tree.attrs).toStrictEqual({ name: "govlab" });
        expect(tree.children?.[0]).toStrictEqual({ tag: "description", text: "Generated ruleset" });
        expect(tree.children?.[1]).toStrictEqual({
            attrs: { name: "rulesets/ExcessiveLength" },
            children: [
                { children: [{ attrs: { name: "maximum", value: "300" }, tag: "property" }], tag: "properties" },
            ],
            tag: "rule",
        });
        expect(tree.children?.[2]?.attrs).toStrictEqual({ name: "rulesets/UnusedVariable" });
    });

    it("falls back to a bare ruleset wrapper when the descriptor names none", () => {
        const tree = xmlRulesetTree(
            {
                configTarget: "r.xml",
                format: "xml",
                idiom: "rules-container",
                selectContainer: null,
                settingsContainer: null,
                tool: "pmd",
            },
            [],
        );
        expect(tree.tag).toBe("ruleset");
        expect(tree.children).toStrictEqual([]);
        expect(tree.attrs).toBeUndefined();
    });
});