Files
X-Financial/web/tests/document-center-new-state.test.mjs
caoxiaozhu ca691f3ee0 feat: 优化差旅报销预审流程与个人工作台 UI 体系
- 完善 user_agent_application 申请差旅报销预审槽位与消息组装
- 增强预算助理报告与风险建议卡片交互
- 重构登录页视觉样式与移动端响应式适配
- 优化个人工作台、文档中心、政策中心、员工管理等页面布局
- 拆分 travelRequestDetailPreReviewModel 为 advice/submit 模型
- 补充报销草稿、风险复核、Item Sync 与模板执行器测试覆盖
2026-06-02 14:01:51 +08:00

86 lines
3.0 KiB
JavaScript

import assert from 'node:assert/strict'
import test from 'node:test'
import {
countNewDocuments,
isNewDocument,
markDocumentViewed,
readDocumentScope,
readViewedDocumentKeys,
resolveDocumentNewKey,
writeDocumentScope
} from '../src/utils/documentCenterNewState.js'
import { buildDocumentInboxRows } from '../src/composables/useDocumentCenterInbox.js'
function createMemoryStorage(initial = {}) {
const store = new Map(Object.entries(initial))
return {
getItem(key) {
return store.has(key) ? store.get(key) : null
},
setItem(key, value) {
store.set(key, value)
}
}
}
test('document center new state resolves source scoped document keys', () => {
assert.equal(resolveDocumentNewKey({ source: 'archive', claimId: 'claim-1' }), 'archive:claim-1')
assert.equal(resolveDocumentNewKey({ source: 'approval', documentNo: 'EXP-1' }), 'approval:EXP-1')
})
test('document center new state counts unseen documents and persists viewed rows', () => {
const storage = createMemoryStorage()
const rows = [
{ source: 'owned', claimId: 'claim-1' },
{ source: 'approval', claimId: 'claim-2' }
]
let viewedKeys = readViewedDocumentKeys(storage)
assert.equal(countNewDocuments(rows, viewedKeys), 2)
assert.equal(isNewDocument(rows[0], viewedKeys), true)
viewedKeys = markDocumentViewed(rows[0], viewedKeys, storage)
assert.equal(countNewDocuments(rows, viewedKeys), 1)
assert.equal(isNewDocument(rows[0], viewedKeys), false)
assert.deepEqual([...readViewedDocumentKeys(storage)], ['owned:claim-1'])
})
test('document center archive rows are never marked as new', () => {
const viewedKeys = readViewedDocumentKeys(createMemoryStorage())
const rows = [
{ source: 'archive', claimId: 'archived-1' },
{ archived: true, source: 'owned', claimId: 'archived-2' },
{ isNewDocument: false, source: 'owned', claimId: 'archived-3' }
]
assert.equal(countNewDocuments(rows, viewedKeys), 0)
assert.equal(isNewDocument(rows[0], viewedKeys), false)
assert.equal(isNewDocument(rows[1], viewedKeys), false)
assert.equal(isNewDocument(rows[2], viewedKeys), false)
})
test('document center sidebar inbox shares source scoped document keys', () => {
const rows = buildDocumentInboxRows({
ownedClaims: [{ id: 'claim-1', claim_no: 'EXP-1' }],
approvalClaims: [{ id: 'claim-1', claim_no: 'EXP-1' }],
archivedClaims: [{ id: 'claim-2', claim_no: 'EXP-2' }]
})
assert.deepEqual(rows.map((row) => resolveDocumentNewKey(row)), ['approval:claim-1', 'archive:claim-2'])
})
test('document center scope state restores only allowed tabs', () => {
const storage = createMemoryStorage()
const scopes = ['全部', '申请单', '报销单', '审核单', '归档']
assert.equal(readDocumentScope('全部', scopes, storage), '全部')
writeDocumentScope('归档', scopes, storage)
assert.equal(readDocumentScope('全部', scopes, storage), '归档')
writeDocumentScope('不存在', scopes, storage)
assert.equal(readDocumentScope('全部', scopes, storage), '归档')
})