Commit afd306a71d9ddcfd2f96571f6ecc5a827f4dbd86

Authored by owen
1 parent 2168145c

交易:增加 赠送积分计算器 单元测试

yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePointGiveCalculator.java
@@ -16,7 +16,6 @@ import java.util.Optional; @@ -16,7 +16,6 @@ import java.util.Optional;
16 16
17 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList; 17 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList;
18 18
19 -// TODO @疯狂:这个可以搞个单测;  
20 /** 19 /**
21 * 赠送积分的 {@link TradePriceCalculator} 实现类 20 * 赠送积分的 {@link TradePriceCalculator} 实现类
22 * 21 *
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePointGiveCalculatorTest.java 0 → 100644
  1 +package cn.iocoder.yudao.module.trade.service.price.calculator;
  2 +
  3 +import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
  4 +import cn.iocoder.yudao.module.member.api.config.MemberConfigApi;
  5 +import cn.iocoder.yudao.module.member.api.config.dto.MemberConfigRespDTO;
  6 +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;
  7 +import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;
  8 +import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;
  9 +import org.junit.jupiter.api.Test;
  10 +import org.mockito.InjectMocks;
  11 +import org.mockito.Mock;
  12 +
  13 +import java.util.ArrayList;
  14 +
  15 +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
  16 +import static java.util.Arrays.asList;
  17 +import static org.junit.jupiter.api.Assertions.assertEquals;
  18 +import static org.mockito.Mockito.when;
  19 +
  20 +/**
  21 + * {@link TradePointGiveCalculator} 的单元测试类
  22 + *
  23 + * @author owen
  24 + */
  25 +public class TradePointGiveCalculatorTest extends BaseMockitoUnitTest {
  26 +
  27 + @InjectMocks
  28 + private TradePointGiveCalculator tradePointGiveCalculator;
  29 +
  30 + @Mock
  31 + private MemberConfigApi memberConfigApi;
  32 +
  33 + @Test
  34 + public void testCalculate() {
  35 +
  36 + // 准备参数
  37 + TradePriceCalculateReqBO param = new TradePriceCalculateReqBO()
  38 + .setUserId(233L).setCouponId(1024L)
  39 + .setItems(asList(
  40 + new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), // 全局积分
  41 + new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(true), // 全局积分 + SKU 积分
  42 + new TradePriceCalculateReqBO.Item().setSkuId(30L).setCount(4).setSelected(false), // 全局积分,但是未选中
  43 + new TradePriceCalculateReqBO.Item().setSkuId(40L).setCount(5).setSelected(false) // 全局积分 + SKU 积分,但是未选中
  44 + ));
  45 + TradePriceCalculateRespBO result = new TradePriceCalculateRespBO()
  46 + .setType(TradeOrderTypeEnum.NORMAL.getType())
  47 + .setPrice(new TradePriceCalculateRespBO.Price())
  48 + .setPromotions(new ArrayList<>())
  49 + .setItems(asList(
  50 + new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true)
  51 + .setPrice(100).setSpuId(1L).setGivePoint(0),
  52 + new TradePriceCalculateRespBO.OrderItem().setSkuId(20L).setCount(3).setSelected(true)
  53 + .setPrice(50).setSpuId(2L).setGivePoint(100),
  54 + new TradePriceCalculateRespBO.OrderItem().setSkuId(30L).setCount(4).setSelected(false)
  55 + .setPrice(30).setSpuId(3L).setGivePoint(0),
  56 + new TradePriceCalculateRespBO.OrderItem().setSkuId(40L).setCount(5).setSelected(false)
  57 + .setPrice(60).setSpuId(1L).setGivePoint(100)
  58 + ));
  59 + // 保证价格被初始化上
  60 + TradePriceCalculatorHelper.recountPayPrice(result.getItems());
  61 + TradePriceCalculatorHelper.recountAllPrice(result);
  62 +
  63 + // mock 方法(积分配置 信息)
  64 + MemberConfigRespDTO memberConfig = randomPojo(MemberConfigRespDTO.class, o -> o.setPointTradeDeductEnable(true)
  65 + .setPointTradeGivePoint(100));
  66 + when(memberConfigApi.getConfig()).thenReturn(memberConfig);
  67 +
  68 + // 调用
  69 + tradePointGiveCalculator.calculate(param, result);
  70 + // 断言:Price 部分
  71 + assertEquals(result.getGivePoint(), 2 * 100 + 3 * 50 + 100);
  72 + // 断言:SKU 1
  73 + TradePriceCalculateRespBO.OrderItem orderItem01 = result.getItems().get(0);
  74 + assertEquals(orderItem01.getSkuId(), 10L);
  75 + assertEquals(orderItem01.getCount(), 2);
  76 + assertEquals(orderItem01.getPrice(), 100);
  77 + assertEquals(orderItem01.getGivePoint(), 2 * 100); // 全局积分
  78 + // 断言:SKU 2
  79 + TradePriceCalculateRespBO.OrderItem orderItem02 = result.getItems().get(1);
  80 + assertEquals(orderItem02.getSkuId(), 20L);
  81 + assertEquals(orderItem02.getCount(), 3);
  82 + assertEquals(orderItem02.getPrice(), 50);
  83 + assertEquals(orderItem02.getGivePoint(), 3 * 50 + 100); // 全局积分 + SKU 积分
  84 + // 断言:SKU 3
  85 + TradePriceCalculateRespBO.OrderItem orderItem03 = result.getItems().get(2);
  86 + assertEquals(orderItem03.getSkuId(), 30L);
  87 + assertEquals(orderItem03.getCount(), 4);
  88 + assertEquals(orderItem03.getPrice(), 30);
  89 + assertEquals(orderItem03.getGivePoint(), 0); // 全局积分,但是未选中
  90 + // 断言:SKU 4
  91 + TradePriceCalculateRespBO.OrderItem orderItem04 = result.getItems().get(3);
  92 + assertEquals(orderItem04.getSkuId(), 40L);
  93 + assertEquals(orderItem04.getCount(), 5);
  94 + assertEquals(orderItem04.getPrice(), 60);
  95 + assertEquals(orderItem04.getGivePoint(), 100); // 全局积分 + SKU 积分,但是未选中
  96 + }
  97 +}
0 \ No newline at end of file 98 \ No newline at end of file