50 lines
1.6 KiB
TypeScript
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");
|
|
});
|
|
});
|