Files
crawler-plugin/frontend-vue/tests/task-progress-polling.test.ts
huangzd1997 67223f8950 perf(frontend): 工具页分页/历史截断/轻量轮询/共享纯逻辑(审查 F5/F6/F9/F12/G3)
- F9 新增 useTablePaging composable 并接入 7 个工具页"匹配结果"表(只切渲染窗口,
  不加选择语义;每页 100 条)+ 深色分页样式
- F6 历史任务抽屉渲染截断(默认 50 条 + "显示全部/收起"),全选口径改为当前可见条目
- F5 新增 task-progress-polling 适配器:等待任务终态的紧循环走 /tasks/progress/light,
  异常或空响应回退重型 batch;已接入跟价/定时匹配的 waitForTaskTerminal
- F12 背景图 bg.jpg 251KB → 166KB(1920 宽 + quality 80,image-set 仍优先 webp)
- G3 抽出共享纯逻辑 task-queue-state(开始时间表序列化校验 + 记录缺失错误判定),
  5 个工具页删除逐字重复实现
- 新增 4 个单测文件(分页切片/历史截断/轻量轮询归一/任务队列纯逻辑)
2026-09-14 06:23:46 +08:00

51 lines
1.7 KiB
TypeScript

import { test } from 'node:test'
import assert from 'node:assert/strict'
import { pickPollingBatch, toBatchItems } from '../src/shared/api/task-progress-polling.ts'
test('轻量项归一为重型 batch 的嵌套形状', () => {
const items = toBatchItems([
{ taskId: 7, status: 'RUNNING', fileStatus: 'PENDING', fileReady: false, updatedAt: '2026-09-14T06:00:00' },
])
assert.equal(items.length, 1)
assert.deepEqual(items[0].task, {
id: 7,
status: 'RUNNING',
statusCode: null,
fileStatus: 'PENDING',
fileError: null,
fileReady: false,
updatedAt: '2026-09-14T06:00:00',
})
})
test('缺少 taskId 的项被丢弃,非法 taskId 同样丢弃', () => {
const items = toBatchItems([{ status: 'RUNNING' }, { taskId: 0, status: 'RUNNING' }, { taskId: 3 }])
assert.equal(items.length, 1)
assert.equal(items[0].task?.id, 3)
})
test('有条目时返回可用结果', () => {
const picked = pickPollingBatch([{ taskId: 9, status: 'SUCCESS' }], [])
assert.notEqual(picked, null)
assert.equal(picked?.items.length, 1)
assert.deepEqual(picked?.missingTaskIds, [])
})
test('只有 missing 列表也算可用结果(任务已删除场景)', () => {
const picked = pickPollingBatch([], [11, 12])
assert.notEqual(picked, null)
assert.equal(picked?.items.length, 0)
assert.deepEqual(picked?.missingTaskIds, [11, 12])
})
test('空响应返回 null,调用方据此回退重型端点', () => {
assert.equal(pickPollingBatch([], []), null)
assert.equal(pickPollingBatch(null, null), null)
assert.equal(pickPollingBatch(undefined, undefined), null)
assert.equal(pickPollingBatch([{ status: 'RUNNING' }], []), null, '全是非法项时同样回退')
})