Commit d7a1c8f7ca482a48f637bffc15d4f416265f60f8
1 parent
edc5d0f1
promotion:增加获得优惠劵匹配结果的列表的单元测试
Showing
1 changed file
with
55 additions
and
0 deletions
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 | } | ... | ... |