feat(版本): 完善研发计划与预警已读
关键改动: - 增加版本表单、发布校验和调研方向进度规则 - 扩展小宝预警已读状态、风险签名和今日证据 - 补充组长权限、加班查看范围、活动记录与相关测试 Co-Authored-By: Codex GPT-5 <codex@openai.com>
This commit is contained in:
70
apps/web/lib/version-form.test.ts
Normal file
70
apps/web/lib/version-form.test.ts
Normal file
@@ -0,0 +1,70 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
import {
|
||||
VERSION_DEVELOPMENT_TYPE_OPTIONS,
|
||||
canSubmitNewVersionForm,
|
||||
getRecommendedExpectedReleaseDate,
|
||||
getVersionDevelopmentTypeOption,
|
||||
} from './version-form';
|
||||
|
||||
test('canSubmitNewVersionForm requires expected release date', () => {
|
||||
assert.equal(canSubmitNewVersionForm({
|
||||
productId: 'prod-1',
|
||||
projectId: 'proj-1',
|
||||
versionNumber: '1.0',
|
||||
developmentType: 'agile',
|
||||
expectedReleaseDate: '',
|
||||
submitting: false,
|
||||
}), false);
|
||||
|
||||
assert.equal(canSubmitNewVersionForm({
|
||||
productId: 'prod-1',
|
||||
projectId: 'proj-1',
|
||||
versionNumber: '1.0',
|
||||
developmentType: 'agile',
|
||||
expectedReleaseDate: '2026-07-15',
|
||||
submitting: false,
|
||||
}), true);
|
||||
});
|
||||
|
||||
test('canSubmitNewVersionForm requires project development type', () => {
|
||||
assert.equal(canSubmitNewVersionForm({
|
||||
productId: 'prod-1',
|
||||
projectId: 'proj-1',
|
||||
versionNumber: '1.0',
|
||||
developmentType: '',
|
||||
expectedReleaseDate: '2026-07-15',
|
||||
submitting: false,
|
||||
}), false);
|
||||
});
|
||||
|
||||
test('canSubmitNewVersionForm blocks duplicate submits', () => {
|
||||
assert.equal(canSubmitNewVersionForm({
|
||||
productId: 'prod-1',
|
||||
projectId: 'proj-1',
|
||||
versionNumber: '1.0',
|
||||
developmentType: 'agile',
|
||||
expectedReleaseDate: '2026-07-15',
|
||||
submitting: true,
|
||||
}), false);
|
||||
});
|
||||
|
||||
test('version development type estimates include product design development and testing', () => {
|
||||
const agile = getVersionDevelopmentTypeOption('agile');
|
||||
|
||||
assert.deepEqual(agile?.stages.map((stage) => stage.label), ['产品设计', '开发', '测试']);
|
||||
assert.equal(agile?.totalWorkDays, 13);
|
||||
assert.ok(VERSION_DEVELOPMENT_TYPE_OPTIONS.some((option) => option.key === 'waterfall'));
|
||||
});
|
||||
|
||||
test('getRecommendedExpectedReleaseDate skips non-workdays from the stage total', () => {
|
||||
assert.equal(getRecommendedExpectedReleaseDate('hotfix', new Date('2026-06-30T09:00:00')), '2026-07-02');
|
||||
assert.equal(getRecommendedExpectedReleaseDate('agile', new Date('2026-06-30T09:00:00')), '2026-07-16');
|
||||
});
|
||||
|
||||
test('getRecommendedExpectedReleaseDate excludes product design when it is already completed', () => {
|
||||
assert.equal(
|
||||
getRecommendedExpectedReleaseDate('agile', new Date('2026-06-30T09:00:00'), { productDesignCompleted: true }),
|
||||
'2026-07-14',
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user