Files
order_site/apps/backend/src/domain/work-order-sharing-part-cancel.test.ts
T

104 lines
2.9 KiB
TypeScript

import assert from 'node:assert/strict'
import test from 'node:test'
import {
resolveSharingPartCancelPlan,
resolveSharingPartCancelRefund,
} from './work-order-sharing-part-cancel.js'
test('取消部分:保留已验收份数,取消进行中 + 待接单份数', () => {
const plan = resolveSharingPartCancelPlan({
workOrderStatus: 'open',
totalQuantity: 10,
acceptedQuantity: 8,
})
assert.deepEqual(plan, { nextTotalQuantity: 8, cancelledQuantity: 2, failureReason: null })
})
test('取消部分:一份都没验收时整单取消(总量归零)', () => {
const plan = resolveSharingPartCancelPlan({
workOrderStatus: 'pending_acceptance',
totalQuantity: 10,
acceptedQuantity: 0,
})
assert.deepEqual(plan, { nextTotalQuantity: 0, cancelledQuantity: 10, failureReason: null })
})
test('取消部分:全部份额已验收时没有可取消份数', () => {
const plan = resolveSharingPartCancelPlan({
workOrderStatus: 'accepted',
totalQuantity: 8,
acceptedQuantity: 8,
})
// accepted 不在允许状态里,优先报状态非法
assert.equal(plan.failureReason, 'status_invalid')
const openPlan = resolveSharingPartCancelPlan({
workOrderStatus: 'open',
totalQuantity: 8,
acceptedQuantity: 8,
})
assert.deepEqual(openPlan, {
nextTotalQuantity: 8,
cancelledQuantity: 0,
failureReason: 'nothing_to_cancel',
})
})
test('取消部分:问题单允许操作,已取消/已验收单不允许', () => {
assert.equal(
resolveSharingPartCancelPlan({
workOrderStatus: 'problem',
totalQuantity: 3,
acceptedQuantity: 1,
}).failureReason,
null,
)
for (const status of ['cancelled', 'accepted', 'unassigned']) {
assert.equal(
resolveSharingPartCancelPlan({
workOrderStatus: status,
totalQuantity: 3,
acceptedQuantity: 0,
}).failureReason,
'status_invalid',
)
}
})
test('取消部分:已验收份数异常时按总量截断', () => {
const plan = resolveSharingPartCancelPlan({
workOrderStatus: 'open',
totalQuantity: 5,
acceptedQuantity: 9,
})
assert.deepEqual(plan, {
nextTotalQuantity: 5,
cancelledQuantity: 0,
failureReason: 'nothing_to_cancel',
})
})
test('取消部分退款:按实付金额比例计算并四舍五入到分', () => {
assert.equal(
resolveSharingPartCancelRefund({
paidAmountFen: 20000,
totalQuantity: 10,
cancelledQuantity: 9,
}),
18000,
)
assert.equal(
resolveSharingPartCancelRefund({ paidAmountFen: 999, totalQuantity: 3, cancelledQuantity: 1 }),
333,
)
assert.equal(
resolveSharingPartCancelRefund({ paidAmountFen: 0, totalQuantity: 10, cancelledQuantity: 10 }),
0,
)
// 取消份数超过总量时按总量截断
assert.equal(
resolveSharingPartCancelRefund({ paidAmountFen: 5000, totalQuantity: 5, cancelledQuantity: 8 }),
5000,
)
})