diff --git a/src/gateway/server-methods/tasks.test.ts b/src/gateway/server-methods/tasks.test.ts index 21692768ed2..eb2c8dee651 100644 --- a/src/gateway/server-methods/tasks.test.ts +++ b/src/gateway/server-methods/tasks.test.ts @@ -60,6 +60,32 @@ function createContext() { } as never; } +async function runTaskHandler( + method: "tasks.list" | "tasks.get" | "tasks.cancel", + params: Record, +) { + 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);