workspaceTimelineIdentity.test.ts 1.1 KB

12345678910111213141516
  1. import { expect, it } from 'vitest'
  2. import { buildMessageTimelineRows } from '@/utils/turnTrace'
  3. import type { UiMessage } from '@/components/messages/types'
  4. it('keeps settled Bot message bodies stable without changing mutable ordinary-chat callers', () => {
  5. const settled: UiMessage = { id: 'old', role: 'assistant', content: '历史正文', status: 'settled' }
  6. const live: UiMessage = { id: 'live', role: 'assistant', content: '正在', status: 'streaming' }
  7. const bodies = new WeakMap<UiMessage, UiMessage>()
  8. const before = buildMessageTimelineRows([settled, live], bodies)
  9. const after = buildMessageTimelineRows([settled, { ...live, content: '正在更新' }], bodies)
  10. expect(after[0]!.kind === 'message' && after[0]!.message).toBe(before[0]!.kind === 'message' && before[0]!.message)
  11. expect(after[1]!.kind === 'message' && after[1]!.message).not.toBe(before[1]!.kind === 'message' && before[1]!.message)
  12. live.content = '原地更新的普通聊天'
  13. const ordinary = buildMessageTimelineRows([live])
  14. expect(ordinary[0]!.kind === 'message' && ordinary[0]!.message.content).toBe(live.content)
  15. })