package com.ruoyi.order.service.impl; import com.ruoyi.order.api.model.TChargingOrderRefund; import org.junit.jupiter.api.Test; import java.math.BigDecimal; import java.util.Arrays; import java.util.Collections; import static org.junit.jupiter.api.Assertions.assertEquals; class TChargingOrderServiceImplRefundableAmountTest { @Test void completionRefundDoesNotReduceManualRefundableAmount() { TChargingOrderRefund completionRefund = refund("充电完成退款", "2.25"); BigDecimal refundableAmount = TChargingOrderServiceImpl.calculateManualRefundableAmount( new BigDecimal("26.75"), Collections.singletonList(completionRefund)); assertEquals(new BigDecimal("26.75"), refundableAmount); } @Test void onlySuccessfulManualRefundReducesManualRefundableAmount() { TChargingOrderRefund completionRefund = refund("充电完成退款", "2.25"); TChargingOrderRefund manualRefund = refund("后台退款", "5.00"); BigDecimal refundableAmount = TChargingOrderServiceImpl.calculateManualRefundableAmount( new BigDecimal("26.75"), Arrays.asList(completionRefund, manualRefund)); assertEquals(new BigDecimal("21.75"), refundableAmount); } @Test void specialRefundForCombinedPaymentOnlyUsesThirdPartyAmount() { BigDecimal refundableAmount = TChargingOrderServiceImpl.calculateSpecialRefundableAmount( new BigDecimal("4.00"), new BigDecimal("2.00"), BigDecimal.ZERO); assertEquals(new BigDecimal("2.00"), refundableAmount); } @Test void previousThirdPartyRefundReducesSpecialRefundableAmount() { BigDecimal refundableAmount = TChargingOrderServiceImpl.calculateSpecialRefundableAmount( new BigDecimal("4.00"), new BigDecimal("2.00"), new BigDecimal("0.50")); assertEquals(new BigDecimal("1.50"), refundableAmount); } private TChargingOrderRefund refund(String title, String amount) { TChargingOrderRefund refund = new TChargingOrderRefund(); refund.setRefundTitle(title); refund.setRefundAmount(new BigDecimal(amount)); return refund; } }