yanderong
2026-09-16 d4d70fe3a3a20f5fc29c9f37a1f89854a376597f
ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/service/impl/TChargingOrderPaymentConfirmationTest.java
@@ -1,17 +1,24 @@
package com.ruoyi.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.chargingPile.api.model.TAccountingStrategy;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.order.mapper.TChargingOrderMapper;
import com.ruoyi.other.api.domain.TVip;
import com.ruoyi.payment.api.feignClient.IcbcPaymentClient;
import com.ruoyi.payment.api.vo.IcbcPaymentResp;
import com.ruoyi.system.api.model.LoginUserApplet;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.apache.ibatis.builder.MapperBuilderAssistant;
import org.springframework.test.util.ReflectionTestUtils;
import java.math.BigDecimal;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -19,6 +26,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -35,6 +43,7 @@
    @BeforeEach
    void setUp() {
        TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), TChargingOrder.class);
        service = spy(new TChargingOrderServiceImpl());
        TokenService tokenService = mock(TokenService.class);
        icbcPaymentClient = mock(IcbcPaymentClient.class);
@@ -77,6 +86,56 @@
        verify(service, never()).chargingOrderCallback(eq(1), eq(ORDER_CODE), any(), eq("1"));
    }
    @Test
    void localBalancePaymentUsesSavedOrderWithoutImmediateReadBack() {
        TChargingOrderMapper mapper = mock(TChargingOrderMapper.class);
        ReflectionTestUtils.setField(service, "baseMapper", mapper);
        TChargingOrder order = new TChargingOrder();
        order.setId(9001L);
        order.setCode("CD-BALANCE-WHITELIST");
        order.setRechargePaymentStatus(1);
        when(mapper.update(isNull(), any(Wrapper.class))).thenReturn(0);
        AjaxResult result = service.completeChargingOrderPayment(order, "WHITELIST");
        assertEquals(200, result.get("code"));
        verify(service, never()).getOne(any(Wrapper.class));
        verify(mapper).update(isNull(), any(Wrapper.class));
    }
    @Test
    void internalMemberEightZheIsStoredAsPointEight() {
        TVip vip = new TVip();
        vip.setType(2);
        vip.setDiscount(new BigDecimal("8"));
        BigDecimal discount = service.resolveChargingVipDiscount(vip, null);
        assertEquals(0, discount.compareTo(new BigDecimal("0.8")));
    }
    @Test
    void regularMemberKeepsAccountingStrategyFactor() {
        TVip vip = new TVip();
        vip.setType(1);
        TAccountingStrategy strategy = new TAccountingStrategy();
        strategy.setDiscount(new BigDecimal("0.85"));
        BigDecimal discount = service.resolveChargingVipDiscount(vip, strategy);
        assertEquals(0, discount.compareTo(new BigDecimal("0.85")));
    }
    @Test
    void zeroDiscountAmountDoesNotConsumeMemberUse() {
        assertFalse(service.shouldConsumeVipDiscount(BigDecimal.ZERO));
    }
    @Test
    void positiveDiscountAmountConsumesMemberUse() {
        assertTrue(service.shouldConsumeVipDiscount(new BigDecimal("1.25")));
    }
    private TChargingOrder pendingIcbcOrder() {
        TChargingOrder order = new TChargingOrder();
        order.setCode(ORDER_CODE);