package com.ruoyi.order.service.impl;
|
|
import com.ruoyi.other.api.domain.TCoupon;
|
import org.junit.jupiter.api.Test;
|
|
import java.math.BigDecimal;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
class ChargingCouponSupportTest {
|
|
@Test
|
void couponDoesNotReducePrepayment() {
|
TCoupon coupon = chargingCoupon(1);
|
coupon.setMeetTheConditions(new BigDecimal("30"));
|
coupon.setDiscountAmount(new BigDecimal("10"));
|
|
BigDecimal paymentAmount = ChargingCouponSupport.calculatePrepaymentAmount(new BigDecimal("30"), false);
|
|
assertEquals(new BigDecimal("30.00"), paymentAmount);
|
}
|
|
@Test
|
void legacyUpfrontDiscountOrderUsesActuallyCollectedAmountAsRefundBase() {
|
BigDecimal prepayment = ChargingCouponSupport.resolveSettlementPrepayment(
|
new BigDecimal("30"), BigDecimal.ZERO, new BigDecimal("20"), new BigDecimal("10"));
|
|
assertEquals(new BigDecimal("20"), prepayment);
|
}
|
|
@Test
|
void fullReductionCannotDiscountElectricity() {
|
TCoupon coupon = chargingCoupon(1);
|
coupon.setMeetTheConditions(new BigDecimal("10"));
|
coupon.setDiscountAmount(new BigDecimal("10"));
|
|
BigDecimal discount = ChargingCouponSupport.calculateSettlementDiscount(
|
coupon, new BigDecimal("15"), new BigDecimal("3"));
|
|
assertEquals(new BigDecimal("3.0000"), discount);
|
}
|
|
@Test
|
void percentageDiscountHonorsMaximumDiscountAndServiceCharge() {
|
TCoupon coupon = chargingCoupon(2);
|
coupon.setMeetTheConditions(new BigDecimal("10"));
|
coupon.setDiscount(new BigDecimal("8"));
|
coupon.setMaximumDiscountAmount(new BigDecimal("1.50"));
|
|
BigDecimal discount = ChargingCouponSupport.calculateSettlementDiscount(
|
coupon, new BigDecimal("10"), new BigDecimal("5"));
|
|
assertEquals(new BigDecimal("1.5000"), discount);
|
}
|
|
@Test
|
void couponBelowActualSettlementThresholdIsNotUsed() {
|
TCoupon coupon = chargingCoupon(1);
|
coupon.setMeetTheConditions(new BigDecimal("30"));
|
coupon.setDiscountAmount(new BigDecimal("1"));
|
|
BigDecimal discount = ChargingCouponSupport.calculateSettlementDiscount(
|
coupon, new BigDecimal("29.99"), new BigDecimal("5"));
|
|
assertEquals(new BigDecimal("0.0000"), discount);
|
}
|
|
@Test
|
void nonFullWhitelistOnlyWaivesServiceCharge() {
|
BigDecimal[] split = ChargingCouponSupport.calculateWhitelistRefundSplit(
|
true, false, new BigDecimal("10"), new BigDecimal("5"));
|
|
assertEquals(BigDecimal.ZERO, split[0]);
|
assertEquals(new BigDecimal("5"), split[1]);
|
}
|
|
@Test
|
void fullWhitelistWaivesElectricityAndServiceCharge() {
|
BigDecimal[] split = ChargingCouponSupport.calculateWhitelistRefundSplit(
|
true, true, new BigDecimal("10"), new BigDecimal("5"));
|
|
assertEquals(new BigDecimal("10"), split[0]);
|
assertEquals(new BigDecimal("5"), split[1]);
|
}
|
|
private TCoupon chargingCoupon(int preferentialMode) {
|
TCoupon coupon = new TCoupon();
|
coupon.setType(1);
|
coupon.setPreferentialMode(preferentialMode);
|
return coupon;
|
}
|
}
|