






















1+import { Command } from "commander";
2+import { beforeEach, describe, expect, it, vi } from "vitest";
3+import * as browserCliSharedModule from "./browser-cli-shared.js";
4+import {
5+createBrowserProgram,
6+getBrowserCliRuntime,
7+getBrowserCliRuntimeCapture,
8+} from "./browser-cli.test-support.js";
9+import * as cliCoreApiModule from "./core-api.js";
10+11+const mocks = vi.hoisted(() => ({
12+callBrowserRequest: vi.fn<
13+(
14+opts?: unknown,
15+req?: unknown,
16+extra?: { timeoutMs?: number },
17+) => Promise<Record<string, unknown>>
18+>(async () => ({ response: { body: "ok" } })),
19+}));
20+21+vi.spyOn(browserCliSharedModule, "callBrowserRequest").mockImplementation(mocks.callBrowserRequest);
22+const browserCliRuntime = getBrowserCliRuntime();
23+vi.spyOn(cliCoreApiModule.defaultRuntime, "log").mockImplementation(browserCliRuntime.log);
24+vi.spyOn(cliCoreApiModule.defaultRuntime, "writeJson").mockImplementation(
25+browserCliRuntime.writeJson,
26+);
27+vi.spyOn(cliCoreApiModule.defaultRuntime, "error").mockImplementation(browserCliRuntime.error);
28+vi.spyOn(cliCoreApiModule.defaultRuntime, "exit").mockImplementation(browserCliRuntime.exit);
29+30+const { registerBrowserActionObserveCommands } = await import("./browser-cli-actions-observe.js");
31+32+function createActionObserveProgram(): Command {
33+const { program, browser, parentOpts } = createBrowserProgram();
34+registerBrowserActionObserveCommands(browser, parentOpts);
35+return program;
36+}
37+38+describe("browser action observe commands", () => {
39+beforeEach(() => {
40+mocks.callBrowserRequest.mockClear();
41+getBrowserCliRuntimeCapture().resetRuntimeCapture();
42+});
43+44+it("rejects non-decimal responsebody numeric flags before dispatch", async () => {
45+const program = createActionObserveProgram();
46+47+await expect(
48+program.parseAsync(["browser", "responsebody", "**/api", "--timeout-ms", "1e3"], {
49+from: "user",
50+}),
51+).rejects.toThrow("--timeout-ms must be a positive integer.");
52+await expect(
53+program.parseAsync(["browser", "responsebody", "**/api", "--max-chars", "-1"], {
54+from: "user",
55+}),
56+).rejects.toThrow("--max-chars must be a positive integer.");
57+expect(mocks.callBrowserRequest).not.toHaveBeenCalled();
58+});
59+60+it("passes responsebody limits through to the request and outer timeout", async () => {
61+const program = createActionObserveProgram();
62+63+await program.parseAsync(
64+["browser", "responsebody", "**/api", "--timeout-ms", "30000", "--max-chars", "100"],
65+{ from: "user" },
66+);
67+68+const request = mocks.callBrowserRequest.mock.calls.at(-1)?.[1] as
69+| { body?: { timeoutMs?: number; maxChars?: number } }
70+| undefined;
71+const options = mocks.callBrowserRequest.mock.calls.at(-1)?.[2] as
72+| { timeoutMs?: number }
73+| undefined;
74+expect(request?.body?.timeoutMs).toBe(30000);
75+expect(request?.body?.maxChars).toBe(100);
76+expect(options?.timeoutMs).toBe(30000);
77+});
78+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。