Files
ftb-project-management/apps/web/lib/xiaobao-risk-trend.test.ts
2026-06-29 18:05:58 +08:00

41 lines
1.4 KiB
TypeScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { buildRiskSignature, summarizeRiskTrend } from './xiaobao-risk-trend';
import type { XiaobaoRiskSnapshot } from './xiaobao-risk-trend';
function snapshot(patch: Partial<XiaobaoRiskSnapshot>): XiaobaoRiskSnapshot {
return {
versionId: 'ver-1',
date: '2026-06-27',
riskScore: 38,
riskLevel: 'attention',
openBugCount: 0,
failedTestCount: 0,
blockedCount: 0,
silentRiskCount: 0,
confidence: 80,
createdAt: '2026-06-27T01:00:00.000Z',
...patch,
};
}
test('summarizeRiskTrend detects continuous rising risk across three snapshots', () => {
const trend = summarizeRiskTrend([
snapshot({ riskScore: 71, createdAt: '2026-06-29T01:00:00.000Z', date: '2026-06-29' }),
snapshot({ riskScore: 38, createdAt: '2026-06-27T01:00:00.000Z', date: '2026-06-27' }),
snapshot({ riskScore: 52, createdAt: '2026-06-28T01:00:00.000Z', date: '2026-06-28' }),
]);
assert.equal(trend.direction, 'up');
assert.equal(trend.delta, 33);
assert.equal(trend.pattern, 'continuous_rising');
});
test('buildRiskSignature changes when score and bug counts change', () => {
const base = buildRiskSignature(snapshot({ riskScore: 52, openBugCount: 1 }));
const changed = buildRiskSignature(snapshot({ riskScore: 71, openBugCount: 2 }));
assert.notEqual(base, changed);
});