From 24681c81c09022f584a57006f2534b5f74723414 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 30 六月 2026 09:27:31 +0800
Subject: [PATCH] 初始化项目
---
yudao-module-mall/yudao-module-trade/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImplTest.java | 200 ++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 170 insertions(+), 30 deletions(-)
diff --git a/yudao-module-mall/yudao-module-trade/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImplTest.java b/yudao-module-mall/yudao-module-trade/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImplTest.java
index 141e865..abdd4e8 100644
--- a/yudao-module-mall/yudao-module-trade/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImplTest.java
+++ b/yudao-module-mall/yudao-module-trade/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImplTest.java
@@ -1,36 +1,42 @@
package cn.iocoder.yudao.module.trade.service.brokerage;
+import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.NumberUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
+import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;
+import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;
+import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
+import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.record.BrokerageRecordPageReqVO;
+import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.record.AppBrokerageProductPriceRespVO;
import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageRecordDO;
+import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO;
import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.BrokerageRecordMapper;
+import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
+import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum;
import cn.iocoder.yudao.module.trade.service.config.TradeConfigService;
import jakarta.annotation.Resource;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.bean.override.mockito.MockitoBean;
import java.math.RoundingMode;
-import static cn.hutool.core.util.RandomUtil.randomEle;
-import static cn.hutool.core.util.RandomUtil.randomInt;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;
+import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
-import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomInteger;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.when;
-// TODO @鑺嬭壙锛氬崟娴嬪悗缁湅鐪�
/**
* {@link BrokerageRecordServiceImpl} 鐨勫崟鍏冩祴璇曠被
*
* @author owen
*/
-@Disabled // TODO 鑺嬭壙锛氬悗缁� fix 琛ュ厖鐨勫崟娴�
@Import(BrokerageRecordServiceImpl.class)
public class BrokerageRecordServiceImplTest extends BaseDbUnitTest {
@@ -43,31 +49,43 @@
private TradeConfigService tradeConfigService;
@MockitoBean
private BrokerageUserService brokerageUserService;
+ @MockitoBean
+ private ProductSpuApi productSpuApi;
+ @MockitoBean
+ private ProductSkuApi productSkuApi;
@Test
- @Disabled // TODO 璇蜂慨鏀� null 涓洪渶瑕佺殑鍊硷紝鐒跺悗鍒犻櫎 @Disabled 娉ㄨВ
public void testGetBrokerageRecordPage() {
// mock 鏁版嵁
BrokerageRecordDO dbBrokerageRecord = randomPojo(BrokerageRecordDO.class, o -> { // 绛変細鏌ヨ鍒�
- o.setUserId(null);
- o.setBizType(null);
- o.setStatus(null);
- o.setCreateTime(null);
+ o.setUserId(1L);
+ o.setBizType(BrokerageRecordBizTypeEnum.ORDER.getType());
+ o.setStatus(BrokerageRecordStatusEnum.SETTLEMENT.getStatus());
+ o.setSourceUserLevel(1);
+ o.setSourceUserId(100L);
+ o.setCreateTime(buildTime(2023, 2, 10));
+ o.setDeleted(false);
});
brokerageRecordMapper.insert(dbBrokerageRecord);
// 娴嬭瘯 userId 涓嶅尮閰�
- brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord, o -> o.setUserId(null)));
+ brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord, o -> o.setUserId(2L)));
// 娴嬭瘯 bizType 涓嶅尮閰�
- brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord, o -> o.setBizType(null)));
+ brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord,
+ o -> o.setBizType(BrokerageRecordBizTypeEnum.WITHDRAW.getType())));
// 娴嬭瘯 status 涓嶅尮閰�
- brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord, o -> o.setStatus(null)));
+ brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord,
+ o -> o.setStatus(BrokerageRecordStatusEnum.CANCEL.getStatus())));
+ // 娴嬭瘯 sourceUserLevel 涓嶅尮閰�
+ brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord, o -> o.setSourceUserLevel(2)));
// 娴嬭瘯 createTime 涓嶅尮閰�
- brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord, o -> o.setCreateTime(null)));
+ brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord,
+ o -> o.setCreateTime(buildTime(2023, 3, 1))));
// 鍑嗗鍙傛暟
BrokerageRecordPageReqVO reqVO = new BrokerageRecordPageReqVO();
- reqVO.setUserId(null);
- reqVO.setBizType(null);
- reqVO.setStatus(null);
+ reqVO.setUserId(1L);
+ reqVO.setBizType(BrokerageRecordBizTypeEnum.ORDER.getType());
+ reqVO.setStatus(BrokerageRecordStatusEnum.SETTLEMENT.getStatus());
+ reqVO.setSourceUserLevel(1);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 璋冪敤
@@ -81,37 +99,159 @@
@Test
public void testCalculatePrice_useFixedPrice() {
// mock 鏁版嵁
- Integer payPrice = randomInteger();
- Integer percent = randomInt(1, 101);
- Integer fixedPrice = randomInt();
+ Integer payPrice = 1000;
+ Integer percent = 10;
+ Integer fixedPrice = 88;
// 璋冪敤
int brokerage = brokerageRecordService.calculatePrice(payPrice, percent, fixedPrice);
// 鏂█
- assertEquals(brokerage, fixedPrice);
+ assertEquals(fixedPrice, brokerage);
}
@Test
public void testCalculatePrice_usePercent() {
- // mock 鏁版嵁
- Integer payPrice = randomInteger();
- Integer percent = randomInt(1, 101);
- Integer fixedPrice = randomEle(new Integer[]{0, null});
- System.out.println("fixedPrice=" + fixedPrice);
+ // mock 鏁版嵁锛歠ixedPrice 涓� null 鏃讹紝鎸夋瘮渚嬭绠椾剑閲�
+ Integer payPrice = 1000;
+ Integer percent = 10;
+ Integer fixedPrice = null;
// 璋冪敤
int brokerage = brokerageRecordService.calculatePrice(payPrice, percent, fixedPrice);
// 鏂█
- assertEquals(brokerage, NumberUtil.div(NumberUtil.mul(payPrice, percent), 100, 0, RoundingMode.DOWN).intValue());
+ assertEquals(NumberUtil.div(NumberUtil.mul(payPrice, percent), 100, 0,
+ RoundingMode.DOWN).intValue(), brokerage);
+ }
+
+ @Test
+ public void testCalculatePrice_fixedPriceIsZero() {
+ // mock 鏁版嵁锛歠ixedPrice 涓� 0 鏃讹紝浠嶄娇鐢ㄥ浐瀹氫剑閲戯紝涓嶅洖閫�鍒版瘮渚嬭绠�
+ Integer payPrice = 1000;
+ Integer percent = 10;
+ Integer fixedPrice = 0;
+ // 璋冪敤
+ int brokerage = brokerageRecordService.calculatePrice(payPrice, percent, fixedPrice);
+ // 鏂█
+ assertEquals(0, brokerage);
}
@Test
public void testCalculatePrice_equalsZero() {
- // mock 鏁版嵁
+ // mock 鏁版嵁锛氫笁涓弬鏁板潎鏃犳晥鏃讹紝杩斿洖 0
Integer payPrice = null;
Integer percent = null;
Integer fixedPrice = null;
// 璋冪敤
int brokerage = brokerageRecordService.calculatePrice(payPrice, percent, fixedPrice);
// 鏂█
- assertEquals(brokerage, 0);
+ assertEquals(0, brokerage);
+ }
+
+ @Test
+ public void testCalculateProductBrokeragePrice_globalPercent() {
+ // mock锛氬垎閿�鍔熻兘宸插紑鍚紝姣斾緥 10%锛屽綋鍓嶇敤鎴锋湁鍒嗛攢璧勬牸
+ TradeConfigDO tradeConfig = new TradeConfigDO();
+ tradeConfig.setBrokerageEnabled(true);
+ tradeConfig.setBrokerageFirstPercent(10);
+ when(tradeConfigService.getTradeConfig()).thenReturn(tradeConfig);
+ when(brokerageUserService.getUserBrokerageEnabled(100L)).thenReturn(true);
+
+ // mock锛氬晢鍝佹湭寮�鍚嫭绔嬪垎閿�锛坰ubCommissionType = false锛夛紝SKU 鍞环 1000 鍒�
+ ProductSpuRespDTO spu = new ProductSpuRespDTO();
+ spu.setSubCommissionType(false);
+ when(productSpuApi.getSpu(1L)).thenReturn(spu);
+
+ ProductSkuRespDTO sku = new ProductSkuRespDTO();
+ sku.setPrice(1000);
+ when(productSkuApi.getSkuListBySpuId(ListUtil.of(1L))).thenReturn(ListUtil.of(sku));
+
+ // 璋冪敤
+ AppBrokerageProductPriceRespVO result = brokerageRecordService.calculateProductBrokeragePrice(100L, 1L);
+
+ // 鏂█锛氭寜 10% 姣斾緥璁$畻锛�1000 * 10% = 100 鍒嗭紙鍚戜笅鍙栨暣锛�
+ assertTrue(result.getEnabled());
+ assertEquals(100, result.getBrokerageMinPrice());
+ assertEquals(100, result.getBrokerageMaxPrice());
+ }
+
+ @Test
+ public void testCalculateProductBrokeragePrice_subCommissionZeroFixed() {
+ // mock锛氬垎閿�鍔熻兘宸插紑鍚紝姣斾緥 10%锛屽綋鍓嶇敤鎴锋湁鍒嗛攢璧勬牸
+ TradeConfigDO tradeConfig = new TradeConfigDO();
+ tradeConfig.setBrokerageEnabled(true);
+ tradeConfig.setBrokerageFirstPercent(10);
+ when(tradeConfigService.getTradeConfig()).thenReturn(tradeConfig);
+ when(brokerageUserService.getUserBrokerageEnabled(100L)).thenReturn(true);
+
+ // mock锛氬晢鍝佸紑鍚嫭绔嬪垎閿�锛坰ubCommissionType = true锛夛紝SKU 鍥哄畾浣i噾涓� 0锛堝晢瀹朵富鍔ㄨ缃級
+ ProductSpuRespDTO spu = new ProductSpuRespDTO();
+ spu.setSubCommissionType(true);
+ when(productSpuApi.getSpu(2L)).thenReturn(spu);
+
+ ProductSkuRespDTO sku = new ProductSkuRespDTO();
+ sku.setPrice(1000);
+ sku.setFirstBrokeragePrice(0);
+ when(productSkuApi.getSkuListBySpuId(ListUtil.of(2L))).thenReturn(ListUtil.of(sku));
+
+ // 璋冪敤
+ AppBrokerageProductPriceRespVO result = brokerageRecordService.calculateProductBrokeragePrice(100L, 2L);
+
+ // 鏂█锛氱嫭绔嬪垎閿�鍥哄畾浣i噾涓� 0锛屽簲杩斿洖 0锛屼笉寰楀洖閫�鍒板叏灞�姣斾緥
+ assertTrue(result.getEnabled());
+ assertEquals(0, result.getBrokerageMinPrice());
+ assertEquals(0, result.getBrokerageMaxPrice());
+ }
+
+ @Test
+ public void testCalculateProductBrokeragePrice_subCommissionNullFixed() {
+ // mock锛氬垎閿�鍔熻兘宸插紑鍚紝姣斾緥 10%锛屽綋鍓嶇敤鎴锋湁鍒嗛攢璧勬牸
+ TradeConfigDO tradeConfig = new TradeConfigDO();
+ tradeConfig.setBrokerageEnabled(true);
+ tradeConfig.setBrokerageFirstPercent(10);
+ when(tradeConfigService.getTradeConfig()).thenReturn(tradeConfig);
+ when(brokerageUserService.getUserBrokerageEnabled(100L)).thenReturn(true);
+
+ // mock锛氬晢鍝佸紑鍚嫭绔嬪垎閿�锛屽叾涓竴涓� SKU 鍥哄畾浣i噾鏈厤缃�
+ ProductSpuRespDTO spu = new ProductSpuRespDTO();
+ spu.setSubCommissionType(true);
+ when(productSpuApi.getSpu(3L)).thenReturn(spu);
+
+ ProductSkuRespDTO nullBrokerageSku = new ProductSkuRespDTO();
+ nullBrokerageSku.setPrice(1000);
+ nullBrokerageSku.setFirstBrokeragePrice(null);
+ ProductSkuRespDTO fixedBrokerageSku = new ProductSkuRespDTO();
+ fixedBrokerageSku.setPrice(2000);
+ fixedBrokerageSku.setFirstBrokeragePrice(200);
+ when(productSkuApi.getSkuListBySpuId(ListUtil.of(3L))).thenReturn(ListUtil.of(nullBrokerageSku, fixedBrokerageSku));
+
+ // 璋冪敤
+ AppBrokerageProductPriceRespVO result = brokerageRecordService.calculateProductBrokeragePrice(100L, 3L);
+
+ // 鏂█锛氱嫭绔嬪垎閿�鍥哄畾浣i噾涓虹┖鏃舵寜 0 澶勭悊锛岄伩鍏嶆瘮杈冩渶灏�/鏈�澶т剑閲戞椂鎶ラ敊
+ assertTrue(result.getEnabled());
+ assertEquals(0, result.getBrokerageMinPrice());
+ assertEquals(200, result.getBrokerageMaxPrice());
+ }
+
+ @Test
+ public void testCalculateProductBrokeragePrice_subCommissionEmptySkuList() {
+ // mock锛氬垎閿�鍔熻兘宸插紑鍚紝姣斾緥 10%锛屽綋鍓嶇敤鎴锋湁鍒嗛攢璧勬牸
+ TradeConfigDO tradeConfig = new TradeConfigDO();
+ tradeConfig.setBrokerageEnabled(true);
+ tradeConfig.setBrokerageFirstPercent(10);
+ when(tradeConfigService.getTradeConfig()).thenReturn(tradeConfig);
+ when(brokerageUserService.getUserBrokerageEnabled(100L)).thenReturn(true);
+
+ // mock锛氬晢鍝佸紑鍚嫭绔嬪垎閿�锛屼絾鏌ヨ涓嶅埌 SKU 鍥哄畾浣i噾
+ ProductSpuRespDTO spu = new ProductSpuRespDTO();
+ spu.setSubCommissionType(true);
+ when(productSpuApi.getSpu(4L)).thenReturn(spu);
+ when(productSkuApi.getSkuListBySpuId(ListUtil.of(4L))).thenReturn(ListUtil.of());
+
+ // 璋冪敤
+ AppBrokerageProductPriceRespVO result = brokerageRecordService.calculateProductBrokeragePrice(100L, 4L);
+
+ // 鏂█锛氱嫭绔嬪垎閿�娌℃湁鍥哄畾浣i噾鏃讹紝涓嶅洖閫�鍒板叏灞�姣斾緥
+ assertTrue(result.getEnabled());
+ assertEquals(0, result.getBrokerageMinPrice());
+ assertEquals(0, result.getBrokerageMaxPrice());
}
}
--
Gitblit v1.9.3