Files
WechatExplorer/tests/unit/query-agent-progress.test.ts
Wxw-Gu ab3b3731b7 feat: 重构问问微信并完善知识库增量检索
统一问问微信与 Agent Hub 的查询链路
完善查询覆盖度、新鲜度和部分结果表达,避免索引滞后产生错误结论
基于会话实现真正的增量追新与历史补齐
支持后台同步、取消恢复、重启续传以及同步期间继续查询
优化知识库跨会话检索、同步状态、进度展示和侧栏布局
2026-09-11 17:44:48 +08:00

88 lines
3.4 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
QUERY_AGENT_PROGRESS_STEPS,
queryAgentProgressLabel,
queryAgentProgressStepIndex,
type QueryAgentProgressState
} from '../../src/renderer/src/components/search/hooks/useQueryAgentProgress'
const state = (patch: Partial<QueryAgentProgressState> = {}): QueryAgentProgressState => ({
stage: 'understanding',
elapsedMs: 0,
modelCallCount: 1,
toolCallCount: 0,
...patch
})
/**
* 进度文案必须来自**真实 Runtime 生命周期**,而且要说清"卡在哪一步":
* 静态 N 步文案加一个计时器,用户什么都判断不出来。
*/
describe('queryAgentProgressLabel', () => {
it('maps every real lifecycle stage to a user-readable sentence', () => {
expect(queryAgentProgressLabel(null, true)).toBe('正在准备查询')
expect(queryAgentProgressLabel(state({ stage: 'understanding' }), true)).toBe(
'正在理解你的问题'
)
expect(
queryAgentProgressLabel(state({ stage: 'understanding', modelCallCount: 2 }), true)
).toBe('正在重新理解你的问题')
expect(queryAgentProgressLabel(state({ stage: 'organizing_evidence' }), true)).toBe(
'正在整理找到的聊天记录'
)
expect(queryAgentProgressLabel(state({ stage: 'generating_answer' }), true)).toBe(
'正在生成回答'
)
expect(queryAgentProgressLabel(state({ stage: 'completed' }), true)).toBe('已完成')
})
it('explains the wider scope during the Tool phase instead of silently hanging', () => {
// 跨会话检索是另一个量级的耗时;提前说清楚范围,用户才不会被"突然要好几十秒"劝退。
expect(queryAgentProgressLabel(state({ stage: 'searching' }), true)).toBe(
'正在搜索较大范围的聊天记录…'
)
expect(queryAgentProgressLabel(state({ stage: 'searching' }), false)).toBe(
'正在搜索聊天记录…'
)
})
it('never leaks internal tool names, SQL, FTS or ids', () => {
const stages: QueryAgentProgressState['stage'][] = [
'understanding',
'searching',
'organizing_evidence',
'generating_answer',
'completed'
]
for (const stage of stages) {
for (const wide of [true, false]) {
const label = queryAgentProgressLabel(state({ stage, toolName: 'search_messages' }), wide)
expect(label).not.toMatch(/query_messages|search_messages|message_context|overview/)
expect(label).not.toMatch(/SELECT|FTS|fts|knowledge_|local:|[0-9a-f]{16,}/)
}
}
})
it('keeps the declared step list aligned with the runtime lifecycle', () => {
expect(QUERY_AGENT_PROGRESS_STEPS.map((step) => step.stage)).toEqual([
'understanding',
'searching',
'organizing_evidence',
'generating_answer'
])
})
})
describe('queryAgentProgressStepIndex', () => {
it('advances monotonically with the lifecycle and completes at the end', () => {
expect(queryAgentProgressStepIndex(null)).toBe(0)
expect(queryAgentProgressStepIndex(state({ stage: 'understanding' }))).toBe(0)
expect(queryAgentProgressStepIndex(state({ stage: 'searching' }))).toBe(1)
expect(queryAgentProgressStepIndex(state({ stage: 'organizing_evidence' }))).toBe(2)
expect(queryAgentProgressStepIndex(state({ stage: 'generating_answer' }))).toBe(3)
expect(queryAgentProgressStepIndex(state({ stage: 'completed' }))).toBe(
QUERY_AGENT_PROGRESS_STEPS.length
)
})
})