Commit d7a1c8f7ca482a48f637bffc15d4f416265f60f8

Authored by YunaiV
1 parent edc5d0f1

promotion:增加获得优惠劵匹配结果的列表的单元测试

yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/price/PriceServiceTest.java
1 1 package cn.iocoder.yudao.module.promotion.service.price;
2 2  
3 3 import cn.hutool.core.map.MapUtil;
  4 +import cn.iocoder.yudao.framework.common.exception.ServiceException;
4 5 import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
5 6 import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;
6 7 import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;
  8 +import cn.iocoder.yudao.module.promotion.api.price.dto.CouponMeetRespDTO;
7 9 import cn.iocoder.yudao.module.promotion.api.price.dto.PriceCalculateReqDTO;
8 10 import cn.iocoder.yudao.module.promotion.api.price.dto.PriceCalculateRespDTO;
9 11 import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponDO;
10 12 import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO;
11 13 import cn.iocoder.yudao.module.promotion.enums.common.*;
  14 +import cn.iocoder.yudao.module.promotion.enums.coupon.CouponStatusEnum;
12 15 import cn.iocoder.yudao.module.promotion.service.coupon.CouponService;
13 16 import cn.iocoder.yudao.module.promotion.service.discount.DiscountActivityService;
14 17 import cn.iocoder.yudao.module.promotion.service.discount.bo.DiscountProductDetailBO;
... ... @@ -18,16 +21,20 @@ import org.mockito.InjectMocks;
18 21 import org.mockito.Mock;
19 22  
20 23 import java.util.LinkedHashMap;
  24 +import java.util.List;
21 25 import java.util.Map;
22 26 import java.util.Set;
23 27  
24 28 import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet;
  29 +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
25 30 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
26 31 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
  32 +import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COUPON_VALID_TIME_NOT_NOW;
27 33 import static java.util.Arrays.asList;
28 34 import static java.util.Collections.singletonList;
29 35 import static org.junit.jupiter.api.Assertions.*;
30 36 import static org.mockito.ArgumentMatchers.eq;
  37 +import static org.mockito.Mockito.doThrow;
31 38 import static org.mockito.Mockito.when;
32 39  
33 40 /**
... ... @@ -448,4 +455,52 @@ public class PriceServiceTest extends BaseMockitoUnitTest {
448 455 assertEquals(promotionItem012.getDiscountPrice(), 30);
449 456 }
450 457  
  458 + @Test
  459 + public void testGetMeetCouponList() {
  460 + // 准备参数
  461 + PriceCalculateReqDTO calculateReqDTO = new PriceCalculateReqDTO().setUserId(1024L)
  462 + .setItems(singletonList(new PriceCalculateReqDTO.Item().setSkuId(10L).setCount(2)));
  463 + // mock 方法(商品 SKU 信息)
  464 + ProductSkuRespDTO productSku = randomPojo(ProductSkuRespDTO.class, o -> o.setId(10L).setPrice(100));
  465 + when(productSkuApi.getSkuList(eq(asSet(10L)))).thenReturn(singletonList(productSku));
  466 + // mock 方法(情况一:优惠劵未到使用时间)
  467 + CouponDO coupon01 = randomPojo(CouponDO.class);
  468 + doThrow(new ServiceException(COUPON_VALID_TIME_NOT_NOW)).when(couponService).validCoupon(coupon01);
  469 + // mock 方法(情况二:所结算商品没有符合条件的商品)
  470 + CouponDO coupon02 = randomPojo(CouponDO.class);
  471 + // mock 方法(情况三:使用金额不足)
  472 + CouponDO coupon03 = randomPojo(CouponDO.class, o -> o.setProductScope(PromotionProductScopeEnum.ALL.getScope())
  473 + .setUsePrice(300));
  474 + // mock 方法(情况五:满足条件)
  475 + CouponDO coupon04 = randomPojo(CouponDO.class, o -> o.setProductScope(PromotionProductScopeEnum.ALL.getScope())
  476 + .setUsePrice(190));
  477 + // mock 方法(获得用户的待使用优惠劵)
  478 + when(couponService.getCouponList(eq(1024L), eq(CouponStatusEnum.UNUSED.getStatus())))
  479 + .thenReturn(asList(coupon01, coupon02, coupon03, coupon04));
  480 + // 调用
  481 + List<CouponMeetRespDTO> list = priceService.getMeetCouponList(calculateReqDTO);
  482 + // 断言
  483 + assertEquals(list.size(), 4);
  484 + // 断言情况一:优惠劵未到使用时间
  485 + CouponMeetRespDTO couponMeetRespDTO01 = list.get(0);
  486 + assertPojoEquals(couponMeetRespDTO01, coupon01);
  487 + assertFalse(couponMeetRespDTO01.getMeet());
  488 + assertEquals(couponMeetRespDTO01.getMeetTip(), "优惠劵未到使用时间");
  489 + // 断言情况二:所结算商品没有符合条件的商品
  490 + CouponMeetRespDTO couponMeetRespDTO02 = list.get(1);
  491 + assertPojoEquals(couponMeetRespDTO02, coupon02);
  492 + assertFalse(couponMeetRespDTO02.getMeet());
  493 + assertEquals(couponMeetRespDTO02.getMeetTip(), "所结算商品没有符合条件的商品");
  494 + // 断言情况三:差 %s 元可用优惠劵
  495 + CouponMeetRespDTO couponMeetRespDTO03 = list.get(2);
  496 + assertPojoEquals(couponMeetRespDTO03, coupon03);
  497 + assertFalse(couponMeetRespDTO03.getMeet());
  498 + assertEquals(couponMeetRespDTO03.getMeetTip(), "差 1.00 元可用优惠劵");
  499 + // 断言情况四:满足条件
  500 + CouponMeetRespDTO couponMeetRespDTO04 = list.get(3);
  501 + assertPojoEquals(couponMeetRespDTO04, coupon04);
  502 + assertTrue(couponMeetRespDTO04.getMeet());
  503 + assertNull(couponMeetRespDTO04.getMeetTip());
  504 + }
  505 +
451 506 }
... ...