import test from 'node:test'; import assert from 'node:assert/strict'; import { calcVersionProgress } from './version-progress'; import type { Requirement } from './requirement'; import type { VersionPlan } from './version-plan'; function requirement(id: string): Requirement { return { id, code: 'QY0001', title: '需求', description: '需求描述', productId: 'product-1', projectId: 'project-1', versionId: 'version-1', sourceType: 'internal', sourceTarget: '产品部', platforms: ['web'], typeId: 'type-1', status: 'planned', priority: 'P1', effort: 'M', creator: 'PM', createdAt: '2026-06-29', }; } function plan(patch: Partial): VersionPlan { return { id: 'plan-1', versionId: 'version-1', type: 'product', title: '产品方案', owner: 'PM', startTime: '2026-06-29T09:00', endTime: '2026-06-29T18:00', status: 'in_progress', linkedRequirementIds: ['r1'], completedRequirementIds: ['r1'], createdAt: '2026-06-29', addedBy: 'PM', ...patch, }; } test('version progress uses explicit requirement coverage before legacy completed ids', () => { const progress = calcVersionProgress( 'version-1', [plan({ requirementCoverage: [{ requirementId: 'r1', status: 'partial', completedContent: '完成主流程', remainingContent: '剩余异常状态', updatedAt: '2026-06-29T09:00:00.000Z', updatedBy: 'PM', }], } as Partial)], [requirement('r1')], [], [], ); assert.equal(progress, 0); });