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) })