88 lines
3.1 KiB
TypeScript
88 lines
3.1 KiB
TypeScript
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("/status")).toBe(true);
|
|
expect(hasControlCommand("/status:")).toBe(true);
|
|
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);
|
|
}
|
|
}
|
|
expect(hasControlCommand("/compact")).toBe(true);
|
|
expect(hasControlCommand("/compact:")).toBe(true);
|
|
expect(hasControlCommand("compact")).toBe(false);
|
|
});
|
|
|
|
it("respects disabled config/debug commands", () => {
|
|
const cfg = { commands: { config: false, debug: false } };
|
|
expect(hasControlCommand("/config show", cfg)).toBe(false);
|
|
expect(hasControlCommand("/debug show", cfg)).toBe(false);
|
|
});
|
|
|
|
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);
|
|
});
|
|
|
|
it("ignores telegram commands addressed to other bots", () => {
|
|
expect(
|
|
hasControlCommand("/help@otherbot", undefined, {
|
|
botUsername: "clawdbot",
|
|
}),
|
|
).toBe(false);
|
|
expect(
|
|
hasControlCommand("/help@clawdbot", undefined, {
|
|
botUsername: "clawdbot",
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
});
|