Files
X-Financial/web/tests/expense-claim-attachment-sync.test.mjs
2026-06-22 11:58:53 +08:00

55 lines
1.8 KiB
JavaScript

import test from 'node:test'
import assert from 'node:assert/strict'
import { syncExpenseClaimFilesToDraft } from '../src/utils/expenseClaimAttachmentSync.js'
function createFile(name) {
return { name }
}
test('自动归集附件时优先上传到空附件明细项', async () => {
const uploads = []
const result = await syncExpenseClaimFilesToDraft({
claimId: 'claim-1',
files: [createFile('2月20 武汉-上海.pdf'), createFile('2月23 上海-武汉.pdf')],
fetchExpenseClaimDetail: async () => ({
items: [
{ id: 'item-1', invoice_id: '' },
{ id: 'item-2', invoice_id: '' }
]
}),
createExpenseClaimItem: async () => ({ items: [] }),
uploadExpenseClaimItemAttachment: async (claimId, itemId, file) => {
uploads.push({ claimId, itemId, fileName: file.name })
}
})
assert.equal(result.uploadedCount, 2)
assert.equal(result.skippedCount, 0)
assert.deepEqual(uploads, [
{ claimId: 'claim-1', itemId: 'item-1', fileName: '2月20 武汉-上海.pdf' },
{ claimId: 'claim-1', itemId: 'item-2', fileName: '2月23 上海-武汉.pdf' }
])
})
test('已有明细不足时自动创建明细再上传附件', async () => {
const uploads = []
const result = await syncExpenseClaimFilesToDraft({
claimId: 'claim-1',
files: [createFile('补充票据.pdf')],
fetchExpenseClaimDetail: async () => ({ items: [] }),
createExpenseClaimItem: async () => ({
items: [{ id: 'created-item-1', invoice_id: '' }]
}),
uploadExpenseClaimItemAttachment: async (claimId, itemId, file) => {
uploads.push({ claimId, itemId, fileName: file.name })
}
})
assert.equal(result.uploadedCount, 1)
assert.equal(result.skippedCount, 0)
assert.deepEqual(uploads, [
{ claimId: 'claim-1', itemId: 'created-item-1', fileName: '补充票据.pdf' }
])
})