

























@@ -0,0 +1,78 @@
1+import { beforeEach, describe, expect, it, vi } from "vitest";
2+import type { OpenClawConfig } from "../config/types.openclaw.js";
3+import type { OutputRuntimeEnv } from "../runtime.js";
4+5+const { buildProviderStatusIndexMock, requireValidConfigMock } = vi.hoisted(() => ({
6+buildProviderStatusIndexMock: vi.fn(),
7+requireValidConfigMock: vi.fn(),
8+}));
9+10+vi.mock("./agents.command-shared.js", () => ({
11+requireValidConfig: requireValidConfigMock,
12+}));
13+14+vi.mock("./agents.providers.js", () => ({
15+buildProviderStatusIndex: buildProviderStatusIndexMock,
16+listProvidersForAgent: () => ["Telegram default: configured"],
17+summarizeBindings: () => ["Telegram default"],
18+}));
19+20+const { agentsListCommand } = await import("./agents.commands.list.js");
21+22+function createRuntime(): OutputRuntimeEnv & { json: unknown[] } {
23+const json: unknown[] = [];
24+return {
25+ json,
26+log: vi.fn(),
27+error: vi.fn(),
28+exit: vi.fn(),
29+writeStdout: vi.fn(),
30+writeJson: vi.fn((value: unknown) => {
31+json.push(value);
32+}),
33+};
34+}
35+36+function createConfig(): OpenClawConfig {
37+return {
38+agents: {
39+list: [{ id: "main", default: true }],
40+},
41+bindings: [{ agentId: "main", match: { channel: "telegram" } }],
42+};
43+}
44+45+describe("agentsListCommand", () => {
46+beforeEach(() => {
47+vi.clearAllMocks();
48+requireValidConfigMock.mockResolvedValue(createConfig());
49+buildProviderStatusIndexMock.mockResolvedValue(new Map());
50+});
51+52+it("keeps plain JSON output on the config-only path", async () => {
53+const runtime = createRuntime();
54+55+await agentsListCommand({ json: true }, runtime);
56+57+expect(buildProviderStatusIndexMock).not.toHaveBeenCalled();
58+const summary = (runtime.json[0] as Array<Record<string, unknown>>)[0];
59+expect(summary).toMatchObject({ id: "main" });
60+expect(summary).not.toHaveProperty("routes");
61+expect(summary).not.toHaveProperty("providers");
62+});
63+64+it("keeps provider details available for JSON callers that request bindings", async () => {
65+const runtime = createRuntime();
66+67+await agentsListCommand({ json: true, bindings: true }, runtime);
68+69+expect(buildProviderStatusIndexMock).toHaveBeenCalledOnce();
70+expect(runtime.json[0]).toEqual([
71+expect.objectContaining({
72+id: "main",
73+routes: ["Telegram default"],
74+providers: ["Telegram default: configured"],
75+}),
76+]);
77+});
78+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。