fix: harden ticket model edge cases
This commit is contained in:
1 parent
cb8cbb66f7
commit
516a9431f0
2 files changed
+26
-5
No files matched your search
@@ -125,6 +125,7 @@ test('validates booking draft fields and selected travelers in order', () => {
|
||||
|
||||
assert.equal(validateBooking({ product: adultProduct, draft: { ...completeDraft, timeSlot: '' }, travelers: [eligibleTraveler] }), '请选择使用场次')
|
||||
assert.equal(validateBooking({ product: adultProduct, draft: { ...completeDraft, quantity: 0 }, travelers: [eligibleTraveler] }), '购买数量无效')
|
||||
assert.equal(validateBooking({ product: adultProduct, draft: { ...completeDraft, maxQuantity: 0 }, travelers: [eligibleTraveler] }), '购买数量无效')
|
||||
assert.equal(validateBooking({ product: adultProduct, draft: { ...completeDraft, travelerIds: [] }, travelers: [eligibleTraveler] }), '请选择足够数量的出行人')
|
||||
assert.equal(validateBooking({ product: adultProduct, draft: { ...completeDraft, quantity: 2, travelerIds: ['t-1', 't-1'] }, travelers: [eligibleTraveler] }), '请选择足够数量的出行人')
|
||||
assert.equal(validateBooking({ product: adultProduct, draft: completeDraft, travelers: [incompleteTraveler] }), '请完善出行人实名信息')
|
||||
@@ -213,6 +214,15 @@ test('creates a paid order with entitlements and credentials', () => {
|
||||
{ id: 'shuttle', name: '观光车票', fulfillment: 'self', quantity: 1, unit: '张', refundAllocation: 40 },
|
||||
])
|
||||
assert.deepEqual(insuredOrder.insurance, { name: '出行意外险', price: 5, quantity: 2, status: 'active' })
|
||||
|
||||
const zeroQuantityOrder = createPaidOrder({
|
||||
product: { ...adultProduct, entitlements: [{ ...adultProduct.entitlements[0], quantity: 0 }] },
|
||||
draft: { ...createBookingDraft(adultProduct), quantity: 2 },
|
||||
travelers: [],
|
||||
now,
|
||||
})
|
||||
|
||||
assert.equal(zeroQuantityOrder.entitlements[0].quantity, 0)
|
||||
})
|
||||
|
||||
test('applies refunds and pops view history without mutation', () => {
|
||||
@@ -230,6 +240,7 @@ test('applies refunds and pops view history without mutation', () => {
|
||||
})
|
||||
const entitlementId = order.entitlements[0].id
|
||||
const history = ['home', 'detail', 'booking']
|
||||
const originalOrder = structuredClone(order)
|
||||
|
||||
assert.equal(calculateRefundAmount(order, [entitlementId]), 120)
|
||||
|
||||
@@ -237,10 +248,16 @@ test('applies refunds and pops view history without mutation', () => {
|
||||
assert.equal(result.order.status, 'refunding')
|
||||
assert.equal(result.refund.amount, 120)
|
||||
assert.equal(result.order.entitlements[0].status, 'refunding')
|
||||
assert.deepEqual(order, originalOrder)
|
||||
assert.notEqual(result.order.entitlements, order.entitlements)
|
||||
assert.notEqual(result.order.logs, order.logs)
|
||||
assert.deepEqual(result.order.logs.at(-1), { time: '2026-07-30 10:01:00', text: '已申请退款', operator: '用户' })
|
||||
const repeatedRefund = applyRefund(result.order, [entitlementId, 'missing-entitlement'], '重复申请')
|
||||
assert.equal(repeatedRefund.refund.amount, 0)
|
||||
assert.deepEqual(repeatedRefund.refund.entitlementIds, [])
|
||||
assert.equal(repeatedRefund.order, result.order)
|
||||
assert.equal(repeatedRefund.refund, null)
|
||||
const emptyRefund = applyRefund(order, [], '空申请')
|
||||
assert.equal(emptyRefund.order, order)
|
||||
assert.equal(emptyRefund.refund, null)
|
||||
assert.deepEqual(popViewHistory(history), { view: 'booking', history: ['home', 'detail'] })
|
||||
assert.deepEqual(history, ['home', 'detail', 'booking'])
|
||||
assert.deepEqual(popViewHistory([]), { view: 'home', history: [] })
|
||||
|
||||
Reference in new issue
Block a user