58 lines
1.7 KiB
TypeScript
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: [],
|
|
});
|
|
});
|
|
});
|