Files
order_site/apps/frontend/tests/work-order-payment-loss.test.ts

94 lines
2.9 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('用户付款金额仅在待完善(pending_material)可编辑', () => {
assert.equal(canEditUserPaymentAmount({ status: 'pending_material' }), true)
assert.equal(
canEditUserPaymentAmount({ status: 'pending_material', rawStatus: 'pending_material' }),
true,
)
for (const status of [
'unassigned',
'open',
'in_progress',
'pending_acceptance',
'problem',
'accepted',
'cancelled',
]) {
assert.equal(
canEditUserPaymentAmount({ status, rawStatus: status }),
false,
`${status} 不应允许编辑用户付款金额`,
)
}
// rawStatus 是后端原始状态,优先级高于运营态 status
assert.equal(canEditUserPaymentAmount({ status: 'open', rawStatus: 'pending_material' }), true)
assert.equal(canEditUserPaymentAmount({ status: 'pending_material', rawStatus: 'open' }), false)
})