Files
X-Financial/web/tests/workbench-summary.test.mjs
caoxiaozhu e124e4bbcb feat: 报销审批流重构与管家计划全链路贯通
- 重构报销状态注册表、审批流路由与平台风险标记
- 完善管家意图规划器与模型计划构建器全链路
- 新增 OCR Worker 脚本、数据库会话管理与通知状态
- 优化文档中心、日志视图、预算中心与员工管理交互
- 增强工作台摘要、图标资源与全局主题样式
- 补充审批路由、状态注册、OCR 服务与管家规划器测试覆盖
2026-06-06 17:19:07 +08:00

139 lines
4.5 KiB
JavaScript

import assert from 'node:assert/strict'
import test from 'node:test'
import {
buildAdjacentProgressSteps,
buildWorkbenchSummary
} from '../src/utils/workbenchSummary.js'
const currentUser = { name: '张三', username: 'zhangsan' }
function buildStep(label, index, currentIndex) {
return {
label,
done: index < currentIndex,
active: index <= currentIndex,
current: index === currentIndex,
time: index === currentIndex ? '进行中' : '待处理'
}
}
test('workbench expense progress keeps only nearby four expense steps', () => {
const steps = ['创建单据', '待提交', '直属领导审批', '财务审批', '待付款', '归档入账']
.map((label, index) => buildStep(label, index, 3))
const visibleSteps = buildAdjacentProgressSteps(steps, 4)
assert.deepEqual(
visibleSteps.map((step) => step.label),
['直属领导审批', '财务审批', '待付款', '归档入账']
)
assert.equal(visibleSteps[1].current, true)
})
test('workbench summary builds real user notifications and progress from requests', () => {
const summary = buildWorkbenchSummary(
[
{
id: 'BX-001',
claimId: 'claim-1',
claimNo: 'BX-001',
person: '张三',
title: '差旅报销',
approvalKey: 'draft',
approvalStatus: '草稿',
status: 'draft',
amount: 1280,
createdAt: '2026-06-01T10:00:00+08:00',
updatedAt: '2026-06-01T10:10:00+08:00',
progressSteps: [
buildStep('创建单据', 0, 1),
buildStep('待提交', 1, 1),
buildStep('直属领导审批', 2, 1),
buildStep('财务审批', 3, 1),
buildStep('待付款', 4, 1)
]
},
{
id: 'BX-002',
claimId: 'claim-2',
claimNo: 'BX-002',
person: '李四',
title: '他人单据',
approvalKey: 'draft',
amount: 800,
progressSteps: []
}
],
currentUser
)
assert.equal(summary.todoItems.length, 1)
assert.equal(summary.todoItems[0].target.id, 'claim-1')
assert.equal(summary.progressItems.length, 1)
assert.deepEqual(
summary.progressItems[0].steps.map((step) => step.label),
['创建单据', '待提交', '直属领导审批', '财务审批']
)
assert.equal(summary.progressItems[0].expenseTypeLabel, '差旅交通')
assert.equal(summary.notifications.length, 1)
assert.equal(summary.unreadNotificationCount, 1)
assert.equal(summary.expenseStatsDetail.distributionRows[0].label, '差旅交通')
assert.equal(summary.expenseStatsDetail.distributionRows[0].count, 1)
assert.equal(summary.expenseStatsDetail.distributionRows[0].percentLabel, '100%')
assert.equal(summary.expenseStatsDetail.processingRows[0].requestId, 'BX-001')
assert.equal(summary.expenseStatsDetail.processingRows[0].durationLabel, '10分钟')
assert.equal(summary.expenseStatsDetail.processingRows[0].stepCount, 5)
assert.ok(summary.expenseStatsDetail.operationRows.some((item) => item.source === '待办'))
assert.ok(summary.expenseStatsDetail.operationRows.some((item) => item.source === '进度'))
})
test('workbench progress keeps application document type for AP claims', () => {
const summary = buildWorkbenchSummary(
[
{
id: 'AP-202606050001-ABCDEFGH',
claimId: 'application-1',
claimNo: 'AP-202606050001-ABCDEFGH',
person: currentUser.name,
title: '差旅费用',
approvalKey: 'in_progress',
approvalStatus: '直属领导审批',
amount: 1880,
createdAt: '2026-06-05T09:00:00+08:00',
updatedAt: '2026-06-05T09:10:00+08:00',
progressSteps: [
buildStep('创建申请', 0, 1),
buildStep('直属领导审批', 1, 1),
buildStep('归档', 2, 1)
]
},
{
id: 'REQ-APPLICATION-001',
claimId: 'application-2',
claimNo: 'REQ-APPLICATION-001',
documentTypeCode: 'application',
documentTypeLabel: '报销单',
person: currentUser.name,
title: '办公用品采购',
approvalKey: 'in_progress',
approvalStatus: '直属领导审批',
amount: 2600,
createdAt: '2026-06-05T09:05:00+08:00',
updatedAt: '2026-06-05T09:15:00+08:00',
progressSteps: [
buildStep('创建申请', 0, 1),
buildStep('直属领导审批', 1, 1),
buildStep('归档', 2, 1)
]
}
],
currentUser
)
assert.deepEqual(
summary.progressItems.map((item) => item.documentTypeLabel),
['申请单', '申请单']
)
})