ci / verify (push) Canceled after 0s
Add customer and operator login, BLE provisioning, device fleet controls, call memory, memoir generation, and refreshed family and maintenance portals. Include API contracts, migrations, firmware sources, tests, assets, and deployment documentation.
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);
|
|
});
|