49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { aggregateWorkItems, getWorkspacePendingCount } from './workspace-engine';
|
|
import type { DevTask } from './dev-task';
|
|
|
|
test('getWorkspacePendingCount counts unfinished work items only', () => {
|
|
const count = getWorkspacePendingCount([
|
|
{ completed: false },
|
|
{ completed: true },
|
|
{ completed: false },
|
|
]);
|
|
|
|
assert.equal(count, 2);
|
|
});
|
|
|
|
test('aggregateWorkItems uses direct version id for no-requirement dev tasks', () => {
|
|
const task = {
|
|
id: 'dev-no-req',
|
|
taskNo: 'DEV-001',
|
|
versionId: 'ver-1',
|
|
requirementId: '',
|
|
requirementName: '预入职人员支持',
|
|
title: '实现预入职人员选择',
|
|
categoryId: 'frontend',
|
|
assigneeId: '张三',
|
|
priority: 'P1',
|
|
expectedStartAt: '',
|
|
expectedEndAt: '',
|
|
status: 'todo',
|
|
isBlocked: false,
|
|
createdBy: 'AI',
|
|
createdAt: '2026-06-29T09:00:00.000Z',
|
|
updatedAt: '2026-06-29T09:00:00.000Z',
|
|
} as DevTask;
|
|
|
|
const items = aggregateWorkItems(
|
|
'张三',
|
|
[],
|
|
[task],
|
|
[],
|
|
[],
|
|
new Map([['ver-1', { id: 'ver-1', name: 'V1.0', productName: 'FTB', projectName: 'PM' }]]),
|
|
new Map(),
|
|
);
|
|
|
|
assert.equal(items[0].versionId, 'ver-1');
|
|
assert.equal(items[0].versionName, 'V1.0');
|
|
});
|