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, '全是非法项时同样回退') })