67 lines
1.6 KiB
TypeScript
67 lines
1.6 KiB
TypeScript
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>): 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<VersionPlan>)],
|
|
[requirement('r1')],
|
|
[],
|
|
[],
|
|
);
|
|
|
|
assert.equal(progress, 0);
|
|
});
|