

















@@ -0,0 +1,63 @@
1+import { Command } from "commander";
2+import { beforeEach, describe, expect, it, vi } from "vitest";
3+import { registerWebhooksCli } from "./webhooks-cli.js";
4+5+const mocks = await vi.hoisted(async () => {
6+const { createCliRuntimeMock } = await import("./test-runtime-mock.js");
7+return {
8+ ...createCliRuntimeMock(vi),
9+runGmailSetup: vi.fn(),
10+runGmailService: vi.fn(),
11+};
12+});
13+14+vi.mock("../hooks/gmail-ops.js", () => ({
15+runGmailSetup: mocks.runGmailSetup,
16+runGmailService: mocks.runGmailService,
17+}));
18+19+vi.mock("../runtime.js", () => ({
20+defaultRuntime: mocks.defaultRuntime,
21+}));
22+23+function createProgram() {
24+const program = new Command();
25+program.exitOverride();
26+registerWebhooksCli(program);
27+return program;
28+}
29+30+function runtimeErrors(): string[] {
31+return mocks.defaultRuntime.error.mock.calls.map(([message]) => String(message));
32+}
33+34+describe("webhooks cli", () => {
35+beforeEach(() => {
36+mocks.runtimeErrors.length = 0;
37+mocks.defaultRuntime.error.mockClear();
38+mocks.defaultRuntime.exit.mockClear();
39+mocks.runGmailSetup.mockClear();
40+mocks.runGmailService.mockClear();
41+});
42+43+it.each([
44+["setup", "--port", "8080x"],
45+["setup", "--max-bytes", "10mb"],
46+["setup", "--renew-minutes", "30m"],
47+["run", "--port", "8080x"],
48+["run", "--max-bytes", "10mb"],
49+["run", "--renew-minutes", "30m"],
50+])("rejects partial gmail %s %s", async (command, flag, value) => {
51+const program = createProgram();
52+const args =
53+command === "setup"
54+ ? ["webhooks", "gmail", command, "--account", "default", flag, value]
55+ : ["webhooks", "gmail", command, flag, value];
56+57+await expect(program.parseAsync(args, { from: "user" })).rejects.toThrow("__exit__:1");
58+59+expect(runtimeErrors().join("\n")).toContain(`${flag} must be a positive integer.`);
60+expect(mocks.runGmailSetup).not.toHaveBeenCalled();
61+expect(mocks.runGmailService).not.toHaveBeenCalled();
62+});
63+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。