完善企业编辑页面并修复采购建单重试

This commit is contained in:
2026-10-30 15:42:38 +08:00
parent d6ef770e48
commit 55868177cd
19 changed files with 568 additions and 224 deletions
@@ -261,6 +261,54 @@ test('unchanged create retries reuse the idempotency key', async () => {
} finally { harness.dispose() }
})
test('a lost create response recovers the original order after review releases its budget', async () => {
for (const status of ['RELEASE_PENDING', 'RELEASED', 'RELEASE_FAILED']) {
const budgetCalls = [], createCalls = []
let boundOrder = null
const budgets = moduleFrom(readFileSync(new URL('./api/orderBudgets.ts', import.meta.url), 'utf8'), name => {
assert.equal(name, '@/api/http')
return { apiRequest: async request => {
budgetCalls.push(normalized(request))
return boundOrder
? { status, usable: false, orderNo: boundOrder, message: '本次资金预占已释放,请重新下单' }
: { status: 'FROZEN', usable: true, orderNo: null }
} }
})
const harness = viewHarness({ createPage: true, api: {
requireOrderBudget: budgets.requireOrderBudget,
createProcurement: async payload => {
createCalls.push(normalized(payload))
if (!boundOrder) { boundOrder = 'CG-EXISTING'; throw new ApiError('timeout', 'TIMEOUT') }
assert.equal(payload.idempotencyKey, createCalls[0].idempotencyKey)
return { order: { orderNo: boundOrder } }
},
} })
try {
Object.assign(harness.state.form, draft())
await harness.state.submit()
assert.equal(harness.state.submitError.value, 'timeout')
await harness.state.submit()
assert.equal(createCalls.length, 2, status)
assert.equal(budgetCalls[0].url, budgetCalls[1].url)
assert.equal(harness.state.submitError.value, '')
assert.equal(harness.state.submittedOrder.value, 'CG-EXISTING')
assert.equal(harness.pushes[0].name, 'cross-border-procurement')
await harness.state.submit()
assert.equal(createCalls.length, 2)
} finally { harness.dispose() }
}
})
test('an unbound released or failed budget still blocks procurement and trucking submission', async () => {
for (const kind of ['procurement', 'trucking']) for (const status of ['FROZEN', 'RELEASE_PENDING', 'RELEASED', 'RELEASE_FAILED', 'FAILED']) {
const budgets = moduleFrom(readFileSync(new URL('./api/orderBudgets.ts', import.meta.url), 'utf8'), name => {
assert.equal(name, '@/api/http')
return { apiRequest: async () => ({ status, usable: false, orderNo: null, message: '资金校验失败' }) }
})
await assert.rejects(budgets.requireOrderBudget(kind, 'same-key', 100, 'USD'), /资金校验失败/)
}
})
test('bill-settled manual fees show review results without counting a balance debit', () => {
const bill = determination => ({ ...fee('OTHER', 'NOT_REQUIRED', '100'), determination })
assert.equal(presentation.feeStatus(bill('PENDING')), '账单结算 · 待审核')