Files
story/web/test/privacy-progress.test.mjs
T

43 lines
2.3 KiB
JavaScript
Raw Normal View History

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);
});