43 lines
2.3 KiB
JavaScript
43 lines
2.3 KiB
JavaScript
import test from 'node:test';
|
|||
|
|
import assert from 'node:assert/strict';
|
||
|
|
import { privacyDeletionProgress, privacyRequestsWithDetail } from '../src/pages/privacy-detail.ts';
|
||
|
|
|
||
|
|
const request = { id: 'request-a', request_type: 'DELETE', status: 'EXECUTING', legal_hold: false, version: 2, updated_at: '2026-10-05T00:00:00Z', subtasks: [] };
|
||
|
|
const tasks = statuses => statuses.map((status, index) => ({ id: `task-${index}`, status }));
|
||
|
|
|
||
|
|
test('list-only evidence never claims 0/0 or completion', () => {
|
||
|
|
const progress = privacyDeletionProgress({ ...request, status: 'COMPLETED' });
|
||
|
|
assert.equal(progress.complete, false);
|
||
|
|
assert.equal(progress.label, '尚未全部清除');
|
||
|
|
assert.doesNotMatch(progress.progress, /0\/0/);
|
||
|
|
assert.match(progress.summary, /暂不能确认/);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('four checked, one failed and one waiting stays incomplete', () => {
|
||
|
|
const progress = privacyDeletionProgress({ ...request, subtasks: tasks(['COMPLETED', 'SKIPPED', 'COMPLETED', 'COMPLETED', 'FAILED', 'PENDING']) });
|
||
|
|
assert.equal(progress.progress, '已核对 4/6');
|
||
|
|
assert.equal(progress.complete, false);
|
||
|
|
assert.doesNotMatch(progress.summary, /自动重试|正在重试|已全部清除/);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('historical completed parent with a failed child cannot claim completion', () => {
|
||
|
|
const progress = privacyDeletionProgress({ ...request, status: 'COMPLETED', subtasks: tasks(['COMPLETED', 'FAILED']) });
|
||
|
|
assert.equal(progress.complete, false);
|
||
|
|
assert.match(progress.summary, /信息不一致/);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('all checked subtasks still require final parent confirmation and no hold', () => {
|
||
|
|
const subtasks = tasks(['COMPLETED', 'SKIPPED']);
|
||
|
|
assert.equal(privacyDeletionProgress({ ...request, subtasks }).complete, false);
|
||
|
|
assert.equal(privacyDeletionProgress({ ...request, status: 'COMPLETED', legal_hold: true, subtasks }).complete, false);
|
||
|
|
assert.equal(privacyDeletionProgress({ ...request, status: 'COMPLETED', subtasks }).complete, true);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('a newer list invalidates both the progress evidence and its read timestamp identity', () => {
|
||
|
|
const detail = { ...request, subtasks: tasks(['COMPLETED', 'FAILED']) };
|
||
|
|
const summary = { ...request, version: 3 };
|
||
|
|
const displayed = privacyRequestsWithDetail([summary], detail, true)[0];
|
||
|
|
assert.notEqual(displayed, detail);
|
||
|
|
assert.equal(privacyDeletionProgress(displayed).total, 0);
|
||
|
|
});
|