fix(需求池): 修复列表换行和版本解绑状态

This commit is contained in:
Script Generator
2026-07-02 19:50:47 +08:00
parent 121114af6a
commit 554ab520d1
7 changed files with 194 additions and 17 deletions

View File

@@ -0,0 +1,63 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import type { Requirement } from './requirement';
import {
getRequirementVersionSelectionPatch,
getRequirementVersionUnlinkPatch,
} from './requirement-version-link';
function requirement(patch: Partial<Requirement> = {}): Requirement {
return {
id: 'req-1',
code: 'REQ-001',
title: 'Requirement',
description: '',
productId: 'product-1',
projectId: 'project-1',
versionId: 'version-1',
sourceType: 'internal',
sourceTarget: '',
platforms: [],
typeId: 'type-1',
status: 'planned',
priority: 'P2',
effort: 'M',
creator: 'tester',
createdAt: '2026-07-02T00:00:00.000Z',
addedToVersionBy: 'pm',
...patch,
};
}
test('unlinking a version-scoped requirement returns it to adopted', () => {
for (const status of ['planned', 'developing', 'testing', 'released'] as const) {
assert.deepEqual(getRequirementVersionUnlinkPatch(requirement({ status })), {
versionId: undefined,
addedToVersionBy: undefined,
status: 'adopted',
});
}
});
test('unlinking keeps other requirement statuses unchanged', () => {
assert.deepEqual(getRequirementVersionUnlinkPatch(requirement({ status: 'adopted' })), {
versionId: undefined,
addedToVersionBy: undefined,
});
});
test('clearing version from requirement edit uses the same unlink semantics', () => {
assert.deepEqual(getRequirementVersionSelectionPatch(requirement(), ''), {
versionId: undefined,
addedToVersionBy: undefined,
status: 'adopted',
});
});
test('selecting a version preserves the current business status', () => {
assert.deepEqual(getRequirementVersionSelectionPatch(requirement({ status: 'adopted' }), 'version-2', 'pm2'), {
versionId: 'version-2',
addedToVersionBy: 'pm2',
});
});