92 lines
3.2 KiB
TypeScript
92 lines
3.2 KiB
TypeScript
import assert from 'node:assert/strict'
|
|
import test from 'node:test'
|
|
|
|
import {
|
|
canEditUserPaymentAmount,
|
|
getRewardAbovePayment,
|
|
getUserPaymentFen,
|
|
} from '../src/pages/admin/panels/work-order-payment.ts'
|
|
|
|
function orderWithPayment(paymentFen: number, rewardFen: number) {
|
|
return {
|
|
rewardAmount: rewardFen,
|
|
material: {
|
|
source: {
|
|
kuaishouSendCode: { paymentFen },
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
test('发单金额高于用户付款时返回两边金额', () => {
|
|
const loss = getRewardAbovePayment(orderWithPayment(900, 6800))
|
|
assert.ok(loss)
|
|
assert.equal(loss.paymentFen, 900)
|
|
assert.equal(loss.rewardFen, 6800)
|
|
})
|
|
|
|
test('发单金额不超过用户付款时不提示', () => {
|
|
assert.equal(getRewardAbovePayment(orderWithPayment(6800, 6800)), null)
|
|
assert.equal(getRewardAbovePayment(orderWithPayment(6800, 6700)), null)
|
|
})
|
|
|
|
test('用户付款未知时不参与超价提示', () => {
|
|
assert.equal(getRewardAbovePayment({ rewardAmount: 6800, material: {} }), null)
|
|
})
|
|
|
|
test('可传入即将保存的发单金额做预检', () => {
|
|
const order = orderWithPayment(900, 800)
|
|
assert.equal(getRewardAbovePayment(order), null)
|
|
assert.ok(getRewardAbovePayment(order, 1000))
|
|
})
|
|
|
|
test('getUserPaymentFen:送码实付优先,其次来源金额,最后派生列', () => {
|
|
assert.equal(
|
|
getUserPaymentFen({
|
|
material: { source: { orderAmountFen: 1000, kuaishouSendCode: { paymentFen: 900 } } },
|
|
sourceOrderAmount: 800,
|
|
}),
|
|
900,
|
|
)
|
|
assert.equal(
|
|
getUserPaymentFen({
|
|
material: { source: { orderAmountFen: 1000 } },
|
|
sourceOrderAmount: 800,
|
|
}),
|
|
1000,
|
|
)
|
|
assert.equal(getUserPaymentFen({ material: {}, sourceOrderAmount: 800 }), 800)
|
|
})
|
|
|
|
test('getUserPaymentFen:空值或非法值不误判成 0 元', () => {
|
|
assert.equal(getUserPaymentFen({ material: { source: { orderAmountFen: '' } } }), null)
|
|
assert.equal(getUserPaymentFen({ material: { source: { orderAmountFen: 'abc' } } }), null)
|
|
assert.equal(getUserPaymentFen({ material: {}, sourceOrderAmount: 0 }), null)
|
|
})
|
|
|
|
test('用户付款金额在待完善、待分配、待抢单可编辑', () => {
|
|
for (const status of ['pending_material', 'unassigned', 'open']) {
|
|
assert.equal(
|
|
canEditUserPaymentAmount({ status, rawStatus: status }),
|
|
true,
|
|
`${status} 应允许编辑用户付款金额`,
|
|
)
|
|
}
|
|
|
|
for (const status of ['in_progress', 'pending_acceptance', 'problem', 'accepted', 'cancelled']) {
|
|
assert.equal(
|
|
canEditUserPaymentAmount({ status, rawStatus: status }),
|
|
false,
|
|
`${status} 不应允许编辑用户付款金额`,
|
|
)
|
|
}
|
|
|
|
// 运营态优先:拼单母单 rawStatus 仍是 open,但满额后界面显示代练中/待验收,不能再改
|
|
assert.equal(canEditUserPaymentAmount({ status: 'in_progress', rawStatus: 'open' }), false)
|
|
assert.equal(canEditUserPaymentAmount({ status: 'pending_acceptance', rawStatus: 'open' }), false)
|
|
// 未满额时运营态仍是 open,继续允许
|
|
assert.equal(canEditUserPaymentAmount({ status: 'open', rawStatus: 'open' }), true)
|
|
// 老数据没有运营态时回退 rawStatus
|
|
assert.equal(canEditUserPaymentAmount({ status: '', rawStatus: 'pending_material' }), true)
|
|
})
|