33 lines
1.5 KiB
TypeScript
33 lines
1.5 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import type { AgentEvent } from './api'
|
|
import { appendUniqueEvents, parseToolResult } from './eventUtils'
|
|
|
|
const event = (id: number): AgentEvent => ({
|
|
id,
|
|
projectId: 'project',
|
|
runId: 'run',
|
|
type: 'TEXT_MESSAGE_CONTENT',
|
|
payload: { delta: String(id) },
|
|
createdAt: '2026-08-24T00:00:00Z'
|
|
})
|
|
|
|
describe('appendUniqueEvents', () => {
|
|
it('保留顺序并忽略重放事件', () => {
|
|
expect(appendUniqueEvents([event(1), event(2)], [event(2), event(3)]).map(item => item.id))
|
|
.toEqual([1, 2, 3])
|
|
})
|
|
})
|
|
|
|
|
|
describe('parseToolResult', () => {
|
|
it('优先使用结构化结果并识别旧的脚本错误', () => {
|
|
expect(parseToolResult(JSON.stringify(JSON.stringify({ success: false, exitCode: 1, output: '错误' })), 'execute').failed).toBe(true)
|
|
expect(parseToolResult({ success: true, exitCode: 0, output: '示例 TypeError:' }, 'execute').failed).toBe(false)
|
|
expect(parseToolResult(JSON.stringify('Exit code: 0\n\nTypeError: children is not iterable'), 'execute').failed).toBe(true)
|
|
expect(parseToolResult(JSON.stringify('Exit code: 0\n\nSyntaxError: Unexpected token'), 'execute').failed).toBe(true)
|
|
expect(parseToolResult('TypeError: 文档中的示例', 'read_file').failed).toBe(false)
|
|
expect(parseToolResult('{"success":false,"error":"文件中的业务数据"}', 'read_file').failed).toBe(false)
|
|
expect(parseToolResult('document_view_result={"images":[],"errors":["无法渲染"]}', 'document_view').failed).toBe(true)
|
|
})
|
|
})
|