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