import { describe, expect, it } from "vitest"; import { matchesAnyCommandPath, matchesCommandPath, matchesCommandPathRule, } from "./command-path-matches.js"; describe("command-path-matches", () => { it("matches prefix and exact command paths", () => { expect(matchesCommandPath(["status"], ["status"])).toBe(true); expect(matchesCommandPath(["status", "watch"], ["status"])).toBe(true); expect(matchesCommandPath(["status", "watch"], ["status"], { exact: true })).toBe(false); expect(matchesCommandPath(["config", "get"], ["config", "get"], { exact: true })).toBe(true); }); it("matches declarative rules", () => { expect(matchesCommandPathRule(["plugins", "update"], ["plugins"])).toBe(true); expect( matchesCommandPathRule(["plugins", "update"], { pattern: ["plugins", "update"], exact: true, }), ).toBe(true); expect( matchesCommandPathRule(["plugins", "update", "now"], { pattern: ["plugins", "update"], exact: true, }), ).toBe(false); }); it("treats structured rules without exact as prefix matches", () => { expect( matchesCommandPathRule(["plugins", "update", "now"], { pattern: ["plugins", "update"], }), ).toBe(true); }); it("matches any command path from a rule set", () => { expect( matchesAnyCommandPath( ["config", "schema"], [["backup"], { pattern: ["config", "schema"], exact: true }], ), ).toBe(true); expect( matchesAnyCommandPath( ["message", "send"], [["status"], { pattern: ["config", "schema"], exact: true }], ), ).toBe(false); }); });