Commit d91655f3c48dc59a61243f106726a4cf2a1346b9

Authored by luowenfeng
1 parent 7dd12a3e

feature(商城): 修改单元测试

yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImplTest.java
1 package cn.iocoder.yudao.module.product.service.spu; 1 package cn.iocoder.yudao.module.product.service.spu;
2 2
  3 +import cn.hutool.core.date.DateUtil;
  4 +import cn.hutool.core.util.RandomUtil;
3 import cn.iocoder.yudao.framework.common.exception.ServiceException; 5 import cn.iocoder.yudao.framework.common.exception.ServiceException;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 7 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  8 +import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
6 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; 9 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
7 import cn.iocoder.yudao.module.product.controller.admin.property.vo.property.ProductPropertyRespVO; 10 import cn.iocoder.yudao.module.product.controller.admin.property.vo.property.ProductPropertyRespVO;
8 import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueRespVO; 11 import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueRespVO;
@@ -33,10 +36,12 @@ import java.util.*; @@ -33,10 +36,12 @@ import java.util.*;
33 import java.util.stream.Collectors; 36 import java.util.stream.Collectors;
34 import java.util.stream.Stream; 37 import java.util.stream.Stream;
35 38
  39 +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
36 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; 40 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
37 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; 41 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
38 42
39 // TODO @芋艿:review 下单元测试 43 // TODO @芋艿:review 下单元测试
  44 +
