Skip to content

Commit 69719ae

Browse files
roomoteedelauna
authored andcommitted
test(task): cover cancelled tool-result flush
1 parent d5a18ac commit 69719ae

1 file changed

Lines changed: 36 additions & 0 deletions

File tree

src/core/task/__tests__/Task.persistence.spec.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -894,9 +894,40 @@ describe("Task persistence", () => {
894894
}
895895
})
896896

897+
it("does not wait or flush dependent tool results after abort", async () => {
898+
const task = new Task({
899+
provider: mockProvider,
900+
apiConfiguration: mockApiConfig,
901+
task: "test task",
902+
startTask: false,
903+
})
904+
task.abort = true
905+
task.userMessageContent = [{ type: "tool_result", tool_use_id: "tool-1", content: "done" }]
906+
const waitForPersistence = vi.spyOn(task, "waitForCurrentAssistantMessagePersistence")
907+
908+
await expect(task.flushPendingToolResultsToHistory()).resolves.toBe(false)
909+
expect(waitForPersistence).not.toHaveBeenCalled()
910+
expect(mockSaveApiMessages).not.toHaveBeenCalled()
911+
})
912+
913+
it("does not flush dependent tool results when the persistence barrier is cancelled", async () => {
914+
const task = new Task({
915+
provider: mockProvider,
916+
apiConfiguration: mockApiConfig,
917+
task: "test task",
918+
startTask: false,
919+
})
920+
task.userMessageContent = [{ type: "tool_result", tool_use_id: "tool-1", content: "done" }]
921+
vi.spyOn(task, "waitForCurrentAssistantMessagePersistence").mockResolvedValue(false)
922+
923+
await expect(task.flushPendingToolResultsToHistory()).resolves.toBe(false)
924+
expect(mockSaveApiMessages).not.toHaveBeenCalled()
925+
})
926+
897927
it("does not flush dependent tool results when assistant persistence retries are exhausted", async () => {
898928
vi.useFakeTimers()
899929
mockSaveApiMessages.mockRejectedValue(new Error("assistant write failed"))
930+
const consoleWarn = vi.spyOn(console, "warn").mockImplementation(() => undefined)
900931
const task = new Task({
901932
provider: mockProvider,
902933
apiConfiguration: mockApiConfig,
@@ -918,7 +949,12 @@ describe("Task persistence", () => {
918949
expect(mockSaveApiMessages).toHaveBeenCalledTimes(4)
919950
expect(task.assistantMessageSavedToHistory).toBe(false)
920951
expect(task.userMessageContent).toHaveLength(1)
952+
expect(consoleWarn).toHaveBeenCalledWith(
953+
expect.stringContaining("failed to persist assistant message"),
954+
expect.any(Error),
955+
)
921956
} finally {
957+
consoleWarn.mockRestore()
922958
mockSaveApiMessages.mockResolvedValue(undefined)
923959
vi.useRealTimers()
924960
}

0 commit comments

Comments
 (0)