Files
openclaw/src/cli/webhooks-cli.test.ts
2026-05-27 07:35:02 -04:00

64 lines
1.9 KiB
TypeScript

import { Command } from "commander";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { registerWebhooksCli } from "./webhooks-cli.js";
const mocks = await vi.hoisted(async () => {
const { createCliRuntimeMock } = await import("./test-runtime-mock.js");
return {
...createCliRuntimeMock(vi),
runGmailSetup: vi.fn(),
runGmailService: vi.fn(),
};
});
vi.mock("../hooks/gmail-ops.js", () => ({
runGmailSetup: mocks.runGmailSetup,
runGmailService: mocks.runGmailService,
}));
vi.mock("../runtime.js", () => ({
defaultRuntime: mocks.defaultRuntime,
}));
function createProgram() {
const program = new Command();
program.exitOverride();
registerWebhooksCli(program);
return program;
}
function runtimeErrors(): string[] {
return mocks.defaultRuntime.error.mock.calls.map(([message]) => String(message));
}
describe("webhooks cli", () => {
beforeEach(() => {
mocks.runtimeErrors.length = 0;
mocks.defaultRuntime.error.mockClear();
mocks.defaultRuntime.exit.mockClear();
mocks.runGmailSetup.mockClear();
mocks.runGmailService.mockClear();
});
it.each([
["setup", "--port", "8080x"],
["setup", "--max-bytes", "10mb"],
["setup", "--renew-minutes", "30m"],
["run", "--port", "8080x"],
["run", "--max-bytes", "10mb"],
["run", "--renew-minutes", "30m"],
])("rejects partial gmail %s %s", async (command, flag, value) => {
const program = createProgram();
const args =
command === "setup"
? ["webhooks", "gmail", command, "--account", "default", flag, value]
: ["webhooks", "gmail", command, flag, value];
await expect(program.parseAsync(args, { from: "user" })).rejects.toThrow("__exit__:1");
expect(runtimeErrors().join("\n")).toContain(`${flag} must be a positive integer.`);
expect(mocks.runGmailSetup).not.toHaveBeenCalled();
expect(mocks.runGmailService).not.toHaveBeenCalled();
});
});