import { test } from 'node:test' import assert from 'node:assert/strict' import { isRecordMissingError, parseTaskStartTimes, removeTaskStartTime, upsertTaskStartTime, } from '../src/shared/utils/task-queue-state.ts' test('解析开始时间表:保留正整数 id 与非空时间戳', () => { const parsed = parseTaskStartTimes(JSON.stringify({ '12': '2026-09-14T00:00:00Z', '0': 'x', '-3': 'y', 'abc': 'z', '15': ' ' })) assert.deepEqual(parsed, { 12: '2026-09-14T00:00:00Z' }) }) test('解析开始时间表:坏 JSON 与非字符串值安全降级', () => { assert.deepEqual(parseTaskStartTimes('{bad json'), {}) assert.deepEqual(parseTaskStartTimes(null), {}) assert.deepEqual(parseTaskStartTimes(undefined), {}) assert.deepEqual(parseTaskStartTimes('{"7": 123, "8": null}'), {}) }) test('写入开始时间:非法 taskId 不改动内容且不共享引用', () => { const base = { 1: 'a' } const next = upsertTaskStartTime(base, 0, 'b') assert.deepEqual(next, { 1: 'a' }) assert.notEqual(next, base) assert.deepEqual(upsertTaskStartTime(base, 2, 'b'), { 1: 'a', 2: 'b' }) }) test('移除开始时间:不存在时返回内容相同的新对象', () => { const base = { 1: 'a' } const next = removeTaskStartTime(base, 9) assert.deepEqual(next, { 1: 'a' }) assert.notEqual(next, base) assert.deepEqual(removeTaskStartTime(base, 1), {}) assert.deepEqual(removeTaskStartTime(base, null), { 1: 'a' }) }) test('记录缺失错误判定:中文关键词与 404 命中', () => { assert.equal(isRecordMissingError(new Error('记录不存在')), true) assert.equal(isRecordMissingError(new Error('任务不存在')), true) assert.equal(isRecordMissingError(new Error('该记录已删除')), true) assert.equal(isRecordMissingError(new Error('request failed with 404')), true) assert.equal(isRecordMissingError(new Error('Not Found')), true) assert.equal(isRecordMissingError('不存在'), true) }) test('记录缺失错误判定:其它错误不误判', () => { assert.equal(isRecordMissingError(new Error('服务器繁忙,请稍后重试')), false) assert.equal(isRecordMissingError(new Error('网络超时')), false) assert.equal(isRecordMissingError(null), false) assert.equal(isRecordMissingError(undefined), false) })