import { test } from 'node:test' import assert from 'node:assert/strict' import { runBatchDelete } from '../src/shared/utils/batch-delete.ts' test('空列表不调用删除并返回 0', async () => { let calls = 0 const result = await runBatchDelete([], async () => { calls += 1 }) assert.deepEqual(result, { total: 0, failed: 0 }) assert.equal(calls, 0) }) test('全部成功时 failed 为 0', async () => { const seen: number[] = [] const result = await runBatchDelete([1, 2, 3], async (n) => { seen.push(n) }) assert.deepEqual(result, { total: 3, failed: 0 }) assert.deepEqual(seen, [1, 2, 3]) }) test('个别失败继续删其余并计数', async () => { const seen: number[] = [] const result = await runBatchDelete([1, 2, 3, 4], async (n) => { seen.push(n) if (n === 2 || n === 4) throw new Error('删除失败') }) assert.deepEqual(result, { total: 4, failed: 2 }) assert.deepEqual(seen, [1, 2, 3, 4], '失败后应继续处理后续条目') }) test('抛出非 Error 也计入失败', async () => { const result = await runBatchDelete(['a'], async () => { throw 'boom' }) assert.deepEqual(result, { total: 1, failed: 1 }) })