ai-chatbot/tests/routes/openclaw-request-state.test.ts

58 lines
1.7 KiB
TypeScript

import { expect, test } from "@playwright/test";
import {
clearClawdRequestState,
startClawdRequestState,
updateClawdRequestState,
} from "@/components/canvas/chat-panel/clawd-request-state";
test.describe("OpenClaw request state isolation", () => {
test("keeps progress and completion scoped to the originating chat", () => {
let state = startClawdRequestState({}, "chat-a", "message-a", "处理中 A");
state = startClawdRequestState(state, "chat-b", "message-b", "处理中 B");
state = updateClawdRequestState(
state,
"chat-a",
"message-a",
(currentState) => ({
...currentState,
progressEvents: ["A 第一步"],
})
);
expect(state["chat-a"]?.progressEvents).toEqual(["A 第一步"]);
expect(state["chat-b"]?.progressEvents).toEqual([]);
state = clearClawdRequestState(state, "chat-a", "message-a");
expect(state["chat-a"]).toBeUndefined();
expect(state["chat-b"]?.hint).toBe("处理中 B");
});
test("ignores stale callbacks from an older request in the same chat", () => {
let state = startClawdRequestState({}, "chat-a", "old-message", null);
state = startClawdRequestState(state, "chat-a", "new-message", "新任务");
const afterStaleUpdate = updateClawdRequestState(
state,
"chat-a",
"old-message",
(currentState) => ({
...currentState,
progressEvents: ["旧任务进度"],
})
);
const afterStaleClear = clearClawdRequestState(
afterStaleUpdate,
"chat-a",
"old-message"
);
expect(afterStaleClear).toBe(state);
expect(afterStaleClear["chat-a"]).toEqual({
userMessageId: "new-message",
hint: "新任务",
progressEvents: [],
});
});
});