mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 22:24:31 +00:00
test(cli): add message registrar wiring coverage
This commit is contained in:
123
src/cli/program/register.message.test.ts
Normal file
123
src/cli/program/register.message.test.ts
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
import { Command } from "commander";
|
||||||
|
import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
|
import type { ProgramContext } from "./context.js";
|
||||||
|
|
||||||
|
const createMessageCliHelpersMock = vi.fn(() => ({ helper: true }));
|
||||||
|
const registerMessageSendCommandMock = vi.fn();
|
||||||
|
const registerMessageBroadcastCommandMock = vi.fn();
|
||||||
|
const registerMessagePollCommandMock = vi.fn();
|
||||||
|
const registerMessageReactionsCommandsMock = vi.fn();
|
||||||
|
const registerMessageReadEditDeleteCommandsMock = vi.fn();
|
||||||
|
const registerMessagePinCommandsMock = vi.fn();
|
||||||
|
const registerMessagePermissionsCommandMock = vi.fn();
|
||||||
|
const registerMessageSearchCommandMock = vi.fn();
|
||||||
|
const registerMessageThreadCommandsMock = vi.fn();
|
||||||
|
const registerMessageEmojiCommandsMock = vi.fn();
|
||||||
|
const registerMessageStickerCommandsMock = vi.fn();
|
||||||
|
const registerMessageDiscordAdminCommandsMock = vi.fn();
|
||||||
|
|
||||||
|
vi.mock("./message/helpers.js", () => ({
|
||||||
|
createMessageCliHelpers: createMessageCliHelpersMock,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("./message/register.send.js", () => ({
|
||||||
|
registerMessageSendCommand: registerMessageSendCommandMock,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("./message/register.broadcast.js", () => ({
|
||||||
|
registerMessageBroadcastCommand: registerMessageBroadcastCommandMock,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("./message/register.poll.js", () => ({
|
||||||
|
registerMessagePollCommand: registerMessagePollCommandMock,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("./message/register.reactions.js", () => ({
|
||||||
|
registerMessageReactionsCommands: registerMessageReactionsCommandsMock,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("./message/register.read-edit-delete.js", () => ({
|
||||||
|
registerMessageReadEditDeleteCommands: registerMessageReadEditDeleteCommandsMock,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("./message/register.pins.js", () => ({
|
||||||
|
registerMessagePinCommands: registerMessagePinCommandsMock,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("./message/register.permissions-search.js", () => ({
|
||||||
|
registerMessagePermissionsCommand: registerMessagePermissionsCommandMock,
|
||||||
|
registerMessageSearchCommand: registerMessageSearchCommandMock,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("./message/register.thread.js", () => ({
|
||||||
|
registerMessageThreadCommands: registerMessageThreadCommandsMock,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("./message/register.emoji-sticker.js", () => ({
|
||||||
|
registerMessageEmojiCommands: registerMessageEmojiCommandsMock,
|
||||||
|
registerMessageStickerCommands: registerMessageStickerCommandsMock,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("./message/register.discord-admin.js", () => ({
|
||||||
|
registerMessageDiscordAdminCommands: registerMessageDiscordAdminCommandsMock,
|
||||||
|
}));
|
||||||
|
|
||||||
|
let registerMessageCommands: typeof import("./register.message.js").registerMessageCommands;
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
({ registerMessageCommands } = await import("./register.message.js"));
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("registerMessageCommands", () => {
|
||||||
|
const ctx: ProgramContext = {
|
||||||
|
programVersion: "9.9.9-test",
|
||||||
|
channelOptions: ["telegram", "discord"],
|
||||||
|
messageChannelOptions: "telegram|discord",
|
||||||
|
agentChannelOptions: "last|telegram|discord",
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
vi.clearAllMocks();
|
||||||
|
createMessageCliHelpersMock.mockReturnValue({ helper: true });
|
||||||
|
});
|
||||||
|
|
||||||
|
it("registers message command and wires all message sub-registrars with shared helpers", () => {
|
||||||
|
const program = new Command();
|
||||||
|
registerMessageCommands(program, ctx);
|
||||||
|
|
||||||
|
const message = program.commands.find((command) => command.name() === "message");
|
||||||
|
expect(message).toBeDefined();
|
||||||
|
expect(createMessageCliHelpersMock).toHaveBeenCalledWith(message, "telegram|discord");
|
||||||
|
|
||||||
|
const expectedRegistrars = [
|
||||||
|
registerMessageSendCommandMock,
|
||||||
|
registerMessageBroadcastCommandMock,
|
||||||
|
registerMessagePollCommandMock,
|
||||||
|
registerMessageReactionsCommandsMock,
|
||||||
|
registerMessageReadEditDeleteCommandsMock,
|
||||||
|
registerMessagePinCommandsMock,
|
||||||
|
registerMessagePermissionsCommandMock,
|
||||||
|
registerMessageSearchCommandMock,
|
||||||
|
registerMessageThreadCommandsMock,
|
||||||
|
registerMessageEmojiCommandsMock,
|
||||||
|
registerMessageStickerCommandsMock,
|
||||||
|
registerMessageDiscordAdminCommandsMock,
|
||||||
|
];
|
||||||
|
for (const registrar of expectedRegistrars) {
|
||||||
|
expect(registrar).toHaveBeenCalledWith(message, { helper: true });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it("shows command help when root message command is invoked", async () => {
|
||||||
|
const program = new Command().exitOverride();
|
||||||
|
registerMessageCommands(program, ctx);
|
||||||
|
const message = program.commands.find((command) => command.name() === "message");
|
||||||
|
expect(message).toBeDefined();
|
||||||
|
const helpSpy = vi.spyOn(message as Command, "help").mockImplementation(() => {
|
||||||
|
throw new Error("help-called");
|
||||||
|
});
|
||||||
|
|
||||||
|
await expect(program.parseAsync(["message"], { from: "user" })).rejects.toThrow("help-called");
|
||||||
|
expect(helpSpy).toHaveBeenCalledWith({ error: true });
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user