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