feat(workspace): 增加工作活动日报引擎

This commit is contained in:
Script Generator
2026-06-26 17:17:35 +08:00
parent 64491789ae
commit 4278e4d565
21 changed files with 1090 additions and 24 deletions

View File

@@ -0,0 +1,130 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import type { Bug } from './bug';
import type { DevTask } from './dev-task';
import type { TestCase } from './test-case';
import type { VersionPlan } from './version-plan';
import {
makeBugStatusActivity,
makeDevTaskStatusActivity,
makeTestCaseStatusActivity,
makeVersionPlanCompletedActivity,
} from './work-activity-factory';
function devTask(patch: Partial<DevTask> = {}): DevTask {
return {
id: 'task-1',
taskNo: 'DEV-001',
requirementId: 'req-1',
title: '实现登录接口',
categoryId: 'cat-1',
assigneeId: '张三',
priority: 'P2',
expectedStartAt: '2026-06-26T01:00',
expectedEndAt: '2026-06-26T09:00',
status: 'todo',
isBlocked: false,
createdBy: '张三',
createdAt: '2026-06-26T01:00:00.000Z',
updatedAt: '2026-06-26T01:00:00.000Z',
...patch,
};
}
function plan(patch: Partial<VersionPlan> = {}): VersionPlan {
return {
id: 'plan-1',
versionId: 'version-1',
type: 'product',
title: '提交产品方案',
owner: '张三',
startTime: '2026-06-26T01:00',
endTime: '2026-06-26T09:00',
status: 'in_progress',
createdAt: '2026-06-26',
addedBy: '张三',
...patch,
};
}
function bug(patch: Partial<Bug> = {}): Bug {
return {
id: 'bug-1',
bugNo: 'BUG-001',
versionId: 'version-1',
testCaseId: 'case-1',
title: '修复菜单错位',
description: '菜单在窄屏错位',
severity: 'major',
priority: 'P1',
reportedBy: '李四',
assigneeId: '张三',
status: 'fixing',
createdAt: '2026-06-26T01:00:00.000Z',
updatedAt: '2026-06-26T01:00:00.000Z',
...patch,
};
}
function testCase(patch: Partial<TestCase> = {}): TestCase {
return {
id: 'tc-1',
caseNo: 'TC-001',
versionId: 'version-1',
title: '验证登录流程',
categoryId: 'cat-test',
priority: 'P2',
assigneeId: '张三',
status: 'pending',
createdBy: '张三',
createdAt: '2026-06-26T01:00:00.000Z',
updatedAt: '2026-06-26T01:00:00.000Z',
...patch,
};
}
test('makeDevTaskStatusActivity maps started and submitted actions', () => {
const started = makeDevTaskStatusActivity(devTask(), 'todo', 'in_progress', '张三');
const submitted = makeDevTaskStatusActivity(devTask({ status: 'testing' }), 'testing', 'submitted', '张三');
assert.equal(started?.action, 'dev_task_started');
assert.equal(started?.category, 'progress');
assert.equal(started?.summary, '开始开发:实现登录接口');
assert.equal(submitted?.action, 'dev_task_submitted');
assert.equal(submitted?.category, 'delivery');
assert.equal(submitted?.summary, '已提测开发任务:实现登录接口');
});
test('makeVersionPlanCompletedActivity marks product plan completion as delivery', () => {
const activity = makeVersionPlanCompletedActivity(plan(), '张三');
assert.equal(activity.action, 'version_plan_completed');
assert.equal(activity.category, 'delivery');
assert.equal(activity.sourceType, 'version_plan');
assert.equal(activity.summary, '完成产品方案:提交产品方案');
});
test('makeBugStatusActivity maps fixing and fixed actions', () => {
const fixing = makeBugStatusActivity(bug({ status: 'open' }), 'open', 'fixing', '张三');
const fixed = makeBugStatusActivity(bug(), 'fixing', 'fixed', '张三');
assert.equal(fixing?.action, 'bug_fixing');
assert.equal(fixing?.category, 'progress');
assert.equal(fixing?.summary, '开始修复 Bug修复菜单错位');
assert.equal(fixed?.action, 'bug_fixed');
assert.equal(fixed?.category, 'delivery');
assert.equal(fixed?.summary, '已修复 Bug修复菜单错位');
});
test('makeTestCaseStatusActivity maps running and passed actions', () => {
const running = makeTestCaseStatusActivity(testCase(), 'pending', 'running', '张三');
const passed = makeTestCaseStatusActivity(testCase({ status: 'running' }), 'running', 'passed', '张三');
assert.equal(running?.action, 'test_case_started');
assert.equal(running?.category, 'progress');
assert.equal(running?.summary, '开始测试:验证登录流程');
assert.equal(passed?.action, 'test_case_passed');
assert.equal(passed?.category, 'delivery');
assert.equal(passed?.summary, '测试通过:验证登录流程');
});