前端 bootstrap 用例补齐:在跑的那一轮与在队条目同时还原

- `directThreadChat.test.ts` 队列投影分组里新增一条:bootstrap 同时带 `turn.started` 锚点与两条 `queue.enqueued`
- 断言 `turnRunning` / `turnUserItemId` / `pendingTurns` 三者同时正确,而不是各测一半
- 只加用例,不改实现
This commit is contained in:
2026-09-30 12:43:32 +08:00
parent d341a9be13
commit e0ca5ad9b9
@@ -410,6 +410,32 @@ describe('DirectProject 聊天 reducer', () => {
[{ type: 'input_text', text: '第二条' }],
]);
});
it('bootstrap 同时交出在跑的那一轮与在队的那几条:顺序就是事件顺序', () => {
// 中途加入(另一个窗口、离开工作台再回来)拿到的是一份**合并快照**:锚点让"这一轮还在跑"
// 成立,后面的在队条目让队列不丢。只有其中一个都算把界面还原成了错的样子。
const bootstrap = resolveDirectThreadBootstrap(
emptyDirectThreadChatState(),
{
subscriptionId: 'sub-1',
lastCompletedItemId: null,
events: [
withUserItemId(
event({ type: 'turn.started', at: 1_500 }),
'direct-codex:client-0:user',
),
enqueued('client-1', '第一条'),
enqueued('client-2', '第二条'),
],
} as never,
);
expect(bootstrap.turnRunning).toBe(true);
expect(bootstrap.turnUserItemId).toBe('direct-codex:client-0:user');
expect(bootstrap.pendingTurns.map((turn) => turn.clientTurnId)).toEqual([
'client-1',
'client-2',
]);
});
});
describe('失败终态(turn.completed 带 failure 载荷)', () => {