feat(ai): 优化拆解目标和负责人推荐

This commit is contained in:
Script Generator
2026-06-29 16:19:52 +08:00
parent 0e27a4d4c5
commit 7f24e16491
19 changed files with 658 additions and 118 deletions

View File

@@ -0,0 +1,53 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import { filterDecomposeResultByTarget } from './ai-decompose-target';
import type { AgentDecomposeResult } from '@ftb/shared';
function makeResult(): AgentDecomposeResult {
return {
report: { matched: [], reqOnly: [], noteOnly: [], ambiguous: [] },
devTaskDrafts: [
{
title: '实现登录表单',
categoryCode: 'frontend_development',
priority: 'P2',
aiEstimateHours: 0.5,
references: [{ type: 'requirement', id: 'REQ001', label: 'REQ001 登录' }],
},
],
testCaseDrafts: [
{
title: '验证登录成功',
description: '输入正确账号密码后进入首页',
categoryCode: 'test_functional',
priority: 'P2',
aiEstimateHours: 0.2,
references: [{ type: 'requirement', id: 'REQ001', label: 'REQ001 登录' }],
},
],
};
}
test('keeps only dev task drafts for dev task decomposition target', () => {
const original = makeResult();
const filtered = filterDecomposeResultByTarget(original, 'dev_tasks');
assert.equal(filtered.devTaskDrafts.length, 1);
assert.equal(filtered.testCaseDrafts.length, 0);
assert.equal(original.testCaseDrafts.length, 1);
});
test('keeps only test case drafts for test case decomposition target', () => {
const filtered = filterDecomposeResultByTarget(makeResult(), 'test_cases');
assert.equal(filtered.devTaskDrafts.length, 0);
assert.equal(filtered.testCaseDrafts.length, 1);
});
test('keeps both draft groups for all decomposition target', () => {
const filtered = filterDecomposeResultByTarget(makeResult(), 'all');
assert.equal(filtered.devTaskDrafts.length, 1);
assert.equal(filtered.testCaseDrafts.length, 1);
});