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;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
class ChargingCouponSupportTest {
|
|
@Test
|
void fullReductionDiscountsThePrepaymentBeforeThirdPartyPay() {
|
TCoupon coupon = chargingCoupon(1);
|
coupon.setMeetTheConditions(new BigDecimal("3"));
|
coupon.setDiscountAmount(new BigDecimal("1"));
|
|
BigDecimal discount = ChargingCouponSupport.calculateUpfrontDiscount(coupon, new BigDecimal("3"));
|
|
assertEquals(new BigDecimal("1.00"), discount);
|
assertEquals(new BigDecimal("2.00"), new BigDecimal("3").subtract(discount));
|
}
|
|
@Test
|
void percentageDiscountHonorsMaximumDiscount() {
|
TCoupon coupon = chargingCoupon(2);
|
coupon.setMeetTheConditions(new BigDecimal("10"));
|
coupon.setDiscount(new BigDecimal("8"));
|
coupon.setMaximumDiscountAmount(new BigDecimal("1.50"));
|
|
BigDecimal discount = ChargingCouponSupport.calculateUpfrontDiscount(coupon, new BigDecimal("10"));
|
|
assertEquals(new BigDecimal("1.50"), discount);
|
}
|
|
@Test
|
void rejectsPrepaymentBelowCouponThreshold() {
|
TCoupon coupon = chargingCoupon(1);
|
coupon.setMeetTheConditions(new BigDecimal("3"));
|
coupon.setDiscountAmount(new BigDecimal("1"));
|
|
IllegalArgumentException error = assertThrows(IllegalArgumentException.class,
|
() -> ChargingCouponSupport.calculateUpfrontDiscount(coupon, new BigDecimal("2.99")));
|
|
assertEquals("预付金额未达到优惠券使用门槛", error.getMessage());
|
}
|
|
private TCoupon chargingCoupon(int preferentialMode) {
|
TCoupon coupon = new TCoupon();
|
coupon.setType(1);
|
coupon.setPreferentialMode(preferentialMode);
|
return coupon;
|
}
|
}
|