40 /** 45 /**
41 * {@link ProductSpuServiceImpl} 的单元测试类 46 * {@link ProductSpuServiceImpl} 的单元测试类
42 * 47 *
@@ -67,6 +72,13 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest { @@ -67,6 +72,13 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest {
67 @MockBean 72 @MockBean
68 private ProductPropertyValueService productPropertyValueService; 73 private ProductPropertyValueService productPropertyValueService;
69 74
  75 + public String generateNo() {
  76 + return DateUtil.format(new Date(), "yyyyMMddHHmmss") + RandomUtil.randomInt(100000, 999999);
  77 + }
  78 +
  79 + public Long generateId() {
  80 + return RandomUtil.randomLong(100000, 999999);
  81 + }
70 82
71 @Test 83 @Test
72 public void testCreateSpu_success() { 84 public void testCreateSpu_success() {
@@ -206,35 +218,120 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest { @@ -206,35 +218,120 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest {
206 Assertions.assertIterableEquals(createReqVO, spuList); 218 Assertions.assertIterableEquals(createReqVO, spuList);
207 } 219 }
208 220
209 - // TODO @luowenfeng:单测要分情况;类似你这个,可以分 2 个单测;一个是有预存预警的;一个是没库存预警的;  
210 - // 然后,参考其它模块的 getPage 类型的方法的单测。  
211 @Test 221 @Test
212 - void getSpuPage() { 222 + void getSpuPage_alarmStock_empty() {
  223 + // 调用
  224 + ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO();
  225 + productSpuPageReqVO.setAlarmStock(true);
  226 +
  227 + PageResult<ProductSpuRespVO> spuPage = productSpuService.getSpuPage(productSpuPageReqVO);
  228 +
  229 + PageResult<Object> result = PageResult.empty();
  230 + Assertions.assertIterableEquals(result.getList(), spuPage.getList());
  231 + Assertions.assertEquals(spuPage.getTotal(), result.getTotal());
  232 + }
  233 +
  234 + @Test
  235 + void getSpuPage_alarmStock() {
  236 + // mock 数据
  237 + Long brandId = generateId();
  238 + Long categoryId = generateId();
  239 + String code = generateNo();
  240 +
213 // 准备参数 241 // 准备参数
214 - ProductSpuDO createReqVO = randomPojo(ProductSpuDO.class); 242 + ProductSpuDO createReqVO = randomPojo(ProductSpuDO.class, o->{
  243 + o.setStatus(ProductSpuStatusEnum.ENABLE.getStatus());
  244 + o.setTotalStock(500);
  245 + o.setMinPrice(1);
  246 + o.setMaxPrice(50);
  247 + o.setMarketPrice(25);
  248 + o.setSpecType(ProductSpuSpecTypeEnum.RECYCLE.getType());
  249 + o.setBrandId(brandId);
  250 + o.setCategoryId(categoryId);
  251 + o.setClickCount(100);
  252 + o.setCode(code);
  253 + o.setDescription("测试商品");
  254 + o.setPicUrls(new ArrayList<>());
  255 + o.setName("测试");
  256 + o.setSalesCount(100);
  257 + o.setSellPoint("超级加倍");
  258 + o.setShowStock(true);
  259 + o.setVideoUrl("");
  260 + });
215 productSpuMapper.insert(createReqVO); 261 productSpuMapper.insert(createReqVO);
216 262
217 - ArrayList<ProductSkuDO> remindSpuIds = Lists.newArrayList(  
218 -// randomPojo(ProductSkuDO.class, o -> o.setSpuId(createReqVO.getId())),  
219 -// randomPojo(ProductSkuDO.class, o -> o.setSpuId(createReqVO.getId()))  
220 - ); 263 + Set<Long> alarmStockSpuIds = SetUtils.asSet(createReqVO.getId());
  264 +
  265 + List<ProductSkuDO> productSpuDOS = Arrays.asList(randomPojo(ProductSkuDO.class, o -> {
  266 + o.setSpuId(createReqVO.getId());
  267 + }), randomPojo(ProductSkuDO.class, o -> {
  268 + o.setSpuId(createReqVO.getId());
  269 + }));
221 270
222 -// Mockito.when(productSkuService.getRemindSpuIds()).thenReturn(remindSpuIds); 271 + Mockito.when(productSkuService.getSkusByAlarmStock()).thenReturn(productSpuDOS);
223 272
224 // 调用 273 // 调用
225 ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO(); 274 ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO();
226 -// productSpuPageReqVO.setTabStatus(2);  
227 - 275 + productSpuPageReqVO.setAlarmStock(true);
228 PageResult<ProductSpuRespVO> spuPage = productSpuService.getSpuPage(productSpuPageReqVO); 276 PageResult<ProductSpuRespVO> spuPage = productSpuService.getSpuPage(productSpuPageReqVO);
229 277
230 - Set<Long> resultRemindSpuIds = new HashSet<>();  
231 - resultRemindSpuIds.add(null);  
232 - PageResult<ProductSpuRespVO> result = ProductSpuConvert.INSTANCE.convertPage(productSpuMapper.selectPage(productSpuPageReqVO, resultRemindSpuIds)); 278 + PageResult<ProductSpuRespVO> result = ProductSpuConvert.INSTANCE.convertPage(productSpuMapper.selectPage(productSpuPageReqVO, alarmStockSpuIds));
233 Assertions.assertIterableEquals(result.getList(), spuPage.getList()); 279 Assertions.assertIterableEquals(result.getList(), spuPage.getList());
234 Assertions.assertEquals(spuPage.getTotal(), result.getTotal()); 280 Assertions.assertEquals(spuPage.getTotal(), result.getTotal());
235 } 281 }
236 282
237 @Test 283 @Test
  284 + void getSpuPage() {
  285 + // mock 数据
  286 + Long brandId = generateId();
  287 + Long categoryId = generateId();
  288 +
  289 + // 准备参数
  290 + ProductSpuDO createReqVO = randomPojo(ProductSpuDO.class, o->{
  291 + o.setStatus(ProductSpuStatusEnum.ENABLE.getStatus());
  292 + o.setTotalStock(1);
  293 + o.setMinPrice(1);
  294 + o.setMaxPrice(1);
  295 + o.setMarketPrice(1);
  296 + o.setSpecType(ProductSpuSpecTypeEnum.RECYCLE.getType());
  297 + o.setBrandId(brandId);
  298 + o.setCategoryId(categoryId);
  299 + o.setClickCount(1);
  300 + o.setCode(generateNo());
  301 + o.setDescription("测试商品");
  302 + o.setPicUrls(new ArrayList<>());
  303 + o.setName("测试");
  304 + o.setSalesCount(1);
  305 + o.setSellPoint("卖点");
  306 + o.setShowStock(true);
  307 + });
  308 +
  309 + // 准备参数
  310 + productSpuMapper.insert(createReqVO);
  311 + // 测试 status 不匹配
  312 + productSpuMapper.insert(cloneIgnoreId(createReqVO, o -> o.setStatus(ProductSpuStatusEnum.DISABLE.getStatus())));
  313 + productSpuMapper.insert(cloneIgnoreId(createReqVO, o -> o.setStatus(ProductSpuStatusEnum.RECYCLE.getStatus())));
  314 + // 测试 SpecType 不匹配
  315 + productSpuMapper.insert(cloneIgnoreId(createReqVO, o -> o.setSpecType(ProductSpuSpecTypeEnum.DISABLE.getType())));
  316 + // 测试 BrandId 不匹配
  317 + productSpuMapper.insert(cloneIgnoreId(createReqVO, o -> o.setBrandId(generateId())));
  318 + // 测试 CategoryId 不匹配
  319 + productSpuMapper.insert(cloneIgnoreId(createReqVO, o -> o.setCategoryId(generateId())));
  320 +
  321 + // 调用
  322 + ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO();
  323 + productSpuPageReqVO.setAlarmStock(false);
  324 + productSpuPageReqVO.setBrandId(brandId);
  325 + productSpuPageReqVO.setStatus(ProductSpuStatusEnum.ENABLE.getStatus());
  326 + productSpuPageReqVO.setCategoryId(categoryId);
  327 +
  328 + PageResult<ProductSpuRespVO> spuPage = productSpuService.getSpuPage(productSpuPageReqVO);
  329 +
  330 + PageResult<ProductSpuRespVO> result = ProductSpuConvert.INSTANCE.convertPage(productSpuMapper.selectPage(productSpuPageReqVO, (Set<Long>) null));
  331 + Assertions.assertEquals(result, spuPage);
  332 + }
  333 +
  334 + @Test
238 void testGetSpuPage() { 335 void testGetSpuPage() {
239 // 准备参数 336 // 准备参数
240 ProductSpuDO createReqVO = randomPojo(ProductSpuDO.class, o -> { 337 ProductSpuDO createReqVO = randomPojo(ProductSpuDO.class, o -> {
@@ -242,13 +339,6 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest { @@ -242,13 +339,6 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest {
242 }); 339 });
243 productSpuMapper.insert(createReqVO); 340 productSpuMapper.insert(createReqVO);
244 341
245 - ArrayList<ProductSkuDO> remindSpuIds = Lists.newArrayList(  
246 -// randomPojo(ProductSkuDO.class, o -> o.setSpuId(createReqVO.getId())),  
247 -// randomPojo(ProductSkuDO.class, o -> o.setSpuId(createReqVO.getId()))  
248 - );  
249 -  
250 -// Mockito.when(productSkuService.getRemindSpuIds()).thenReturn(remindSpuIds);  
251 -  
252 // 调用 342 // 调用
253 AppSpuPageReqVO appSpuPageReqVO = new AppSpuPageReqVO(); 343 AppSpuPageReqVO appSpuPageReqVO = new AppSpuPageReqVO();
254 appSpuPageReqVO.setCategoryId(2L); 344 appSpuPageReqVO.setCategoryId(2L);