import { describe, expect, it } from "vitest"; import { eslint } from "./lintProbe.testkit"; // `local/sortable-a11y` (eslint.config.js): every sortable list speaks the user's language to a // screen reader, through ui/sortableA11y. Three of four lists had shipped dnd-kit's English // defaults. A rule that matches nothing looks exactly like a clean codebase, so this asserts it fires. const RULE = "local/sortable-a11y"; async function hits(source: string, filePath = "src/components/__probe.tsx"): Promise { const [result] = await eslint.lintText(source, { filePath }); return (result?.messages ?? []).filter((m) => m.ruleId === RULE).length; } describe("a sortable list", () => { it("is refused without translated screen-reader text", async () => { expect(await hits(`export const A = () => {}} />;\n`)).toBe(1); expect( await hits(`import { useSortable } from "@dnd-kit/sortable";\nexport { useSortable };\n`), ).toBe(1); }); it("is fine through ui/sortableA11y, which alone may wrap dnd-kit's hook", async () => { expect(await hits(`export const B = ({ a }) => ;\n`)).toBe(0); expect( await hits( `import { useSortable } from "@dnd-kit/sortable";\nexport { useSortable };\n`, "src/components/ui/sortableA11y.ts", ), ).toBe(0); }); });