fix(chat): 修复 abort 后 progress 仍显示工作中的问题
This commit is contained in:
@@ -353,6 +353,66 @@ describe("useAgentChatSession", () => {
|
||||
expect(abortAgentChat).toHaveBeenCalledWith("session-loaded");
|
||||
});
|
||||
|
||||
it("finalizes running progress when aborting an active prompt", async () => {
|
||||
listChatSessions.mockResolvedValue([]);
|
||||
jest.mocked(streamAgentChat).mockImplementationOnce(
|
||||
({ onEvent, signal }) =>
|
||||
new Promise<void>((_, reject) => {
|
||||
onEvent({
|
||||
type: "progress",
|
||||
sessionId: "session-1",
|
||||
id: "request-received",
|
||||
phase: "start",
|
||||
status: "running",
|
||||
title: "开始分析",
|
||||
startedAt: 1000,
|
||||
} satisfies StreamEvent);
|
||||
|
||||
signal.addEventListener("abort", () => {
|
||||
reject(new Error("aborted"));
|
||||
});
|
||||
}),
|
||||
);
|
||||
|
||||
const { result } = renderHook(() =>
|
||||
useAgentChatSession({
|
||||
projectId: "project-1",
|
||||
onToolCall: jest.fn(),
|
||||
}),
|
||||
);
|
||||
|
||||
await waitFor(() => expect(result.current.isHydrating).toBe(false));
|
||||
|
||||
act(() => {
|
||||
void result.current.sendPrompt("测试中断");
|
||||
});
|
||||
|
||||
await waitFor(() => expect(result.current.isStreaming).toBe(true));
|
||||
|
||||
act(() => {
|
||||
result.current.abort();
|
||||
});
|
||||
|
||||
await waitFor(() => expect(result.current.isStreaming).toBe(false));
|
||||
|
||||
expect(result.current.messages.at(-1)).toEqual(
|
||||
expect.objectContaining({
|
||||
role: "assistant",
|
||||
content: "⚠️ **请求已中断**",
|
||||
isError: true,
|
||||
progress: [
|
||||
expect.objectContaining({
|
||||
id: "request-received",
|
||||
status: "completed",
|
||||
durationMs: expect.any(Number),
|
||||
endedAt: expect.any(Number),
|
||||
}),
|
||||
],
|
||||
}),
|
||||
);
|
||||
expect(abortAgentChat).toHaveBeenCalledWith("session-1");
|
||||
});
|
||||
|
||||
it("ignores generated session titles after the title was edited manually", async () => {
|
||||
listChatSessions.mockResolvedValue([]);
|
||||
jest.mocked(streamAgentChat).mockImplementationOnce(async ({ onEvent }) => {
|
||||
|
||||
Reference in New Issue
Block a user