Files
openclaw/src/agents/tools/sessions-send-tool.a2a.test.ts
mariosousa-finn ac13b09b74 fix(agents,gateway): keep subagent announces in the original thread (#63143)
Merged via squash.

Prepared head SHA: 9aa5303b48
Co-authored-by: mariosousa-finn <244526439+mariosousa-finn@users.noreply.github.com>
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com>
Reviewed-by: @jalehman
2026-04-10 15:46:01 -07:00

70 lines
2.5 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import type { CallGatewayOptions } from "../../gateway/call.js";
import { setActivePluginRegistry } from "../../plugins/runtime.js";
import { createSessionConversationTestRegistry } from "../../test-utils/session-conversation-registry.js";
import { runSessionsSendA2AFlow, __testing } from "./sessions-send-tool.a2a.js";
vi.mock("../run-wait.js", () => ({
waitForAgentRun: vi.fn().mockResolvedValue({ status: "ok" }),
readLatestAssistantReply: vi.fn().mockResolvedValue("Test announce reply"),
}));
vi.mock("./agent-step.js", () => ({
runAgentStep: vi.fn().mockResolvedValue("Test announce reply"),
}));
describe("runSessionsSendA2AFlow announce delivery", () => {
let gatewayCalls: CallGatewayOptions[];
beforeEach(() => {
setActivePluginRegistry(createSessionConversationTestRegistry());
gatewayCalls = [];
__testing.setDepsForTest({
callGateway: async <T = Record<string, unknown>>(opts: CallGatewayOptions) => {
gatewayCalls.push(opts);
return {} as T;
},
});
});
afterEach(() => {
__testing.setDepsForTest();
vi.restoreAllMocks();
});
it("passes threadId through to gateway send for Telegram forum topics", async () => {
await runSessionsSendA2AFlow({
targetSessionKey: "agent:main:telegram:group:-100123:topic:554",
displayKey: "agent:main:telegram:group:-100123:topic:554",
message: "Test message",
announceTimeoutMs: 10_000,
maxPingPongTurns: 0,
roundOneReply: "Worker completed successfully",
});
const sendCall = gatewayCalls.find((call) => call.method === "send");
expect(sendCall).toBeDefined();
const sendParams = sendCall?.params as Record<string, unknown>;
expect(sendParams.to).toBe("-100123");
expect(sendParams.channel).toBe("telegram");
expect(sendParams.threadId).toBe("554");
});
it("omits threadId for non-topic sessions", async () => {
await runSessionsSendA2AFlow({
targetSessionKey: "agent:main:discord:group:dev",
displayKey: "agent:main:discord:group:dev",
message: "Test message",
announceTimeoutMs: 10_000,
maxPingPongTurns: 0,
roundOneReply: "Worker completed successfully",
});
const sendCall = gatewayCalls.find((call) => call.method === "send");
expect(sendCall).toBeDefined();
const sendParams = sendCall?.params as Record<string, unknown>;
expect(sendParams.channel).toBe("discord");
expect(sendParams.threadId).toBeUndefined();
});
});