feat: expand companion platform, device controls, and memoir workflows
ci / verify (push) Canceled after 0s
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.
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user