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 | package cn.iocoder.yudao.module.promotion.service.price; | 1 | package cn.iocoder.yudao.module.promotion.service.price; |
| 2 | 2 | ||
| 3 | import cn.hutool.core.map.MapUtil; | 3 | import cn.hutool.core.map.MapUtil; |
| 4 | +import cn.iocoder.yudao.framework.common.exception.ServiceException; | ||
| 4 | import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; | 5 | import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; |
| 5 | import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; | 6 | import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; |
| 6 | import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; | 7 | import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; |
| 8 | +import cn.iocoder.yudao.module.promotion.api.price.dto.CouponMeetRespDTO; | ||
| 7 | import cn.iocoder.yudao.module.promotion.api.price.dto.PriceCalculateReqDTO; | 9 | import cn.iocoder.yudao.module.promotion.api.price.dto.PriceCalculateReqDTO; |
| 8 | import cn.iocoder.yudao.module.promotion.api.price.dto.PriceCalculateRespDTO; | 10 | import cn.iocoder.yudao.module.promotion.api.price.dto.PriceCalculateRespDTO; |
| 9 | import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponDO; | 11 | import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponDO; |
| 10 | import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO; | 12 | import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO; |
| 11 | import cn.iocoder.yudao.module.promotion.enums.common.*; | 13 | import cn.iocoder.yudao.module.promotion.enums.common.*; |
| 14 | +import cn.iocoder.yudao.module.promotion.enums.coupon.CouponStatusEnum; | ||
| 12 | import cn.iocoder.yudao.module.promotion.service.coupon.CouponService; | 15 | import cn.iocoder.yudao.module.promotion.service.coupon.CouponService; |
| 13 | import cn.iocoder.yudao.module.promotion.service.discount.DiscountActivityService; | 16 | import cn.iocoder.yudao.module.promotion.service.discount.DiscountActivityService; |
| 14 | import cn.iocoder.yudao.module.promotion.service.discount.bo.DiscountProductDetailBO; | 17 | import cn.iocoder.yudao.module.promotion.service.discount.bo.DiscountProductDetailBO; |
| @@ -18,16 +21,20 @@ import org.mockito.InjectMocks; | @@ -18,16 +21,20 @@ import org.mockito.InjectMocks; | ||
| 18 | import org.mockito.Mock; | 21 | import org.mockito.Mock; |
| 19 | 22 | ||
| 20 | import java.util.LinkedHashMap; | 23 | import java.util.LinkedHashMap; |
| 24 | +import java.util.List; | ||
| 21 | import java.util.Map; | 25 | import java.util.Map; |
| 22 | import java.util.Set; | 26 | import java.util.Set; |
| 23 | 27 | ||
| 24 | import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; | 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 | import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; | 30 | import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; |
| 26 | import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; | 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 | import static java.util.Arrays.asList; | 33 | import static java.util.Arrays.asList; |
| 28 | import static java.util.Collections.singletonList; | 34 | import static java.util.Collections.singletonList; |
| 29 | import static org.junit.jupiter.api.Assertions.*; | 35 | import static org.junit.jupiter.api.Assertions.*; |
| 30 | import static org.mockito.ArgumentMatchers.eq; | 36 | import static org.mockito.ArgumentMatchers.eq; |
| 37 | +import static org.mockito.Mockito.doThrow; | ||
| 31 | import static org.mockito.Mockito.when; | 38 | import static org.mockito.Mockito.when; |
| 32 | 39 | ||
| 33 | /** | 40 | /** |
| @@ -448,4 +455,52 @@ public class PriceServiceTest extends BaseMockitoUnitTest { | @@ -448,4 +455,52 @@ public class PriceServiceTest extends BaseMockitoUnitTest { | ||
| 448 | assertEquals(promotionItem012.getDiscountPrice(), 30); | 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 | } |