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