feat(v2.4): 统一领域状态契约
This commit is contained in:
@@ -1,19 +1,25 @@
|
||||
import { RequirementStatus } from '@ftb/shared';
|
||||
|
||||
export const REQUIREMENT_STATUS_LABEL: Record<RequirementStatus, string> = {
|
||||
[RequirementStatus.DRAFT]: '草稿',
|
||||
[RequirementStatus.REVIEWING]: '评审中',
|
||||
[RequirementStatus.APPROVED]: '已通过',
|
||||
[RequirementStatus.PENDING_REVIEW]: '待评审',
|
||||
[RequirementStatus.ADOPTED]: '已采纳',
|
||||
[RequirementStatus.REJECTED]: '已拒绝',
|
||||
[RequirementStatus.DELIVERED]: '已交付',
|
||||
[RequirementStatus.PLANNED]: '已规划',
|
||||
[RequirementStatus.DEVELOPING]: '开发中',
|
||||
[RequirementStatus.TESTING]: '测试中',
|
||||
[RequirementStatus.RELEASED]: '已上线',
|
||||
[RequirementStatus.CLOSED]: '已关闭',
|
||||
};
|
||||
|
||||
export const REQUIREMENT_STATUS_COLOR: Record<RequirementStatus, string> = {
|
||||
[RequirementStatus.DRAFT]: 'bg-gray-100 text-gray-700',
|
||||
[RequirementStatus.REVIEWING]: 'bg-blue-100 text-blue-700',
|
||||
[RequirementStatus.APPROVED]: 'bg-green-100 text-green-700',
|
||||
[RequirementStatus.PENDING_REVIEW]: 'bg-zinc-100 text-zinc-700',
|
||||
[RequirementStatus.ADOPTED]: 'bg-emerald-50 text-emerald-700',
|
||||
[RequirementStatus.REJECTED]: 'bg-red-100 text-red-700',
|
||||
[RequirementStatus.DELIVERED]: 'bg-purple-100 text-purple-700',
|
||||
[RequirementStatus.PLANNED]: 'bg-blue-50 text-blue-700',
|
||||
[RequirementStatus.DEVELOPING]: 'bg-indigo-50 text-indigo-700',
|
||||
[RequirementStatus.TESTING]: 'bg-purple-50 text-purple-700',
|
||||
[RequirementStatus.RELEASED]: 'bg-emerald-50 text-emerald-700',
|
||||
[RequirementStatus.CLOSED]: 'bg-zinc-50 text-zinc-500',
|
||||
};
|
||||
|
||||
export const PRIORITY_LABEL: Record<number, string> = {
|
||||
|
||||
48
apps/web/lib/domain-contract.test.ts
Normal file
48
apps/web/lib/domain-contract.test.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
|
||||
import {
|
||||
BugStatus,
|
||||
DevTaskStatus,
|
||||
RequirementStatus,
|
||||
TestCaseStatus,
|
||||
VersionPlanStatus,
|
||||
VersionStatus,
|
||||
} from '@ftb/shared';
|
||||
|
||||
import type { BugStatus as WebBugStatus } from './bug';
|
||||
import type { DevTaskStatus as WebDevTaskStatus } from './dev-task';
|
||||
import type { RequirementStatus as WebRequirementStatus } from './requirement';
|
||||
import type { TestCaseStatus as WebTestCaseStatus } from './test-case';
|
||||
import type { PlanTaskStatus } from './version-plan';
|
||||
import type { VersionStatus as WebVersionStatus } from './version-status';
|
||||
|
||||
test('shared requirement statuses match the current requirement workflow', () => {
|
||||
const shared = Object.values(RequirementStatus);
|
||||
const expected: WebRequirementStatus[] = [
|
||||
'pending_review',
|
||||
'adopted',
|
||||
'rejected',
|
||||
'planned',
|
||||
'developing',
|
||||
'testing',
|
||||
'released',
|
||||
'closed',
|
||||
];
|
||||
|
||||
assert.deepEqual(shared, expected);
|
||||
});
|
||||
|
||||
test('shared execution entity statuses match frontend domain workflows', () => {
|
||||
const planStatuses: PlanTaskStatus[] = ['pending', 'in_progress', 'completed'];
|
||||
const devTaskStatuses: WebDevTaskStatus[] = ['todo', 'in_progress', 'testing', 'submitted'];
|
||||
const testCaseStatuses: WebTestCaseStatus[] = ['pending', 'running', 'passed', 'failed', 'blocked'];
|
||||
const bugStatuses: WebBugStatus[] = ['open', 'fixing', 'fixed', 'verifying', 'closed', 'rejected'];
|
||||
const versionStatuses: WebVersionStatus[] = ['developing', 'planned', 'released', 'paused', 'closed'];
|
||||
|
||||
assert.deepEqual(Object.values(VersionPlanStatus), planStatuses);
|
||||
assert.deepEqual(Object.values(DevTaskStatus), devTaskStatuses);
|
||||
assert.deepEqual(Object.values(TestCaseStatus), testCaseStatuses);
|
||||
assert.deepEqual(Object.values(BugStatus), bugStatuses);
|
||||
assert.deepEqual(Object.values(VersionStatus), versionStatuses);
|
||||
});
|
||||
Reference in New Issue
Block a user