refactor: share tasks handler test helpers

This commit is contained in:
Vincent Koc
2026-06-01 04:49:59 +02:00
parent ee6373aa5f
commit dc1cfcc28d

View File

@@ -60,6 +60,32 @@ function createContext() {
} as never;
}
async function runTaskHandler(
method: "tasks.list" | "tasks.get" | "tasks.cancel",
params: Record<string, unknown>,
) {
const { calls, respond } = captureRespond();
await tasksHandlers[method]({
req: { type: "req", id: `req-${method}`, method },
params,
respond,
context: createContext(),
client: null,
isWebchatConnect: () => false,
});
return {
calls,
payload: calls[0]?.[1] as TaskResponsePayload | undefined,
};
}
async function getTaskPayload(taskId: string) {
const { calls, payload } = await runTaskHandler("tasks.get", { taskId });
expect(calls[0]?.[0]).toBe(true);
expect(payload?.task?.id).toBe(taskId);
return { calls, payload };
}
describe("tasks gateway handlers", () => {
it("lists task summaries with SDK-facing statuses and filters", async () => {
const running = createTaskRecord({
@@ -86,22 +112,13 @@ describe("tasks gateway handlers", () => {
deliveryStatus: "pending",
});
const { calls, respond } = captureRespond();
await tasksHandlers["tasks.list"]({
req: { type: "req", id: "req-1", method: "tasks.list" },
params: {
status: "running",
agentId: "main",
sessionKey: "agent:main:main",
},
respond,
context: createContext(),
client: null,
isWebchatConnect: () => false,
const { calls, payload } = await runTaskHandler("tasks.list", {
status: "running",
agentId: "main",
sessionKey: "agent:main:main",
});
expect(calls[0]?.[0]).toBe(true);
const payload = calls[0]?.[1] as TaskResponsePayload | undefined;
expect(payload?.tasks).toHaveLength(1);
const listedTask = payload?.tasks?.[0];
expect(listedTask?.id).toBe(running.taskId);
@@ -128,19 +145,8 @@ describe("tasks gateway handlers", () => {
deliveryStatus: "not_applicable",
});
const { calls, respond } = captureRespond();
await tasksHandlers["tasks.get"]({
req: { type: "req", id: "req-2", method: "tasks.get" },
params: { taskId: task.taskId },
respond,
context: createContext(),
client: null,
isWebchatConnect: () => false,
});
const { payload } = await getTaskPayload(task.taskId);
expect(calls[0]?.[0]).toBe(true);
const payload = calls[0]?.[1] as TaskResponsePayload | undefined;
expect(payload?.task?.id).toBe(task.taskId);
expect(payload?.task?.status).toBe("completed");
expect(payload?.task?.title).toBe("Done task");
});
@@ -172,19 +178,8 @@ describe("tasks gateway handlers", () => {
error: "Tool failed\nOpenClaw runtime context (internal): Keep internal details private.",
});
const { calls, respond } = captureRespond();
await tasksHandlers["tasks.get"]({
req: { type: "req", id: "req-sanitized", method: "tasks.get" },
params: { taskId: task.taskId },
respond,
context: createContext(),
client: null,
isWebchatConnect: () => false,
});
const { calls, payload } = await getTaskPayload(task.taskId);
expect(calls[0]?.[0]).toBe(true);
const payload = calls[0]?.[1] as TaskResponsePayload | undefined;
expect(payload?.task?.id).toBe(task.taskId);
expect(payload?.task?.title).toBe("Compile artifact");
expect(payload?.task?.terminalSummary).toBe("Failed after build");
expect(payload?.task?.error).toBe("Tool failed");
@@ -203,18 +198,12 @@ describe("tasks gateway handlers", () => {
deliveryStatus: "pending",
});
const { calls, respond } = captureRespond();
await tasksHandlers["tasks.cancel"]({
req: { type: "req", id: "req-3", method: "tasks.cancel" },
params: { taskId: task.taskId, reason: "user stopped task" },
respond,
context: createContext(),
client: null,
isWebchatConnect: () => false,
const { calls, payload } = await runTaskHandler("tasks.cancel", {
taskId: task.taskId,
reason: "user stopped task",
});
expect(calls[0]?.[0]).toBe(true);
const payload = calls[0]?.[1] as TaskResponsePayload | undefined;
expect(payload?.found).toBe(true);
expect(payload?.cancelled).toBe(true);
expect(payload?.task?.id).toBe(task.taskId);