@@ -2,6 +2,7 @@ import { describe, expect, it } from 'vitest';
|
||||
import {
|
||||
calcBenefitAmount,
|
||||
calcRedeemSettleAmount,
|
||||
resolveSettlementRate,
|
||||
calcLogisticsFeeByBottles,
|
||||
calcOrderBoxCount,
|
||||
shouldHoldAutoCourierDispatch,
|
||||
@@ -92,6 +93,7 @@ describe('validateRedeemAmount', () => {
|
||||
expect(validateRedeemAmount(100, 100).ok).toBe(true);
|
||||
expect(validateRedeemAmount(50, 60).ok).toBe(false);
|
||||
expect(validateRedeemAmount(100, 0).ok).toBe(false);
|
||||
expect(validateRedeemAmount(100, Number.NaN).ok).toBe(false);
|
||||
});
|
||||
|
||||
it('allows direct redeem up to total balance without a document cap', () => {
|
||||
@@ -114,6 +116,15 @@ describe('calcRedeemSettleAmount', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('resolveSettlementRate', () => {
|
||||
it('falls back to 0.6 when missing or invalid', () => {
|
||||
expect(resolveSettlementRate(0.6)).toBe(0.6);
|
||||
expect(resolveSettlementRate(0)).toBe(0.6);
|
||||
expect(resolveSettlementRate(Number.NaN)).toBe(0.6);
|
||||
expect(resolveSettlementRate(undefined)).toBe(0.6);
|
||||
});
|
||||
});
|
||||
|
||||
describe('calcLogisticsFeeByBottles', () => {
|
||||
const xfx = {
|
||||
baseBottles: 2,
|
||||
|
||||
@@ -33,14 +33,25 @@ export function validateMinPurchase(
|
||||
return { ok: true };
|
||||
}
|
||||
|
||||
export const DEFAULT_STORE_SETTLEMENT_RATE = 0.6;
|
||||
|
||||
export function resolveSettlementRate(raw: unknown): number {
|
||||
const n = Number(raw);
|
||||
return Number.isFinite(n) && n > 0 ? n : DEFAULT_STORE_SETTLEMENT_RATE;
|
||||
}
|
||||
|
||||
export function validateRedeemAmount(
|
||||
balance: number,
|
||||
amount: number,
|
||||
documentAmount?: number | null,
|
||||
): { ok: boolean; message?: string } {
|
||||
if (amount <= 0) return { ok: false, message: '核销金额必须大于 0' };
|
||||
if (amount > balance) return { ok: false, message: '核销金额不能超过可用余额' };
|
||||
if (documentAmount != null && amount > documentAmount) {
|
||||
if (!Number.isFinite(amount) || amount <= 0) {
|
||||
return { ok: false, message: '核销金额必须大于 0' };
|
||||
}
|
||||
if (!Number.isFinite(balance) || amount > balance) {
|
||||
return { ok: false, message: '核销金额不能超过可用余额' };
|
||||
}
|
||||
if (documentAmount != null && Number.isFinite(documentAmount) && amount > documentAmount) {
|
||||
return { ok: false, message: '核销金额不能超过该核销单可用金额' };
|
||||
}
|
||||
return { ok: true };
|
||||
|
||||
Reference in New Issue
Block a user