test(cli): add message registrar wiring coverage

This commit is contained in:
Peter Steinberger
2026-02-21 20:14:08 +00:00
parent fecc29d2c8
commit b5a66e7b7e

View 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 });
});
});