test.govlab/quality/core/converters/exclusions.converter.test.ts
test.govlab/quality/core/converters/exclusions.converter.test.ts is a file in Codebase Testing. 47 lines of code and 0 definitions.
import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { mkdirSync, mkdtempSync, rmSync } from "node:fs";
import { exclusionsFrom } from "@govlab/quality/core/converters/exclusions.converter.ts";
import { getFileInfo } from "prettier";
import os from "node:os";
import path from "node:path";
import { writeVerbatim } from "@govlab/canonical-write";
const REPORTS = "fixture/reports/**";
const ANY_DEPTH = "**/staging/**";
const SEPARATOR = "/";
let root = "";
let base = "";
const ignoredUnder = async function ignoredUnder(patterns: readonly string[], file: string): Promise<boolean> {
const ignorePath = path.join(base, "ignore");
writeVerbatim(ignorePath, patterns.join("\n"));
return (await getFileInfo(path.join(root, file), { ignorePath })).ignored;
};
beforeEach(() => {
root = mkdtempSync(path.join(os.tmpdir(), "govlab-exclusions-"));
base = path.join(root, "cache", "tool");
mkdirSync(base, { recursive: true });
});
afterEach(() => {
rmSync(root, { force: true, recursive: true });
});
describe("exclusionsFrom", () => {
it("anchors a root-relative pattern at the root and keeps a pattern that matches at any depth", () => {
const up = path.relative(base, root).split(path.sep).join(SEPARATOR) + SEPARATOR;
expect(exclusionsFrom([REPORTS, "/dist", "!/keep/a", ANY_DEPTH, "*.log", "logs/"], base, root)).toStrictEqual([
up + REPORTS,
`${up}dist`,
`!${up}keep/a`,
up + ANY_DEPTH,
"*.log",
"logs/",
]);
});
it("leaves the patterns unchanged when the ignore file sits at the root", () => {
expect(exclusionsFrom([REPORTS], root, root)).toStrictEqual([REPORTS]);
});
it("makes prettier ignore a root-relative path from an ignore file outside the root, which the raw pattern misses", async () => {
const report = "fixture/reports/a.json";
expect(await ignoredUnder([REPORTS], report)).toBe(false);
expect(await ignoredUnder(exclusionsFrom([REPORTS], base, root), report)).toBe(true);
expect(await ignoredUnder(exclusionsFrom([REPORTS], base, root), "src/a.json")).toBe(false);
});
});