完善企业编辑页面并修复采购建单重试
This commit is contained in:
@@ -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')), '账单结算 · 待审核')
|
||||
|
||||
Reference in New Issue
Block a user