import { describe, expect, it } from "vitest"; import { hasControlCommand } from "./command-detection.js"; import { listChatCommands } from "./commands-registry.js"; import { parseActivationCommand } from "./group-activation.js"; import { parseSendPolicyCommand } from "./send-policy.js"; describe("control command parsing", () => { it("requires slash for send policy", () => { expect(parseSendPolicyCommand("/send on")).toEqual({ hasCommand: true, mode: "allow", }); expect(parseSendPolicyCommand("/send: on")).toEqual({ hasCommand: true, mode: "allow", }); expect(parseSendPolicyCommand("/send")).toEqual({ hasCommand: true }); expect(parseSendPolicyCommand("/send:")).toEqual({ hasCommand: true }); expect(parseSendPolicyCommand("send on")).toEqual({ hasCommand: false }); expect(parseSendPolicyCommand("send")).toEqual({ hasCommand: false }); }); it("requires slash for activation", () => { expect(parseActivationCommand("/activation mention")).toEqual({ hasCommand: true, mode: "mention", }); expect(parseActivationCommand("/activation: mention")).toEqual({ hasCommand: true, mode: "mention", }); expect(parseActivationCommand("/activation:")).toEqual({ hasCommand: true, }); expect(parseActivationCommand("activation mention")).toEqual({ hasCommand: false, }); }); it("treats bare commands as non-control", () => { expect(hasControlCommand("send")).toBe(false); expect(hasControlCommand("help")).toBe(false); expect(hasControlCommand("/commands")).toBe(true); expect(hasControlCommand("/commands:")).toBe(true); expect(hasControlCommand("commands")).toBe(false); expect(hasControlCommand("/compact")).toBe(true); expect(hasControlCommand("/compact:")).toBe(true); expect(hasControlCommand("compact")).toBe(false); expect(hasControlCommand("status")).toBe(false); expect(hasControlCommand("usage")).toBe(false); for (const command of listChatCommands()) { for (const alias of command.textAliases) { expect(hasControlCommand(alias)).toBe(true); expect(hasControlCommand(`${alias}:`)).toBe(true); } } }); it("requires commands to be the full message", () => { expect(hasControlCommand("hello /status")).toBe(false); expect(hasControlCommand("/status please")).toBe(false); expect(hasControlCommand("prefix /send on")).toBe(false); expect(hasControlCommand("/send on")).toBe(true); }); });