Files
openclaw/src/agents/tools/sessions-yield-tool.test.ts
Jacob Riff 3fa91cd69d feat: add sessions_yield tool for cooperative turn-ending (#36537)
Merged via squash.

Prepared head SHA: 75d9204c86
Co-authored-by: jriff <50276+jriff@users.noreply.github.com>
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com>
Reviewed-by: @jalehman
2026-03-12 08:46:47 -07:00

46 lines
1.8 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { createSessionsYieldTool } from "./sessions-yield-tool.js";
describe("sessions_yield tool", () => {
it("returns error when no sessionId is provided", async () => {
const onYield = vi.fn();
const tool = createSessionsYieldTool({ onYield });
const result = await tool.execute("call-1", {});
expect(result.details).toMatchObject({
status: "error",
error: "No session context",
});
expect(onYield).not.toHaveBeenCalled();
});
it("invokes onYield callback with default message", async () => {
const onYield = vi.fn();
const tool = createSessionsYieldTool({ sessionId: "test-session", onYield });
const result = await tool.execute("call-1", {});
expect(result.details).toMatchObject({ status: "yielded", message: "Turn yielded." });
expect(onYield).toHaveBeenCalledOnce();
expect(onYield).toHaveBeenCalledWith("Turn yielded.");
});
it("passes the custom message through the yield callback", async () => {
const onYield = vi.fn();
const tool = createSessionsYieldTool({ sessionId: "test-session", onYield });
const result = await tool.execute("call-1", { message: "Waiting for fact-checker" });
expect(result.details).toMatchObject({
status: "yielded",
message: "Waiting for fact-checker",
});
expect(onYield).toHaveBeenCalledOnce();
expect(onYield).toHaveBeenCalledWith("Waiting for fact-checker");
});
it("returns error without onYield callback", async () => {
const tool = createSessionsYieldTool({ sessionId: "test-session" });
const result = await tool.execute("call-1", {});
expect(result.details).toMatchObject({
status: "error",
error: "Yield not supported in this context",
});
});
});