文件
shanghaipeiwan/server/tests/finance.spec.ts

119 行
3.7 KiB
TypeScript

import { FinanceCalculator } from '../src/core/finance/finance.calculator';
describe('FinanceCalculator (TDD 测试套件: 财务与分销计算引擎)', () => {
let calculator: FinanceCalculator;
beforeEach(() => {
calculator = new FinanceCalculator();
});
describe('1. 平台抽成与大神分润计算', () => {
it('100元订单按10%抽成,平台得10元,大神得90元', () => {
const result = calculator.splitOrderIncome({
orderAmountCents: 10000, // 100.00 元
platformRatePercent: 10,
});
expect(result.platformFeeCents).toBe(1000); // 10.00 元
expect(result.expertIncomeCents).toBe(9000); // 90.00 元
expect(result.platformFeeCents + result.expertIncomeCents).toBe(10000);
});
it('出现小数分位时,向下取整平台抽成,保证资金平衡无漂移', () => {
const result = calculator.splitOrderIncome({
orderAmountCents: 3333, // 33.33 元
platformRatePercent: 15, // 15% -> 499.95 分
});
expect(result.platformFeeCents).toBe(499);
expect(result.expertIncomeCents).toBe(2834);
expect(result.platformFeeCents + result.expertIncomeCents).toBe(3333);
});
});
describe('2. 二级分销佣金分润计算', () => {
it('100元订单,一级分销商得5元,二级分销商得2元', () => {
const comm = calculator.calculateDistribution({
orderAmountCents: 10000,
level1Percent: 5,
level2Percent: 2,
hasLevel1: true,
hasLevel2: true,
});
expect(comm.level1Cents).toBe(500); // 5.00 元
expect(comm.level2Cents).toBe(200); // 2.00 元
expect(comm.totalCommissionCents).toBe(700);
});
it('只有一级推荐人时,仅发放一级佣金', () => {
const comm = calculator.calculateDistribution({
orderAmountCents: 20000,
level1Percent: 5,
level2Percent: 2,
hasLevel1: true,
hasLevel2: false,
});
expect(comm.level1Cents).toBe(1000);
expect(comm.level2Cents).toBe(0);
expect(comm.totalCommissionCents).toBe(1000);
});
});
describe('3. 优惠券抵扣计算', () => {
it('订单满100减20,实付80元', () => {
const payAmount = calculator.applyCoupon({
orderAmountCents: 10000,
couponDiscountCents: 2000,
minOrderThresholdCents: 8000,
});
expect(payAmount).toBe(8000);
});
it('未达到优惠券门槛时应抛出异常', () => {
expect(() => {
calculator.applyCoupon({
orderAmountCents: 5000, // 50元
couponDiscountCents: 2000,
minOrderThresholdCents: 8000, // 需满80元
});
}).toThrow('订单未达到优惠券使用门槛');
});
it('优惠券减免额大于订单总额时,实付金额应为0而不是负数', () => {
const payAmount = calculator.applyCoupon({
orderAmountCents: 3000,
couponDiscountCents: 5000,
minOrderThresholdCents: 0,
});
expect(payAmount).toBe(0);
});
});
describe('4. 提现门槛与手续费校验', () => {
it('低于最低提现额度(如50元)应抛出异常', () => {
expect(() => {
calculator.calculateWithdrawal({
withdrawAmountCents: 3000, // 30元
minLimitCents: 5000, // 最低50元
feePercent: 1,
});
}).toThrow('提现金额低于平台最低提现限额');
});
it('提现100元,手续费1%,实际打款99元', () => {
const res = calculator.calculateWithdrawal({
withdrawAmountCents: 10000,
minLimitCents: 5000,
feePercent: 1,
});
expect(res.feeCents).toBe(100);
expect(res.actualArrivalCents).toBe(9900);
});
});
});