Files
openclaw/src/agents/tools/agent-step.test.ts

50 lines
1.6 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
const callGatewayMock = vi.fn();
vi.mock("../../gateway/call.js", () => ({
callGateway: (opts: unknown) => callGatewayMock(opts),
}));
import { readLatestAssistantReply } from "./agent-step.js";
describe("readLatestAssistantReply", () => {
beforeEach(() => {
callGatewayMock.mockClear();
});
it("returns the most recent assistant message when compaction markers trail history", async () => {
callGatewayMock.mockResolvedValue({
messages: [
{
role: "assistant",
content: [{ type: "text", text: "All checks passed and changes were pushed." }],
},
{ role: "toolResult", content: [{ type: "text", text: "tool output" }] },
{ role: "system", content: [{ type: "text", text: "Compaction" }] },
],
});
const result = await readLatestAssistantReply({ sessionKey: "agent:main:child" });
expect(result).toBe("All checks passed and changes were pushed.");
expect(callGatewayMock).toHaveBeenCalledWith({
method: "chat.history",
params: { sessionKey: "agent:main:child", limit: 50 },
});
});
it("falls back to older assistant text when latest assistant has no text", async () => {
callGatewayMock.mockResolvedValue({
messages: [
{ role: "assistant", content: [{ type: "text", text: "older output" }] },
{ role: "assistant", content: [] },
{ role: "system", content: [{ type: "text", text: "Compaction" }] },
],
});
const result = await readLatestAssistantReply({ sessionKey: "agent:main:child" });
expect(result).toBe("older output");
});
});