diff --git a/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandServiceImplTest.java b/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandServiceImplTest.java deleted file mode 100644 index 1b5c68ba4..000000000 --- a/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandServiceImplTest.java +++ /dev/null @@ -1,133 +0,0 @@ -package cn.iocoder.yudao.module.product.service.brand; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandCreateReqVO; -import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandPageReqVO; -import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandUpdateReqVO; -import cn.iocoder.yudao.module.product.dal.dataobject.brand.ProductBrandDO; -import cn.iocoder.yudao.module.product.dal.mysql.brand.ProductBrandMapper; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.BRAND_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; - -/** -* {@link ProductBrandServiceImpl} 的单元测试类 -* -* @author 芋道源码 -*/ -@Import(ProductBrandServiceImpl.class) -public class ProductBrandServiceImplTest extends BaseDbUnitTest { - - @Resource - private ProductBrandServiceImpl brandService; - - @Resource - private ProductBrandMapper brandMapper; - - @Test - public void testCreateBrand_success() { - // 准备参数 - ProductBrandCreateReqVO reqVO = randomPojo(ProductBrandCreateReqVO.class); - - // 调用 - Long brandId = brandService.createBrand(reqVO); - // 断言 - assertNotNull(brandId); - // 校验记录的属性是否正确 - ProductBrandDO brand = brandMapper.selectById(brandId); - assertPojoEquals(reqVO, brand); - } - - @Test - public void testUpdateBrand_success() { - // mock 数据 - ProductBrandDO dbBrand = randomPojo(ProductBrandDO.class); - brandMapper.insert(dbBrand);// @Sql: 先插入出一条存在的数据 - // 准备参数 - ProductBrandUpdateReqVO reqVO = randomPojo(ProductBrandUpdateReqVO.class, o -> { - o.setId(dbBrand.getId()); // 设置更新的 ID - }); - - // 调用 - brandService.updateBrand(reqVO); - // 校验是否更新正确 - ProductBrandDO brand = brandMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, brand); - } - - @Test - public void testUpdateBrand_notExists() { - // 准备参数 - ProductBrandUpdateReqVO reqVO = randomPojo(ProductBrandUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> brandService.updateBrand(reqVO), BRAND_NOT_EXISTS); - } - - @Test - public void testDeleteBrand_success() { - // mock 数据 - ProductBrandDO dbBrand = randomPojo(ProductBrandDO.class); - brandMapper.insert(dbBrand);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbBrand.getId(); - - // 调用 - brandService.deleteBrand(id); - // 校验数据不存在了 - assertNull(brandMapper.selectById(id)); - } - - @Test - public void testDeleteBrand_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> brandService.deleteBrand(id), BRAND_NOT_EXISTS); - } - - @Test - public void testGetBrandPage() { - // mock 数据 - ProductBrandDO dbBrand = randomPojo(ProductBrandDO.class, o -> { // 等会查询到 - o.setName("芋道源码"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setCreateTime(buildTime(2022, 2, 1)); - }); - brandMapper.insert(dbBrand); - // 测试 name 不匹配 - brandMapper.insert(cloneIgnoreId(dbBrand, o -> o.setName("源码"))); - // 测试 status 不匹配 - brandMapper.insert(cloneIgnoreId(dbBrand, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 createTime 不匹配 - brandMapper.insert(cloneIgnoreId(dbBrand, o -> o.setCreateTime(buildTime(2022, 3, 1)))); - // 准备参数 - ProductBrandPageReqVO reqVO = new ProductBrandPageReqVO(); - reqVO.setName("芋道"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setCreateTime((new LocalDateTime[]{buildTime(2022, 1, 1), buildTime(2022, 2, 25)})); - - // 调用 - PageResult pageResult = brandService.getBrandPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbBrand, pageResult.getList().get(0)); - } - -} diff --git a/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImplTest.java b/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImplTest.java deleted file mode 100644 index 37e262d9a..000000000 --- a/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImplTest.java +++ /dev/null @@ -1,161 +0,0 @@ -package cn.iocoder.yudao.module.product.service.category; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryCreateReqVO; -import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryListReqVO; -import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryUpdateReqVO; -import cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO; -import cn.iocoder.yudao.module.product.dal.mysql.category.ProductCategoryMapper; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO.PARENT_ID_NULL; -import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.CATEGORY_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; - -/** - * {@link ProductCategoryServiceImpl} 的单元测试类 - * - * @author 芋道源码 - */ -@Import(ProductCategoryServiceImpl.class) -public class ProductCategoryServiceImplTest extends BaseDbUnitTest { - - @Resource - private ProductCategoryServiceImpl productCategoryService; - - @Resource - private ProductCategoryMapper productCategoryMapper; - - @Test - public void testCreateCategory_success() { - // 准备参数 - ProductCategoryCreateReqVO reqVO = randomPojo(ProductCategoryCreateReqVO.class); - - // mock 父类 - ProductCategoryDO parentProductCategory = randomPojo(ProductCategoryDO.class, o -> { - reqVO.setParentId(o.getId()); - o.setParentId(PARENT_ID_NULL); - }); - productCategoryMapper.insert(parentProductCategory); - - // 调用 - Long categoryId = productCategoryService.createCategory(reqVO); - // 断言 - assertNotNull(categoryId); - // 校验记录的属性是否正确 - ProductCategoryDO category = productCategoryMapper.selectById(categoryId); - assertPojoEquals(reqVO, category); - } - - @Test - public void testUpdateCategory_success() { - // mock 数据 - ProductCategoryDO dbCategory = randomPojo(ProductCategoryDO.class); - productCategoryMapper.insert(dbCategory);// @Sql: 先插入出一条存在的数据 - // 准备参数 - ProductCategoryUpdateReqVO reqVO = randomPojo(ProductCategoryUpdateReqVO.class, o -> { - o.setId(dbCategory.getId()); // 设置更新的 ID - }); - // mock 父类 - ProductCategoryDO parentProductCategory = randomPojo(ProductCategoryDO.class, o -> o.setId(reqVO.getParentId())); - productCategoryMapper.insert(parentProductCategory); - - // 调用 - productCategoryService.updateCategory(reqVO); - // 校验是否更新正确 - ProductCategoryDO category = productCategoryMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, category); - } - - @Test - public void testUpdateCategory_notExists() { - // 准备参数 - ProductCategoryUpdateReqVO reqVO = randomPojo(ProductCategoryUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> productCategoryService.updateCategory(reqVO), CATEGORY_NOT_EXISTS); - } - - @Test - public void testDeleteCategory_success() { - // mock 数据 - ProductCategoryDO dbCategory = randomPojo(ProductCategoryDO.class); - productCategoryMapper.insert(dbCategory);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbCategory.getId(); - - // 调用 - productCategoryService.deleteCategory(id); - // 校验数据不存在了 - assertNull(productCategoryMapper.selectById(id)); - } - - @Test - public void testDeleteCategory_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> productCategoryService.deleteCategory(id), CATEGORY_NOT_EXISTS); - } - - @Test - public void testGetCategoryLevel() { - // mock 数据 - ProductCategoryDO category1 = randomPojo(ProductCategoryDO.class, - o -> o.setParentId(PARENT_ID_NULL)); - productCategoryMapper.insert(category1); - ProductCategoryDO category2 = randomPojo(ProductCategoryDO.class, - o -> o.setParentId(category1.getId())); - productCategoryMapper.insert(category2); - ProductCategoryDO category3 = randomPojo(ProductCategoryDO.class, - o -> o.setParentId(category2.getId())); - productCategoryMapper.insert(category3); - - // 调用,并断言 - assertEquals(productCategoryService.getCategoryLevel(category1.getId()), 1); - assertEquals(productCategoryService.getCategoryLevel(category2.getId()), 2); - assertEquals(productCategoryService.getCategoryLevel(category3.getId()), 3); - } - - @Test - public void testGetCategoryList() { - // mock 数据 - ProductCategoryDO dbCategory = randomPojo(ProductCategoryDO.class, o -> { // 等会查询到 - o.setName("奥特曼"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setParentId(PARENT_ID_NULL); - }); - productCategoryMapper.insert(dbCategory); - // 测试 name 不匹配 - productCategoryMapper.insert(cloneIgnoreId(dbCategory, o -> o.setName("奥特块"))); - // 测试 status 不匹配 - productCategoryMapper.insert(cloneIgnoreId(dbCategory, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 parentId 不匹配 - productCategoryMapper.insert(cloneIgnoreId(dbCategory, o -> o.setParentId(3333L))); - // 准备参数 - ProductCategoryListReqVO reqVO = new ProductCategoryListReqVO(); - reqVO.setName("特曼"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setParentId(PARENT_ID_NULL); - - // 调用 - List list = productCategoryService.getEnableCategoryList(reqVO); - List all = productCategoryService.getEnableCategoryList(new ProductCategoryListReqVO()); - // 断言 - assertEquals(1, list.size()); - assertEquals(4, all.size()); - assertPojoEquals(dbCategory, list.get(0)); - } - -} diff --git a/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/comment/ProductCommentServiceImplTest.java b/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/comment/ProductCommentServiceImplTest.java deleted file mode 100644 index fb6bc3649..000000000 --- a/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/comment/ProductCommentServiceImplTest.java +++ /dev/null @@ -1,193 +0,0 @@ -package cn.iocoder.yudao.module.product.service.comment; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.product.controller.admin.comment.vo.ProductCommentPageReqVO; -import cn.iocoder.yudao.module.product.controller.admin.comment.vo.ProductCommentReplyReqVO; -import cn.iocoder.yudao.module.product.controller.admin.comment.vo.ProductCommentRespVO; -import cn.iocoder.yudao.module.product.controller.admin.comment.vo.ProductCommentUpdateVisibleReqVO; -import cn.iocoder.yudao.module.product.controller.app.comment.vo.AppCommentPageReqVO; -import cn.iocoder.yudao.module.product.controller.app.comment.vo.AppCommentStatisticsRespVO; -import cn.iocoder.yudao.module.product.convert.comment.ProductCommentConvert; -import cn.iocoder.yudao.module.product.dal.dataobject.comment.ProductCommentDO; -import cn.iocoder.yudao.module.product.dal.mysql.comment.ProductCommentMapper; -import cn.iocoder.yudao.module.product.enums.comment.ProductCommentScoresEnum; -import cn.iocoder.yudao.module.product.service.sku.ProductSkuService; -import cn.iocoder.yudao.module.product.service.spu.ProductSpuService; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.Lazy; - -import javax.annotation.Resource; -import java.time.LocalDateTime; -import java.util.Date; - -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; - -// TODO 芋艿:单测详细 review 下 -/** - * {@link ProductCommentServiceImpl} 的单元测试类 - * - * @author wangzhs - */ -@Import(ProductCommentServiceImpl.class) -public class ProductCommentServiceImplTest extends BaseDbUnitTest { - - @Resource - private ProductCommentMapper productCommentMapper; - - @Resource - @Lazy - private ProductCommentServiceImpl productCommentService; - - @MockBean - private ProductSpuService productSpuService; - @MockBean - private ProductSkuService productSkuService; - - public String generateNo() { - return DateUtil.format(new Date(), "yyyyMMddHHmmss") + RandomUtil.randomInt(100000, 999999); - } - - public Long generateId() { - return RandomUtil.randomLong(100000, 999999); - } - - @Test - public void testCreateCommentAndGet_success() { - // mock 测试 - ProductCommentDO productComment = randomPojo(ProductCommentDO.class); - productCommentMapper.insert(productComment); - - // 断言 - // 校验记录的属性是否正确 - ProductCommentDO comment = productCommentMapper.selectById(productComment.getId()); - assertPojoEquals(productComment, comment); - } - - @Test - public void testGetCommentPage_success() { - // 准备参数 - ProductCommentDO productComment = randomPojo(ProductCommentDO.class, o -> { - o.setUserNickname("王二狗"); - o.setSpuName("感冒药"); - o.setScores(ProductCommentScoresEnum.FOUR.getScores()); - o.setReplyStatus(Boolean.TRUE); - o.setVisible(Boolean.TRUE); - o.setId(generateId()); - o.setUserId(generateId()); - o.setAnonymous(Boolean.TRUE); - o.setOrderId(generateId()); - o.setOrderItemId(generateId()); - o.setSpuId(generateId()); - o.setSkuId(generateId()); - o.setDescriptionScores(ProductCommentScoresEnum.FOUR.getScores()); - o.setBenefitScores(ProductCommentScoresEnum.FOUR.getScores()); - o.setContent("真好吃"); - o.setReplyUserId(generateId()); - o.setReplyContent("确实"); - o.setReplyTime(LocalDateTime.now()); - o.setCreateTime(LocalDateTime.now()); - o.setUpdateTime(LocalDateTime.now()); - }); - productCommentMapper.insert(productComment); - - Long orderId = productComment.getOrderId(); - Long spuId = productComment.getSpuId(); - - // 测试 userNickname 不匹配 - productCommentMapper.insert(cloneIgnoreId(productComment, o -> o.setUserNickname("王三").setScores(ProductCommentScoresEnum.ONE.getScores()))); - // 测试 orderId 不匹配 - productCommentMapper.insert(cloneIgnoreId(productComment, o -> o.setOrderId(generateId()))); - // 测试 spuId 不匹配 - productCommentMapper.insert(cloneIgnoreId(productComment, o -> o.setSpuId(generateId()))); - // 测试 spuName 不匹配 - productCommentMapper.insert(cloneIgnoreId(productComment, o -> o.setSpuName("感康"))); - // 测试 scores 不匹配 - productCommentMapper.insert(cloneIgnoreId(productComment, o -> o.setScores(ProductCommentScoresEnum.ONE.getScores()))); - // 测试 replied 不匹配 - productCommentMapper.insert(cloneIgnoreId(productComment, o -> o.setReplyStatus(Boolean.FALSE))); - // 测试 visible 不匹配 - productCommentMapper.insert(cloneIgnoreId(productComment, o -> o.setVisible(Boolean.FALSE))); - - // 调用 - ProductCommentPageReqVO productCommentPageReqVO = new ProductCommentPageReqVO(); - productCommentPageReqVO.setUserNickname("王二"); - productCommentPageReqVO.setOrderId(orderId); - productCommentPageReqVO.setSpuId(spuId); - productCommentPageReqVO.setSpuName("感冒药"); - productCommentPageReqVO.setScores(ProductCommentScoresEnum.FOUR.getScores()); - productCommentPageReqVO.setReplyStatus(Boolean.TRUE); - - PageResult commentPage = productCommentService.getCommentPage(productCommentPageReqVO); - PageResult result = ProductCommentConvert.INSTANCE.convertPage(productCommentMapper.selectPage(productCommentPageReqVO)); - assertEquals(result.getTotal(), commentPage.getTotal()); - - PageResult all = productCommentService.getCommentPage(new ProductCommentPageReqVO()); - assertEquals(8, all.getTotal()); - - // 测试获取所有商品分页评论数据 - PageResult result1 = productCommentService.getCommentPage(new AppCommentPageReqVO(), Boolean.TRUE); - assertEquals(7, result1.getTotal()); - - // 测试获取所有商品分页中评数据 - PageResult result2 = productCommentService.getCommentPage(new AppCommentPageReqVO().setType(AppCommentPageReqVO.MEDIOCRE_COMMENT), Boolean.TRUE); - assertEquals(2, result2.getTotal()); - - // 测试获取指定 spuId 商品分页中评数据 - PageResult result3 = productCommentService.getCommentPage(new AppCommentPageReqVO().setSpuId(spuId).setType(AppCommentPageReqVO.MEDIOCRE_COMMENT), Boolean.TRUE); - assertEquals(2, result3.getTotal()); - - // 测试分页 tab count - AppCommentStatisticsRespVO tabsCount = productCommentService.getCommentStatistics(spuId, Boolean.TRUE); - assertEquals(4, tabsCount.getGoodCount()); - assertEquals(2, tabsCount.getMediocreCount()); - assertEquals(0, tabsCount.getNegativeCount()); - - } - - @Test - public void testUpdateCommentVisible_success() { - // mock 测试 - ProductCommentDO productComment = randomPojo(ProductCommentDO.class, o -> { - o.setVisible(Boolean.TRUE); - }); - productCommentMapper.insert(productComment); - - Long productCommentId = productComment.getId(); - - ProductCommentUpdateVisibleReqVO updateReqVO = new ProductCommentUpdateVisibleReqVO(); - updateReqVO.setId(productCommentId); - updateReqVO.setVisible(Boolean.FALSE); - productCommentService.updateCommentVisible(updateReqVO); - - ProductCommentDO productCommentDO = productCommentMapper.selectById(productCommentId); - assertFalse(productCommentDO.getVisible()); - } - - - @Test - public void testCommentReply_success() { - // mock 测试 - ProductCommentDO productComment = randomPojo(ProductCommentDO.class); - productCommentMapper.insert(productComment); - - Long productCommentId = productComment.getId(); - - ProductCommentReplyReqVO replyVO = new ProductCommentReplyReqVO(); - replyVO.setId(productCommentId); - replyVO.setReplyContent("测试"); - productCommentService.replyComment(replyVO, 1L); - - ProductCommentDO productCommentDO = productCommentMapper.selectById(productCommentId); - assertEquals("测试", productCommentDO.getReplyContent()); - } - -} diff --git a/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceTest.java b/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceTest.java deleted file mode 100644 index 9df947b43..000000000 --- a/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceTest.java +++ /dev/null @@ -1,205 +0,0 @@ -package cn.iocoder.yudao.module.product.service.sku; - -import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.framework.test.core.util.AssertUtils; -import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO; -import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuCreateOrUpdateReqVO; -import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO; -import cn.iocoder.yudao.module.product.dal.mysql.sku.ProductSkuMapper; -import cn.iocoder.yudao.module.product.service.property.ProductPropertyService; -import cn.iocoder.yudao.module.product.service.property.ProductPropertyValueService; -import cn.iocoder.yudao.module.product.service.spu.ProductSpuService; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.util.Arrays; -import java.util.List; - -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS; -import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_STOCK_NOT_ENOUGH; -import static java.util.Collections.singletonList; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.argThat; -import static org.mockito.Mockito.verify; - -/** - * {@link ProductSkuServiceImpl} 的单元测试 - * - * @author 芋道源码 - */ -@Import(ProductSkuServiceImpl.class) -public class ProductSkuServiceTest extends BaseDbUnitTest { - - @Resource - private ProductSkuService productSkuService; - - @Resource - private ProductSkuMapper productSkuMapper; - - @MockBean - private ProductSpuService productSpuService; - @MockBean - private ProductPropertyService productPropertyService; - @MockBean - private ProductPropertyValueService productPropertyValueService; - - public Long generateId() { - return RandomUtil.randomLong(100000, 999999); - } - - @Test - public void testUpdateSkuList() { - // mock 数据 - ProductSkuDO sku01 = randomPojo(ProductSkuDO.class, o -> { // 测试更新 - o.setSpuId(1L); - o.setProperties(singletonList(new ProductSkuDO.Property( - 10L, "颜色", 20L, "红色"))); - }); - productSkuMapper.insert(sku01); - ProductSkuDO sku02 = randomPojo(ProductSkuDO.class, o -> { // 测试删除 - o.setSpuId(1L); - o.setProperties(singletonList(new ProductSkuDO.Property( - 10L, "颜色", 30L, "蓝色"))); - - }); - productSkuMapper.insert(sku02); - // 准备参数 - Long spuId = 1L; - String spuName = "测试商品"; - List skus = Arrays.asList( - randomPojo(ProductSkuCreateOrUpdateReqVO.class, o -> { // 测试更新 - o.setProperties(singletonList(new ProductSkuCreateOrUpdateReqVO.Property( - 10L, "颜色", 20L, "红色"))); - }), - randomPojo(ProductSkuCreateOrUpdateReqVO.class, o -> { // 测试新增 - o.setProperties(singletonList(new ProductSkuCreateOrUpdateReqVO.Property( - 10L, "颜色", 20L, "红色"))); - }) - ); - - // 调用 - productSkuService.updateSkuList(spuId, skus); - // 断言 - List dbSkus = productSkuMapper.selectListBySpuId(spuId); - assertEquals(dbSkus.size(), 2); - // 断言更新的 - assertEquals(dbSkus.get(0).getId(), sku01.getId()); - assertPojoEquals(dbSkus.get(0), skus.get(0), "properties"); - assertEquals(skus.get(0).getProperties().size(), 1); - assertPojoEquals(dbSkus.get(0).getProperties().get(0), skus.get(0).getProperties().get(0)); - // 断言新增的 - assertNotEquals(dbSkus.get(1).getId(), sku02.getId()); - assertPojoEquals(dbSkus.get(1), skus.get(1), "properties"); - assertEquals(skus.get(1).getProperties().size(), 1); - assertPojoEquals(dbSkus.get(1).getProperties().get(0), skus.get(1).getProperties().get(0)); - } - - @Test - public void testUpdateSkuStock_incrSuccess() { - // 准备参数 - ProductSkuUpdateStockReqDTO updateStockReqDTO = new ProductSkuUpdateStockReqDTO() - .setItems(singletonList(new ProductSkuUpdateStockReqDTO.Item().setId(1L).setIncrCount(10))); - // mock 数据 - productSkuMapper.insert(randomPojo(ProductSkuDO.class, o -> { - o.setId(1L).setSpuId(10L).setStock(20); - o.getProperties().forEach(p -> { - // 指定 id 范围 解决 Value too long - p.setPropertyId(generateId()); - p.setValueId(generateId()); - }); - })); - - // 调用 - productSkuService.updateSkuStock(updateStockReqDTO); - // 断言 - ProductSkuDO sku = productSkuMapper.selectById(1L); - assertEquals(sku.getStock(), 30); - verify(productSpuService).updateSpuStock(argThat(spuStockIncrCounts -> { - assertEquals(spuStockIncrCounts.size(), 1); - assertEquals(spuStockIncrCounts.get(10L), 10); - return true; - })); - } - - @Test - public void testUpdateSkuStock_decrSuccess() { - // 准备参数 - ProductSkuUpdateStockReqDTO updateStockReqDTO = new ProductSkuUpdateStockReqDTO() - .setItems(singletonList(new ProductSkuUpdateStockReqDTO.Item().setId(1L).setIncrCount(-10))); - // mock 数据 - productSkuMapper.insert(randomPojo(ProductSkuDO.class, o -> { - o.setId(1L).setSpuId(10L).setStock(20); - o.getProperties().forEach(p -> { - // 指定 id 范围 解决 Value too long - p.setPropertyId(generateId()); - p.setValueId(generateId()); - }); - })); - - // 调用 - productSkuService.updateSkuStock(updateStockReqDTO); - // 断言 - ProductSkuDO sku = productSkuMapper.selectById(1L); - assertEquals(sku.getStock(), 10); - verify(productSpuService).updateSpuStock(argThat(spuStockIncrCounts -> { - assertEquals(spuStockIncrCounts.size(), 1); - assertEquals(spuStockIncrCounts.get(10L), -10); - return true; - })); - } - - @Test - public void testUpdateSkuStock_decrFail() { - // 准备参数 - ProductSkuUpdateStockReqDTO updateStockReqDTO = new ProductSkuUpdateStockReqDTO() - .setItems(singletonList(new ProductSkuUpdateStockReqDTO.Item().setId(1L).setIncrCount(-30))); - // mock 数据 - productSkuMapper.insert(randomPojo(ProductSkuDO.class, o -> { - o.setId(1L).setSpuId(10L).setStock(20); - o.getProperties().forEach(p -> { - // 指定 id 范围 解决 Value too long - p.setPropertyId(generateId()); - p.setValueId(generateId()); - }); - })); - // 调用并断言 - AssertUtils.assertServiceException(() -> productSkuService.updateSkuStock(updateStockReqDTO), - SKU_STOCK_NOT_ENOUGH); - } - - @Test - public void testDeleteSku_success() { - ProductSkuDO dbSku = randomPojo(ProductSkuDO.class, o -> { - o.setId(generateId()).setSpuId(generateId()); - o.getProperties().forEach(p -> { - // 指定 id 范围 解决 Value too long - p.setPropertyId(generateId()); - p.setValueId(generateId()); - }); - }); - // mock 数据 - productSkuMapper.insert(dbSku); - // 准备参数 - Long id = dbSku.getId(); - - // 调用 - productSkuService.deleteSku(id); - // 校验数据不存在了 - assertNull(productSkuMapper.selectById(id)); - } - - @Test - public void testDeleteSku_notExists() { - // 准备参数 - Long id = 1L; - - // 调用, 并断言异常 - assertServiceException(() -> productSkuService.deleteSku(id), SKU_NOT_EXISTS); - } -} diff --git a/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImplTest.java b/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImplTest.java deleted file mode 100755 index dcda35550..000000000 --- a/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImplTest.java +++ /dev/null @@ -1,503 +0,0 @@ -package cn.iocoder.yudao.module.product.service.spu; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.framework.common.exception.ServiceException; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuCreateOrUpdateReqVO; -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuCreateReqVO; -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuPageReqVO; -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuRespVO; -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuUpdateReqVO; -import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert; -import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; -import cn.iocoder.yudao.module.product.dal.mysql.spu.ProductSpuMapper; -import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; -import cn.iocoder.yudao.module.product.service.brand.ProductBrandServiceImpl; -import cn.iocoder.yudao.module.product.service.category.ProductCategoryServiceImpl; -import cn.iocoder.yudao.module.product.service.property.ProductPropertyService; -import cn.iocoder.yudao.module.product.service.property.ProductPropertyValueService; -import cn.iocoder.yudao.module.product.service.sku.ProductSkuServiceImpl; -import com.google.common.collect.Lists; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.assertj.core.util.Lists.newArrayList; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -// TODO @芋艿:review 下单元测试 - -/** - * {@link ProductSpuServiceImpl} 的单元测试类 - * - * @author 芋道源码 - */ -@Import(ProductSpuServiceImpl.class) -public class ProductSpuServiceImplTest extends BaseDbUnitTest { - - @Resource - private ProductSpuServiceImpl productSpuService; - - @Resource - private ProductSpuMapper productSpuMapper; - - @MockBean - private ProductSkuServiceImpl productSkuService; - @MockBean - private ProductCategoryServiceImpl categoryService; - @MockBean - private ProductBrandServiceImpl brandService; - @MockBean - private ProductPropertyService productPropertyService; - @MockBean - private ProductPropertyValueService productPropertyValueService; - - public String generateNo() { - return DateUtil.format(new Date(), "yyyyMMddHHmmss") + RandomUtil.randomInt(100000, 999999); - } - - public Long generateId() { - return RandomUtil.randomLong(100000, 999999); - } - - public int generaInt(){return RandomUtil.randomInt(1,9999999);} - - // TODO @芋艿:单测后续 review 哈 - - @Test - public void testCreateSpu_success() { - // 准备参数 - ProductSkuCreateOrUpdateReqVO skuCreateOrUpdateReqVO = randomPojo(ProductSkuCreateOrUpdateReqVO.class,o->{ - // 限制范围为正整数 - o.setCostPrice(generaInt()); - o.setPrice(generaInt()); - o.setMarketPrice(generaInt()); - o.setStock(generaInt()); - o.setWarnStock(10); - o.setFirstBrokeragePrice(generaInt()); - o.setSecondBrokeragePrice(generaInt()); - // 限制分数为两位数 - o.setWeight(RandomUtil.randomDouble(10,2, RoundingMode.HALF_UP)); - o.setVolume(RandomUtil.randomDouble(10,2, RoundingMode.HALF_UP)); - }); - ProductSpuCreateReqVO createReqVO = randomPojo(ProductSpuCreateReqVO.class,o->{ - o.setCategoryId(generateId()); - o.setBrandId(generateId()); - o.setUnit(RandomUtil.randomInt(1,20)); // 限制商品单位范围 - o.setSort(RandomUtil.randomInt(1,100)); // 限制排序范围 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setVirtualSalesCount(generaInt()); // 限制范围为正整数 - o.setActivityOrders(newArrayList(1,3,2,4,5)); // 活动排序 - o.setSkus(newArrayList(skuCreateOrUpdateReqVO,skuCreateOrUpdateReqVO,skuCreateOrUpdateReqVO)); - }); - when(categoryService.getCategoryLevel(eq(createReqVO.getCategoryId()))).thenReturn(2); - Long spu = productSpuService.createSpu(createReqVO); - ProductSpuDO productSpuDO = productSpuMapper.selectById(spu); - assertPojoEquals(createReqVO, productSpuDO); - } - - @Test - public void testUpdateSpu_success() { - // 准备参数 - ProductSpuDO createReqVO = randomPojo(ProductSpuDO.class,o->{ - o.setCategoryId(generateId()); - o.setBrandId(generateId()); - o.setDeliveryTemplateId(generateId()); - o.setUnit(RandomUtil.randomInt(1,20)); // 限制商品单位范围 - o.setSort(RandomUtil.randomInt(1,100)); // 限制排序范围 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setVirtualSalesCount(generaInt()); // 限制范围为正整数 - o.setActivityOrders(newArrayList(1,3,2,4,5)); // 活动排序 - o.setPrice(generaInt()); // 限制范围为正整数 - o.setMarketPrice(generaInt()); // 限制范围为正整数 - o.setCostPrice(generaInt()); // 限制范围为正整数 - o.setStock(generaInt()); // 限制范围为正整数 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setSalesCount(generaInt()); // 限制范围为正整数 - o.setBrowseCount(generaInt()); // 限制范围为正整数 - }); - productSpuMapper.insert(createReqVO); - // 准备参数 - ProductSkuCreateOrUpdateReqVO skuCreateOrUpdateReqVO = randomPojo(ProductSkuCreateOrUpdateReqVO.class,o->{ - // 限制范围为正整数 - o.setCostPrice(generaInt()); - o.setPrice(generaInt()); - o.setMarketPrice(generaInt()); - o.setStock(generaInt()); - o.setWarnStock(10); - o.setFirstBrokeragePrice(generaInt()); - o.setSecondBrokeragePrice(generaInt()); - // 限制分数为两位数 - o.setWeight(RandomUtil.randomDouble(10,2, RoundingMode.HALF_UP)); - o.setVolume(RandomUtil.randomDouble(10,2, RoundingMode.HALF_UP)); - }); - // 准备参数 - ProductSpuUpdateReqVO reqVO = randomPojo(ProductSpuUpdateReqVO.class, o -> { - o.setId(createReqVO.getId()); // 设置更新的 ID - o.setCategoryId(generateId()); - o.setBrandId(generateId()); - o.setUnit(RandomUtil.randomInt(1,20)); // 限制商品单位范围 - o.setSort(RandomUtil.randomInt(1,100)); // 限制排序范围 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setVirtualSalesCount(generaInt()); // 限制范围为正整数 - o.setActivityOrders(newArrayList(1,3,2,4,5)); // 活动排序 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setSalesCount(generaInt()); // 限制范围为正整数 - o.setBrowseCount(generaInt()); // 限制范围为正整数 - o.setStatus(0); - o.setSkus(newArrayList(skuCreateOrUpdateReqVO,skuCreateOrUpdateReqVO,skuCreateOrUpdateReqVO)); - }); - when(categoryService.getCategoryLevel(eq(reqVO.getCategoryId()))).thenReturn(2); - // 调用 - productSpuService.updateSpu(reqVO); - // 校验是否更新正确 - ProductSpuDO spu = productSpuMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, spu); - } - - @Test - public void testValidateSpuExists_exception() { - ProductSpuUpdateReqVO reqVO = randomPojo(ProductSpuUpdateReqVO.class); - // 调用 - Assertions.assertThrows(ServiceException.class, () -> productSpuService.updateSpu(reqVO)); - } - - @Test - void deleteSpu() { - // 准备参数 - ProductSpuDO createReqVO = randomPojo(ProductSpuDO.class,o->{ - o.setCategoryId(generateId()); - o.setBrandId(generateId()); - o.setDeliveryTemplateId(generateId()); - o.setUnit(RandomUtil.randomInt(1,20)); // 限制商品单位范围 - o.setSort(RandomUtil.randomInt(1,100)); // 限制排序范围 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setVirtualSalesCount(generaInt()); // 限制范围为正整数 - o.setActivityOrders(newArrayList(1,3,2,4,5)); // 活动排序 - o.setPrice(generaInt()); // 限制范围为正整数 - o.setMarketPrice(generaInt()); // 限制范围为正整数 - o.setCostPrice(generaInt()); // 限制范围为正整数 - o.setStock(generaInt()); // 限制范围为正整数 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setSalesCount(generaInt()); // 限制范围为正整数 - o.setBrowseCount(generaInt()); // 限制范围为正整数 - o.setStatus(-1); // 加入回收站才可删除 - }); - productSpuMapper.insert(createReqVO); - - // 调用 - productSpuService.deleteSpu(createReqVO.getId()); - - Assertions.assertNull(productSpuMapper.selectById(createReqVO.getId())); - } - - @Test - void getSpu() { - // 准备参数 - ProductSpuDO createReqVO = randomPojo(ProductSpuDO.class,o->{ - o.setCategoryId(generateId()); - o.setBrandId(generateId()); - o.setDeliveryTemplateId(generateId()); - o.setUnit(RandomUtil.randomInt(1,20)); // 限制商品单位范围 - o.setSort(RandomUtil.randomInt(1,100)); // 限制排序范围 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setVirtualSalesCount(generaInt()); // 限制范围为正整数 - o.setActivityOrders(newArrayList(1,3,2,4,5)); // 活动排序 - o.setPrice(generaInt()); // 限制范围为正整数 - o.setMarketPrice(generaInt()); // 限制范围为正整数 - o.setCostPrice(generaInt()); // 限制范围为正整数 - o.setStock(generaInt()); // 限制范围为正整数 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setSalesCount(generaInt()); // 限制范围为正整数 - o.setBrowseCount(generaInt()); // 限制范围为正整数 - }); - productSpuMapper.insert(createReqVO); - - ProductSpuDO spu = productSpuService.getSpu(createReqVO.getId()); - assertPojoEquals(createReqVO, spu); - } - - @Test - void getSpuList() { - // 准备参数 - ArrayList createReqVOs = Lists.newArrayList(randomPojo(ProductSpuDO.class,o->{ - o.setCategoryId(generateId()); - o.setBrandId(generateId()); - o.setDeliveryTemplateId(generateId()); - o.setUnit(RandomUtil.randomInt(1,20)); // 限制商品单位范围 - o.setSort(RandomUtil.randomInt(1,100)); // 限制排序范围 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setVirtualSalesCount(generaInt()); // 限制范围为正整数 - o.setActivityOrders(newArrayList(1,3,2,4,5)); // 活动排序 - o.setPrice(generaInt()); // 限制范围为正整数 - o.setMarketPrice(generaInt()); // 限制范围为正整数 - o.setCostPrice(generaInt()); // 限制范围为正整数 - o.setStock(generaInt()); // 限制范围为正整数 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setSalesCount(generaInt()); // 限制范围为正整数 - o.setBrowseCount(generaInt()); // 限制范围为正整数 - }), randomPojo(ProductSpuDO.class,o->{ - o.setCategoryId(generateId()); - o.setBrandId(generateId()); - o.setDeliveryTemplateId(generateId()); - o.setUnit(RandomUtil.randomInt(1,20)); // 限制商品单位范围 - o.setSort(RandomUtil.randomInt(1,100)); // 限制排序范围 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setVirtualSalesCount(generaInt()); // 限制范围为正整数 - o.setActivityOrders(newArrayList(1,3,2,4,5)); // 活动排序 - o.setPrice(generaInt()); // 限制范围为正整数 - o.setMarketPrice(generaInt()); // 限制范围为正整数 - o.setCostPrice(generaInt()); // 限制范围为正整数 - o.setStock(generaInt()); // 限制范围为正整数 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setSalesCount(generaInt()); // 限制范围为正整数 - o.setBrowseCount(generaInt()); // 限制范围为正整数 - })); - productSpuMapper.insertBatch(createReqVOs); - - // 调用 - List spuList = productSpuService.getSpuList(createReqVOs.stream().map(ProductSpuDO::getId).collect(Collectors.toList())); - Assertions.assertIterableEquals(createReqVOs, spuList); - } - - @Test - void getSpuPage_alarmStock_empty() { - // 准备参数 - ArrayList createReqVOs = Lists.newArrayList(randomPojo(ProductSpuDO.class,o->{ - o.setCategoryId(generateId()); - o.setBrandId(generateId()); - o.setDeliveryTemplateId(generateId()); - o.setUnit(RandomUtil.randomInt(1,20)); // 限制商品单位范围 - o.setSort(RandomUtil.randomInt(1,100)); // 限制排序范围 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setVirtualSalesCount(generaInt()); // 限制范围为正整数 - o.setActivityOrders(newArrayList(1,3,2,4,5)); // 活动排序 - o.setPrice(generaInt()); // 限制范围为正整数 - o.setMarketPrice(generaInt()); // 限制范围为正整数 - o.setCostPrice(generaInt()); // 限制范围为正整数 - o.setStock(11); // 限制范围为正整数 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setSalesCount(generaInt()); // 限制范围为正整数 - o.setBrowseCount(generaInt()); // 限制范围为正整数 - }), randomPojo(ProductSpuDO.class,o->{ - o.setCategoryId(generateId()); - o.setBrandId(generateId()); - o.setDeliveryTemplateId(generateId()); - o.setUnit(RandomUtil.randomInt(1,20)); // 限制商品单位范围 - o.setSort(RandomUtil.randomInt(1,100)); // 限制排序范围 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setVirtualSalesCount(generaInt()); // 限制范围为正整数 - o.setActivityOrders(newArrayList(1,3,2,4,5)); // 活动排序 - o.setPrice(generaInt()); // 限制范围为正整数 - o.setMarketPrice(generaInt()); // 限制范围为正整数 - o.setCostPrice(generaInt()); // 限制范围为正整数 - o.setStock(11); // 限制范围为正整数 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setSalesCount(generaInt()); // 限制范围为正整数 - o.setBrowseCount(generaInt()); // 限制范围为正整数 - })); - productSpuMapper.insertBatch(createReqVOs); - // 调用 - ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO(); - productSpuPageReqVO.setTabType(ProductSpuPageReqVO.ALERT_STOCK); - - PageResult spuPage = productSpuService.getSpuPage(productSpuPageReqVO); - - PageResult result = PageResult.empty(); - Assertions.assertIterableEquals(result.getList(), spuPage.getList()); - assertEquals(spuPage.getTotal(), result.getTotal()); - } - - @Test - void getSpuPage_alarmStock() { - // 准备参数 - ArrayList createReqVOs = Lists.newArrayList(randomPojo(ProductSpuDO.class,o->{ - o.setCategoryId(generateId()); - o.setBrandId(generateId()); - o.setDeliveryTemplateId(generateId()); - o.setUnit(RandomUtil.randomInt(1,20)); // 限制商品单位范围 - o.setSort(RandomUtil.randomInt(1,100)); // 限制排序范围 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setVirtualSalesCount(generaInt()); // 限制范围为正整数 - o.setActivityOrders(newArrayList(1,3,2,4,5)); // 活动排序 - o.setPrice(generaInt()); // 限制范围为正整数 - o.setMarketPrice(generaInt()); // 限制范围为正整数 - o.setCostPrice(generaInt()); // 限制范围为正整数 - o.setStock(5); // 限制范围为正整数 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setSalesCount(generaInt()); // 限制范围为正整数 - o.setBrowseCount(generaInt()); // 限制范围为正整数 - }), randomPojo(ProductSpuDO.class,o->{ - o.setCategoryId(generateId()); - o.setBrandId(generateId()); - o.setDeliveryTemplateId(generateId()); - o.setUnit(RandomUtil.randomInt(1,20)); // 限制商品单位范围 - o.setSort(RandomUtil.randomInt(1,100)); // 限制排序范围 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setVirtualSalesCount(generaInt()); // 限制范围为正整数 - o.setActivityOrders(newArrayList(1,3,2,4,5)); // 活动排序 - o.setPrice(generaInt()); // 限制范围为正整数 - o.setMarketPrice(generaInt()); // 限制范围为正整数 - o.setCostPrice(generaInt()); // 限制范围为正整数 - o.setStock(9); // 限制范围为正整数 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setSalesCount(generaInt()); // 限制范围为正整数 - o.setBrowseCount(generaInt()); // 限制范围为正整数 - })); - productSpuMapper.insertBatch(createReqVOs); - // 调用 - ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO(); - productSpuPageReqVO.setTabType(ProductSpuPageReqVO.ALERT_STOCK); - PageResult spuPage = productSpuService.getSpuPage(productSpuPageReqVO); - assertEquals(createReqVOs.size(), spuPage.getTotal()); - } - - @Test - void testGetSpuPage() { - // 准备参数 - ProductSpuDO createReqVO = randomPojo(ProductSpuDO.class,o->{ - o.setCategoryId(generateId()); - o.setBrandId(generateId()); - o.setDeliveryTemplateId(generateId()); - o.setUnit(RandomUtil.randomInt(1,20)); // 限制商品单位范围 - o.setSort(RandomUtil.randomInt(1,100)); // 限制排序范围 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setVirtualSalesCount(generaInt()); // 限制范围为正整数 - o.setActivityOrders(newArrayList(1,3,2,4,5)); // 活动排序 - o.setPrice(generaInt()); // 限制范围为正整数 - o.setMarketPrice(generaInt()); // 限制范围为正整数 - o.setCostPrice(generaInt()); // 限制范围为正整数 - o.setStock(generaInt()); // 限制范围为正整数 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setSalesCount(generaInt()); // 限制范围为正整数 - o.setBrowseCount(generaInt()); // 限制范围为正整数 - }); - - // 准备参数 - productSpuMapper.insert(createReqVO); - // 测试 status 不匹配 - productSpuMapper.insert(cloneIgnoreId(createReqVO, o -> o.setStatus(ProductSpuStatusEnum.DISABLE.getStatus()))); - productSpuMapper.insert(cloneIgnoreId(createReqVO, o -> o.setStatus(ProductSpuStatusEnum.RECYCLE.getStatus()))); - // 测试 SpecType 不匹配 - productSpuMapper.insert(cloneIgnoreId(createReqVO, o -> o.setSpecType(true))); - // 测试 BrandId 不匹配 - productSpuMapper.insert(cloneIgnoreId(createReqVO, o -> o.setBrandId(generateId()))); - // 测试 CategoryId 不匹配 - productSpuMapper.insert(cloneIgnoreId(createReqVO, o -> o.setCategoryId(generateId()))); - - // 调用 - ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO(); - // 查询条件 按需打开 - //productSpuPageReqVO.setTabType(ProductSpuPageReqVO.ALERT_STOCK); - //productSpuPageReqVO.setTabType(ProductSpuPageReqVO.RECYCLE_BIN); - //productSpuPageReqVO.setTabType(ProductSpuPageReqVO.FOR_SALE); - //productSpuPageReqVO.setTabType(ProductSpuPageReqVO.IN_WAREHOUSE); - //productSpuPageReqVO.setTabType(ProductSpuPageReqVO.SOLD_OUT); - //productSpuPageReqVO.setName(createReqVO.getName()); - //productSpuPageReqVO.setCategoryId(createReqVO.getCategoryId()); - - PageResult spuPage = productSpuService.getSpuPage(productSpuPageReqVO); - - PageResult result = ProductSpuConvert.INSTANCE.convertPage(productSpuMapper.selectPage(productSpuPageReqVO)); - assertEquals(result.getTotal(), spuPage.getTotal()); - } - - /** - * 生成笛卡尔积 - * - * @param data 数据 - * @return 笛卡尔积 - */ - public static List> cartesianProduct(List> data) { - List> res = null; // 结果集(当前为第N个List,则该处存放的就为前N-1个List的笛卡尔积集合) - for (List list : data) { // 遍历数据 - List> temp = new ArrayList<>(); // 临时结果集,存放本次循环后生成的笛卡尔积集合 - if (res == null) { // 结果集为null表示第一次循环既list为第一个List - for (T t : list) { // 便利第一个List - // 利用stream生成List,第一个List的笛卡尔积集合约等于自己本身(需要创建一个List并把对象添加到当中),存放到临时结果集 - temp.add(Stream.of(t).collect(Collectors.toList())); - } - res = temp; // 将临时结果集赋值给结果集 - continue; // 跳过本次循环 - } - // 不为第一个List,计算前面的集合(笛卡尔积)和当前List的笛卡尔积集合 - for (T t : list) { // 便利 - for (List rl : res) { // 便利前面的笛卡尔积集合 - // 利用stream生成List - temp.add(Stream.concat(rl.stream(), Stream.of(t)).collect(Collectors.toList())); - } - } - res = temp; // 将临时结果集赋值给结果集 - } - // 返回结果 - return res; - } - - @Test - public void testUpdateSpuStock() { - // 准备参数 - Map stockIncrCounts = MapUtil.builder(1L, 10).put(2L, -20).build(); - // mock 方法(数据) - productSpuMapper.insert(randomPojo(ProductSpuDO.class, o ->{ - o.setCategoryId(generateId()); - o.setBrandId(generateId()); - o.setDeliveryTemplateId(generateId()); - o.setUnit(RandomUtil.randomInt(1,20)); // 限制商品单位范围 - o.setSort(RandomUtil.randomInt(1,100)); // 限制排序范围 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setVirtualSalesCount(generaInt()); // 限制范围为正整数 - o.setActivityOrders(newArrayList(1,3,2,4,5)); // 活动排序 - o.setPrice(generaInt()); // 限制范围为正整数 - o.setMarketPrice(generaInt()); // 限制范围为正整数 - o.setCostPrice(generaInt()); // 限制范围为正整数 - o.setStock(generaInt()); // 限制范围为正整数 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setSalesCount(generaInt()); // 限制范围为正整数 - o.setBrowseCount(generaInt()); // 限制范围为正整数 - o.setId(1L).setStock(20); - })); - productSpuMapper.insert(randomPojo(ProductSpuDO.class, o -> { - o.setCategoryId(generateId()); - o.setBrandId(generateId()); - o.setDeliveryTemplateId(generateId()); - o.setUnit(RandomUtil.randomInt(1,20)); // 限制商品单位范围 - o.setSort(RandomUtil.randomInt(1,100)); // 限制排序范围 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setVirtualSalesCount(generaInt()); // 限制范围为正整数 - o.setActivityOrders(newArrayList(1,3,2,4,5)); // 活动排序 - o.setPrice(generaInt()); // 限制范围为正整数 - o.setMarketPrice(generaInt()); // 限制范围为正整数 - o.setCostPrice(generaInt()); // 限制范围为正整数 - o.setStock(generaInt()); // 限制范围为正整数 - o.setGiveIntegral(generaInt()); // 限制范围为正整数 - o.setSalesCount(generaInt()); // 限制范围为正整数 - o.setBrowseCount(generaInt()); // 限制范围为正整数 - o.setId(2L).setStock(30); - })); - - // 调用 - productSpuService.updateSpuStock(stockIncrCounts); - // 断言 - assertEquals(productSpuService.getSpu(1L).getStock(), 30); - assertEquals(productSpuService.getSpu(2L).getStock(), 10); - } - -} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/AppCouponTemplateController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/AppCouponTemplateController.java index 3eb2178fa..809816e30 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/AppCouponTemplateController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/AppCouponTemplateController.java @@ -96,13 +96,13 @@ public class AppCouponTemplateController { */ private Long getProductScopeValue(Integer productScope, Long spuId) { // 通用券:没有商品范围 - if (productScope == null || ObjectUtils.equalsAny(productScope, PromotionProductScopeEnum.ALL.getScope(), null)) { + if (ObjectUtils.equalsAny(productScope, PromotionProductScopeEnum.ALL.getScope(), null)) { return null; } // 品类券:查询商品的品类编号 if (Objects.equals(productScope, PromotionProductScopeEnum.CATEGORY.getScope()) && spuId != null) { - return Optional.ofNullable(productSpuApi.getSpu(spuId).getCheckedData()) - .map(ProductSpuRespDTO::getCategoryId).orElse(null); + ProductSpuRespDTO spu = productSpuApi.getSpu(spuId).getCheckedData(); + return spu != null ? spu.getCategoryId() : null; } // 商品卷:直接返回 return spuId; diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java index 4b8cd3f68..c1c6c52ce 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java @@ -108,8 +108,8 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic } // 2. 校验商品 sku 都存在 - Map skuMap = convertMap(productSkuApi.getSkuListBySpuId(singletonList(spuId)).getCheckedData(), - ProductSkuRespDTO::getId); + List skus = productSkuApi.getSkuListBySpuId(singletonList(spuId)).getCheckedData(); + Map skuMap = convertMap(skus, ProductSkuRespDTO::getId); products.forEach(product -> { if (!skuMap.containsKey(product.getSkuId())) { throw exception(SKU_NOT_EXISTS); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java index bb997a012..d722f4676 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java @@ -7,7 +7,6 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.spring.SpringUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils; import cn.iocoder.yudao.module.member.api.user.MemberUserApi; import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; @@ -80,12 +79,11 @@ public class CouponServiceImpl implements CouponService { public PageResult getCouponPage(CouponPageReqVO pageReqVO) { // 获得用户编号 if (StrUtil.isNotEmpty(pageReqVO.getNickname())) { - Set userIds = CollectionUtils.convertSet(memberUserApi.getUserListByNickname(pageReqVO.getNickname()).getCheckedData(), - MemberUserRespDTO::getId); - if (CollUtil.isEmpty(userIds)) { + List users = memberUserApi.getUserListByNickname(pageReqVO.getNickname()).getCheckedData(); + if (CollUtil.isEmpty(users)) { return PageResult.empty(); } - pageReqVO.setUserIds(userIds); + pageReqVO.setUserIds(convertSet(users, MemberUserRespDTO::getId)); } // 分页查询 return couponMapper.selectPage(pageReqVO); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java index 745e50868..9aa9ee588 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java @@ -123,8 +123,8 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { } // 2. 校验商品 sku 都存在 - Map skuMap = convertMap(productSkuApi.getSkuListBySpuId(singletonList(spuId)).getCheckedData(), - ProductSkuRespDTO::getId); + List skus = productSkuApi.getSkuListBySpuId(singletonList(spuId)).getCheckedData(); + Map skuMap = convertMap(skus, ProductSkuRespDTO::getId); products.forEach(product -> { if (!skuMap.containsKey(product.getSkuId())) { throw exception(SKU_NOT_EXISTS); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/article/ArticleCategoryServiceImplTest.java b/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/article/ArticleCategoryServiceImplTest.java deleted file mode 100644 index 2f710d30e..000000000 --- a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/article/ArticleCategoryServiceImplTest.java +++ /dev/null @@ -1,139 +0,0 @@ -package cn.iocoder.yudao.module.promotion.service.article; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.promotion.controller.admin.article.vo.category.ArticleCategoryCreateReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.article.vo.category.ArticleCategoryPageReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.article.vo.category.ArticleCategoryUpdateReqVO; -import cn.iocoder.yudao.module.promotion.dal.dataobject.article.ArticleCategoryDO; -import cn.iocoder.yudao.module.promotion.dal.mysql.article.ArticleCategoryMapper; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.ARTICLE_CATEGORY_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; - -// TODO 芋艿:review 单测 -/** - * {@link ArticleCategoryServiceImpl} 的单元测试类 - * - * @author HUIHUI - */ -@Import(ArticleCategoryServiceImpl.class) -public class ArticleCategoryServiceImplTest extends BaseDbUnitTest { - - @Resource - private ArticleCategoryServiceImpl articleCategoryService; - - @Resource - private ArticleCategoryMapper articleCategoryMapper; - - @Test - public void testCreateArticleCategory_success() { - // 准备参数 - ArticleCategoryCreateReqVO reqVO = randomPojo(ArticleCategoryCreateReqVO.class); - - // 调用 - Long articleCategoryId = articleCategoryService.createArticleCategory(reqVO); - // 断言 - assertNotNull(articleCategoryId); - // 校验记录的属性是否正确 - ArticleCategoryDO articleCategory = articleCategoryMapper.selectById(articleCategoryId); - assertPojoEquals(reqVO, articleCategory); - } - - @Test - public void testUpdateArticleCategory_success() { - // mock 数据 - ArticleCategoryDO dbArticleCategory = randomPojo(ArticleCategoryDO.class); - articleCategoryMapper.insert(dbArticleCategory);// @Sql: 先插入出一条存在的数据 - // 准备参数 - ArticleCategoryUpdateReqVO reqVO = randomPojo(ArticleCategoryUpdateReqVO.class, o -> { - o.setId(dbArticleCategory.getId()); // 设置更新的 ID - }); - - // 调用 - articleCategoryService.updateArticleCategory(reqVO); - // 校验是否更新正确 - ArticleCategoryDO articleCategory = articleCategoryMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, articleCategory); - } - - @Test - public void testUpdateArticleCategory_notExists() { - // 准备参数 - ArticleCategoryUpdateReqVO reqVO = randomPojo(ArticleCategoryUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> articleCategoryService.updateArticleCategory(reqVO), ARTICLE_CATEGORY_NOT_EXISTS); - } - - @Test - public void testDeleteArticleCategory_success() { - // mock 数据 - ArticleCategoryDO dbArticleCategory = randomPojo(ArticleCategoryDO.class); - articleCategoryMapper.insert(dbArticleCategory);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbArticleCategory.getId(); - - // 调用 - articleCategoryService.deleteArticleCategory(id); - // 校验数据不存在了 - assertNull(articleCategoryMapper.selectById(id)); - } - - @Test - public void testDeleteArticleCategory_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> articleCategoryService.deleteArticleCategory(id), ARTICLE_CATEGORY_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 - public void testGetArticleCategoryPage() { - // mock 数据 - ArticleCategoryDO dbArticleCategory = randomPojo(ArticleCategoryDO.class, o -> { // 等会查询到 - o.setName(null); - o.setPicUrl(null); - o.setStatus(null); - o.setSort(null); - o.setCreateTime(null); - }); - articleCategoryMapper.insert(dbArticleCategory); - // 测试 name 不匹配 - articleCategoryMapper.insert(cloneIgnoreId(dbArticleCategory, o -> o.setName(null))); - // 测试 picUrl 不匹配 - articleCategoryMapper.insert(cloneIgnoreId(dbArticleCategory, o -> o.setPicUrl(null))); - // 测试 status 不匹配 - articleCategoryMapper.insert(cloneIgnoreId(dbArticleCategory, o -> o.setStatus(null))); - // 测试 sort 不匹配 - articleCategoryMapper.insert(cloneIgnoreId(dbArticleCategory, o -> o.setSort(null))); - // 测试 createTime 不匹配 - articleCategoryMapper.insert(cloneIgnoreId(dbArticleCategory, o -> o.setCreateTime(null))); - // 准备参数 - ArticleCategoryPageReqVO reqVO = new ArticleCategoryPageReqVO(); - reqVO.setName(null); - reqVO.setStatus(null); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = articleCategoryService.getArticleCategoryPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbArticleCategory, pageResult.getList().get(0)); - } - -} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/article/ArticleServiceImplTest.java b/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/article/ArticleServiceImplTest.java deleted file mode 100644 index 718651700..000000000 --- a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/article/ArticleServiceImplTest.java +++ /dev/null @@ -1,167 +0,0 @@ -package cn.iocoder.yudao.module.promotion.service.article; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.promotion.controller.admin.article.vo.article.ArticleCreateReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.article.vo.article.ArticlePageReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.article.vo.article.ArticleUpdateReqVO; -import cn.iocoder.yudao.module.promotion.dal.dataobject.article.ArticleDO; -import cn.iocoder.yudao.module.promotion.dal.mysql.article.ArticleMapper; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.ARTICLE_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; - -/** - * {@link ArticleServiceImpl} 的单元测试类 - * - * @author HUIHUI - */ -@Import(ArticleServiceImpl.class) -public class ArticleServiceImplTest extends BaseDbUnitTest { - - @Resource - private ArticleServiceImpl articleService; - - @Resource - private ArticleMapper articleMapper; - - @Test - public void testCreateArticle_success() { - // 准备参数 - ArticleCreateReqVO reqVO = randomPojo(ArticleCreateReqVO.class); - - // 调用 - Long articleId = articleService.createArticle(reqVO); - // 断言 - assertNotNull(articleId); - // 校验记录的属性是否正确 - ArticleDO article = articleMapper.selectById(articleId); - assertPojoEquals(reqVO, article); - } - - @Test - public void testUpdateArticle_success() { - // mock 数据 - ArticleDO dbArticle = randomPojo(ArticleDO.class); - articleMapper.insert(dbArticle);// @Sql: 先插入出一条存在的数据 - // 准备参数 - ArticleUpdateReqVO reqVO = randomPojo(ArticleUpdateReqVO.class, o -> { - o.setId(dbArticle.getId()); // 设置更新的 ID - }); - - // 调用 - articleService.updateArticle(reqVO); - // 校验是否更新正确 - ArticleDO article = articleMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, article); - } - - @Test - public void testUpdateArticle_notExists() { - // 准备参数 - ArticleUpdateReqVO reqVO = randomPojo(ArticleUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> articleService.updateArticle(reqVO), ARTICLE_NOT_EXISTS); - } - - @Test - public void testDeleteArticle_success() { - // mock 数据 - ArticleDO dbArticle = randomPojo(ArticleDO.class); - articleMapper.insert(dbArticle);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbArticle.getId(); - - // 调用 - articleService.deleteArticle(id); - // 校验数据不存在了 - assertNull(articleMapper.selectById(id)); - } - - @Test - public void testDeleteArticle_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> articleService.deleteArticle(id), ARTICLE_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 - public void testGetArticlePage() { - // mock 数据 - ArticleDO dbArticle = randomPojo(ArticleDO.class, o -> { // 等会查询到 - o.setCategoryId(null); - o.setTitle(null); - o.setAuthor(null); - o.setPicUrl(null); - o.setIntroduction(null); - o.setBrowseCount(null); - o.setSort(null); - o.setStatus(null); - o.setSpuId(null); - o.setRecommendHot(null); - o.setRecommendBanner(null); - o.setContent(null); - o.setCreateTime(null); - }); - articleMapper.insert(dbArticle); - // 测试 categoryId 不匹配 - articleMapper.insert(cloneIgnoreId(dbArticle, o -> o.setCategoryId(null))); - // 测试 title 不匹配 - articleMapper.insert(cloneIgnoreId(dbArticle, o -> o.setTitle(null))); - // 测试 author 不匹配 - articleMapper.insert(cloneIgnoreId(dbArticle, o -> o.setAuthor(null))); - // 测试 picUrl 不匹配 - articleMapper.insert(cloneIgnoreId(dbArticle, o -> o.setPicUrl(null))); - // 测试 introduction 不匹配 - articleMapper.insert(cloneIgnoreId(dbArticle, o -> o.setIntroduction(null))); - // 测试 browseCount 不匹配 - articleMapper.insert(cloneIgnoreId(dbArticle, o -> o.setBrowseCount(null))); - // 测试 sort 不匹配 - articleMapper.insert(cloneIgnoreId(dbArticle, o -> o.setSort(null))); - // 测试 status 不匹配 - articleMapper.insert(cloneIgnoreId(dbArticle, o -> o.setStatus(null))); - // 测试 spuId 不匹配 - articleMapper.insert(cloneIgnoreId(dbArticle, o -> o.setSpuId(null))); - // 测试 recommendHot 不匹配 - articleMapper.insert(cloneIgnoreId(dbArticle, o -> o.setRecommendHot(null))); - // 测试 recommendBanner 不匹配 - articleMapper.insert(cloneIgnoreId(dbArticle, o -> o.setRecommendBanner(null))); - // 测试 content 不匹配 - articleMapper.insert(cloneIgnoreId(dbArticle, o -> o.setContent(null))); - // 测试 createTime 不匹配 - articleMapper.insert(cloneIgnoreId(dbArticle, o -> o.setCreateTime(null))); - // 准备参数 - ArticlePageReqVO reqVO = new ArticlePageReqVO(); - reqVO.setCategoryId(null); - reqVO.setTitle(null); - reqVO.setAuthor(null); - reqVO.setStatus(null); - reqVO.setSpuId(null); - reqVO.setRecommendHot(null); - reqVO.setRecommendBanner(null); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = articleService.getArticlePage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbArticle, pageResult.getList().get(0)); - } - -} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImplTest.java b/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImplTest.java deleted file mode 100644 index f1605dec8..000000000 --- a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImplTest.java +++ /dev/null @@ -1,198 +0,0 @@ -package cn.iocoder.yudao.module.promotion.service.combination; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityCreateReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityUpdateReqVO; -import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; -import cn.iocoder.yudao.module.promotion.dal.mysql.combination.CombinationActivityMapper; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COMBINATION_ACTIVITY_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; - -// TODO 芋艿:等完成后,在补全单测 -/** - * {@link CombinationActivityServiceImpl} 的单元测试类 - * - * @author HUIHUI - */ -@Import(CombinationActivityServiceImpl.class) -public class CombinationActivityServiceImplTest extends BaseDbUnitTest { - - @Resource - private CombinationActivityServiceImpl combinationActivityService; - - @Resource - private CombinationActivityMapper combinationActivityMapper; - - @Test - public void testCreateCombinationActivity_success() { - // 准备参数 - CombinationActivityCreateReqVO reqVO = randomPojo(CombinationActivityCreateReqVO.class); - - // 调用 - Long combinationActivityId = combinationActivityService.createCombinationActivity(reqVO); - // 断言 - assertNotNull(combinationActivityId); - // 校验记录的属性是否正确 - CombinationActivityDO combinationActivity = combinationActivityMapper.selectById(combinationActivityId); - assertPojoEquals(reqVO, combinationActivity); - } - - @Test - public void testUpdateCombinationActivity_success() { - // mock 数据 - CombinationActivityDO dbCombinationActivity = randomPojo(CombinationActivityDO.class); - combinationActivityMapper.insert(dbCombinationActivity);// @Sql: 先插入出一条存在的数据 - // 准备参数 - CombinationActivityUpdateReqVO reqVO = randomPojo(CombinationActivityUpdateReqVO.class, o -> { - o.setId(dbCombinationActivity.getId()); // 设置更新的 ID - }); - - // 调用 - combinationActivityService.updateCombinationActivity(reqVO); - // 校验是否更新正确 - CombinationActivityDO combinationActivity = combinationActivityMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, combinationActivity); - } - - @Test - public void testUpdateCombinationActivity_notExists() { - // 准备参数 - CombinationActivityUpdateReqVO reqVO = randomPojo(CombinationActivityUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> combinationActivityService.updateCombinationActivity(reqVO), COMBINATION_ACTIVITY_NOT_EXISTS); - } - - @Test - public void testDeleteCombinationActivity_success() { - // mock 数据 - CombinationActivityDO dbCombinationActivity = randomPojo(CombinationActivityDO.class); - combinationActivityMapper.insert(dbCombinationActivity);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbCombinationActivity.getId(); - - // 调用 - combinationActivityService.deleteCombinationActivity(id); - // 校验数据不存在了 - assertNull(combinationActivityMapper.selectById(id)); - } - - @Test - public void testDeleteCombinationActivity_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> combinationActivityService.deleteCombinationActivity(id), COMBINATION_ACTIVITY_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 - public void testGetCombinationActivityPage() { - // mock 数据 - CombinationActivityDO dbCombinationActivity = randomPojo(CombinationActivityDO.class, o -> { // 等会查询到 - o.setName(null); - //o.setSpuId(null); - o.setTotalLimitCount(null); - o.setSingleLimitCount(null); - o.setStartTime(null); - o.setEndTime(null); - o.setUserSize(null); - o.setVirtualGroup(null); - o.setStatus(null); - o.setLimitDuration(null); - o.setCreateTime(null); - }); - combinationActivityMapper.insert(dbCombinationActivity); - // 测试 name 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setName(null))); - // 测试 spuId 不匹配 - //combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setSpuId(null))); - // 测试 totalLimitCount 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setTotalLimitCount(null))); - // 测试 singleLimitCount 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setSingleLimitCount(null))); - // 测试 startTime 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setStartTime(null))); - // 测试 endTime 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setEndTime(null))); - // 测试 userSize 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setUserSize(null))); - // 测试 virtualGroup 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setVirtualGroup(null))); - // 测试 status 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setStatus(null))); - // 测试 limitDuration 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setLimitDuration(null))); - // 测试 createTime 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setCreateTime(null))); - // 准备参数 - CombinationActivityPageReqVO reqVO = new CombinationActivityPageReqVO(); - reqVO.setName(null); - reqVO.setStatus(null); - - // 调用 - PageResult pageResult = combinationActivityService.getCombinationActivityPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbCombinationActivity, pageResult.getList().get(0)); - } - - @Test - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 - public void testGetCombinationActivityList() { - // mock 数据 - CombinationActivityDO dbCombinationActivity = randomPojo(CombinationActivityDO.class, o -> { // 等会查询到 - o.setName(null); - //o.setSpuId(null); - o.setTotalLimitCount(null); - o.setSingleLimitCount(null); - o.setStartTime(null); - o.setEndTime(null); - o.setUserSize(null); - o.setVirtualGroup(null); - o.setStatus(null); - o.setLimitDuration(null); - o.setCreateTime(null); - }); - combinationActivityMapper.insert(dbCombinationActivity); - // 测试 name 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setName(null))); - // 测试 spuId 不匹配 - //combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setSpuId(null))); - // 测试 totalLimitCount 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setTotalLimitCount(null))); - // 测试 singleLimitCount 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setSingleLimitCount(null))); - // 测试 startTime 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setStartTime(null))); - // 测试 endTime 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setEndTime(null))); - // 测试 userSize 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setUserSize(null))); - // 测试 virtualGroup 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setVirtualGroup(null))); - // 测试 status 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setStatus(null))); - // 测试 limitDuration 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setLimitDuration(null))); - // 测试 createTime 不匹配 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setCreateTime(null))); - - } - -} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImplTest.java b/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImplTest.java deleted file mode 100755 index 5a41563e7..000000000 --- a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImplTest.java +++ /dev/null @@ -1,147 +0,0 @@ -package cn.iocoder.yudao.module.promotion.service.coupon; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.template.CouponTemplateCreateReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.template.CouponTemplatePageReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.template.CouponTemplateUpdateReqVO; -import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponTemplateDO; -import cn.iocoder.yudao.module.promotion.dal.mysql.coupon.CouponTemplateMapper; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; -import cn.iocoder.yudao.module.promotion.enums.coupon.CouponTemplateValidityTypeEnum; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.time.LocalDateTime; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COUPON_TEMPLATE_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; - -/** -* {@link CouponTemplateServiceImpl} 的单元测试类 -* -* @author 芋道源码 -*/ -@Import(CouponTemplateServiceImpl.class) -public class CouponTemplateServiceImplTest extends BaseDbUnitTest { - - @Resource - private CouponTemplateServiceImpl couponTemplateService; - - @Resource - private CouponTemplateMapper couponTemplateMapper; - - @Test - public void testCreateCouponTemplate_success() { - // 准备参数 - CouponTemplateCreateReqVO reqVO = randomPojo(CouponTemplateCreateReqVO.class, - o -> o.setProductScope(randomEle(PromotionProductScopeEnum.values()).getScope()) - .setValidityType(randomEle(CouponTemplateValidityTypeEnum.values()).getType()) - .setDiscountType(randomEle(PromotionDiscountTypeEnum.values()).getType())); - - // 调用 - Long couponTemplateId = couponTemplateService.createCouponTemplate(reqVO); - // 断言 - assertNotNull(couponTemplateId); - // 校验记录的属性是否正确 - CouponTemplateDO couponTemplate = couponTemplateMapper.selectById(couponTemplateId); - assertPojoEquals(reqVO, couponTemplate); - } - - @Test - public void testUpdateCouponTemplate_success() { - // mock 数据 - CouponTemplateDO dbCouponTemplate = randomPojo(CouponTemplateDO.class); - couponTemplateMapper.insert(dbCouponTemplate);// @Sql: 先插入出一条存在的数据 - // 准备参数 - CouponTemplateUpdateReqVO reqVO = randomPojo(CouponTemplateUpdateReqVO.class, o -> { - o.setId(dbCouponTemplate.getId()); // 设置更新的 ID - // 其它通用字段 - o.setProductScope(randomEle(PromotionProductScopeEnum.values()).getScope()) - .setValidityType(randomEle(CouponTemplateValidityTypeEnum.values()).getType()) - .setDiscountType(randomEle(PromotionDiscountTypeEnum.values()).getType()); - }); - - // 调用 - couponTemplateService.updateCouponTemplate(reqVO); - // 校验是否更新正确 - CouponTemplateDO couponTemplate = couponTemplateMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, couponTemplate); - } - - @Test - public void testUpdateCouponTemplate_notExists() { - // 准备参数 - CouponTemplateUpdateReqVO reqVO = randomPojo(CouponTemplateUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> couponTemplateService.updateCouponTemplate(reqVO), COUPON_TEMPLATE_NOT_EXISTS); - } - - @Test - public void testDeleteCouponTemplate_success() { - // mock 数据 - CouponTemplateDO dbCouponTemplate = randomPojo(CouponTemplateDO.class); - couponTemplateMapper.insert(dbCouponTemplate);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbCouponTemplate.getId(); - - // 调用 - couponTemplateService.deleteCouponTemplate(id); - // 校验数据不存在了 - assertNull(couponTemplateMapper.selectById(id)); - } - - @Test - public void testDeleteCouponTemplate_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> couponTemplateService.deleteCouponTemplate(id), COUPON_TEMPLATE_NOT_EXISTS); - } - - @Test - public void testGetCouponTemplatePage() { - // mock 数据 - CouponTemplateDO dbCouponTemplate = randomPojo(CouponTemplateDO.class, o -> { // 等会查询到 - o.setName("芋艿"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setDiscountType(PromotionDiscountTypeEnum.PERCENT.getType()); - o.setCreateTime(buildTime(2022, 2, 2)); - }); - couponTemplateMapper.insert(dbCouponTemplate); - // 测试 name 不匹配 - couponTemplateMapper.insert(cloneIgnoreId(dbCouponTemplate, o -> o.setName("土豆"))); - // 测试 status 不匹配 - couponTemplateMapper.insert(cloneIgnoreId(dbCouponTemplate, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 type 不匹配 - couponTemplateMapper.insert(cloneIgnoreId(dbCouponTemplate, o -> o.setDiscountType(PromotionDiscountTypeEnum.PRICE.getType()))); - // 测试 createTime 不匹配 - couponTemplateMapper.insert(cloneIgnoreId(dbCouponTemplate, o -> o.setCreateTime(buildTime(2022, 1, 1)))); - // 准备参数 - CouponTemplatePageReqVO reqVO = new CouponTemplatePageReqVO(); - reqVO.setName("芋艿"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setDiscountType(PromotionDiscountTypeEnum.PERCENT.getType()); - reqVO.setCreateTime((new LocalDateTime[]{buildTime(2022, 2, 1), buildTime(2022, 2, 3)})); - - // 调用 - PageResult pageResult = couponTemplateService.getCouponTemplatePage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbCouponTemplate, pageResult.getList().get(0)); - } - -} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/decorate/DecorateComponentServiceImplTest.java b/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/decorate/DecorateComponentServiceImplTest.java deleted file mode 100644 index 95c542b67..000000000 --- a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/decorate/DecorateComponentServiceImplTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.iocoder.yudao.module.promotion.service.decorate; - -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.promotion.dal.mysql.decorate.DecorateComponentMapper; -import org.junit.jupiter.api.BeforeEach; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -// TODO @芋艿:后续 review 下 -/** - * @author jason - */ -public class DecorateComponentServiceImplTest extends BaseMockitoUnitTest { - - @InjectMocks - private DecorateComponentServiceImpl decoratePageService; - - @Mock - private DecorateComponentMapper decorateComponentMapper; - - @BeforeEach - public void init(){ - - } - -// @Test -// void testResp(){ -// List list = new ArrayList<>(1); -// DecorateComponentDO decorateDO = new DecorateComponentDO() -// .setPage(INDEX.getPage()).setValue("") -// .setCode(ROLLING_NEWS.getCode()).setId(1L); -// list.add(decorateDO); -// //mock 方法 -// Mockito.when(decorateComponentMapper.selectListByPageAndStatus(eq(1))).thenReturn(list); -// } -} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityServiceImplTest.java b/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityServiceImplTest.java deleted file mode 100755 index 5ad517463..000000000 --- a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityServiceImplTest.java +++ /dev/null @@ -1,210 +0,0 @@ -package cn.iocoder.yudao.module.promotion.service.discount; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityBaseVO; -import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityCreateReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityPageReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityUpdateReqVO; -import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountActivityDO; -import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountProductDO; -import cn.iocoder.yudao.module.promotion.dal.mysql.discount.DiscountActivityMapper; -import cn.iocoder.yudao.module.promotion.dal.mysql.discount.DiscountProductMapper; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionActivityStatusEnum; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.time.Duration; -import java.time.LocalDateTime; -import java.util.Date; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.addTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.DISCOUNT_ACTIVITY_NOT_EXISTS; -import static java.util.Arrays.asList; -import static org.junit.jupiter.api.Assertions.*; - -/** -* {@link DiscountActivityServiceImpl} 的单元测试类 -* -* @author 芋道源码 -*/ -@Import(DiscountActivityServiceImpl.class) -public class DiscountActivityServiceImplTest extends BaseDbUnitTest { - - @Resource - private DiscountActivityServiceImpl discountActivityService; - - @Resource - private DiscountActivityMapper discountActivityMapper; - @Resource - private DiscountProductMapper discountProductMapper; - - @Test - public void testCreateDiscountActivity_success() { - // 准备参数 - DiscountActivityCreateReqVO reqVO = randomPojo(DiscountActivityCreateReqVO.class, o -> { - // 用于触发进行中的状态 - o.setStartTime(addTime(Duration.ofDays(1))).setEndTime(addTime(Duration.ofDays(2))); - // 设置商品 - o.setProducts(asList(new DiscountActivityBaseVO.Product().setSpuId(1L).setSkuId(2L) - .setDiscountType(PromotionDiscountTypeEnum.PRICE.getType()).setDiscountPrice(3), - new DiscountActivityBaseVO.Product().setSpuId(10L).setSkuId(20L) - .setDiscountType(PromotionDiscountTypeEnum.PERCENT.getType()).setDiscountPercent(30))); - }); - - // 调用 - Long discountActivityId = discountActivityService.createDiscountActivity(reqVO); - // 断言 - assertNotNull(discountActivityId); - // 校验活动 - DiscountActivityDO discountActivity = discountActivityMapper.selectById(discountActivityId); - assertPojoEquals(reqVO, discountActivity); - assertEquals(discountActivity.getStatus(), PromotionActivityStatusEnum.WAIT.getStatus()); - // 校验商品 - List discountProducts = discountProductMapper.selectList(DiscountProductDO::getActivityId, discountActivity.getId()); - assertEquals(discountProducts.size(), reqVO.getProducts().size()); - for (int i = 0; i < reqVO.getProducts().size(); i++) { - DiscountActivityBaseVO.Product product = reqVO.getProducts().get(i); - DiscountProductDO discountProduct = discountProducts.get(i); - assertEquals(discountProduct.getActivityId(), discountActivity.getId()); - assertEquals(discountProduct.getSpuId(), product.getSpuId()); - assertEquals(discountProduct.getSkuId(), product.getSkuId()); - assertEquals(discountProduct.getDiscountType(), product.getDiscountType()); - assertEquals(discountProduct.getDiscountPrice(), product.getDiscountPrice()); - assertEquals(discountProduct.getDiscountPercent(), product.getDiscountPercent()); - } - } - - @Test - public void testUpdateDiscountActivity_success() { - // mock 数据(商品) - DiscountActivityDO dbDiscountActivity = randomPojo(DiscountActivityDO.class); - discountActivityMapper.insert(dbDiscountActivity);// @Sql: 先插入出一条存在的数据 - // mock 数据(活动) - DiscountProductDO dbDiscountProduct01 = randomPojo(DiscountProductDO.class, o -> o.setActivityId(dbDiscountActivity.getId()) - .setSpuId(1L).setSkuId(2L).setDiscountType(PromotionDiscountTypeEnum.PRICE.getType()).setDiscountPrice(3).setDiscountPercent(null)); - DiscountProductDO dbDiscountProduct02 = randomPojo(DiscountProductDO.class, o -> o.setActivityId(dbDiscountActivity.getId()) - .setSpuId(10L).setSkuId(20L).setDiscountType(PromotionDiscountTypeEnum.PERCENT.getType()).setDiscountPercent(30).setDiscountPrice(null)); - discountProductMapper.insert(dbDiscountProduct01); - discountProductMapper.insert(dbDiscountProduct02); - // 准备参数 - DiscountActivityUpdateReqVO reqVO = randomPojo(DiscountActivityUpdateReqVO.class, o -> { - o.setId(dbDiscountActivity.getId()); // 设置更新的 ID - // 用于触发进行中的状态 - o.setStartTime(addTime(Duration.ofDays(1))).setEndTime(addTime(Duration.ofDays(2))); - // 设置商品 - o.setProducts(asList(new DiscountActivityBaseVO.Product().setSpuId(1L).setSkuId(2L) - .setDiscountType(PromotionDiscountTypeEnum.PRICE.getType()).setDiscountPrice(3).setDiscountPercent(null), - new DiscountActivityBaseVO.Product().setSpuId(100L).setSkuId(200L) - .setDiscountType(PromotionDiscountTypeEnum.PERCENT.getType()).setDiscountPercent(30).setDiscountPrice(null))); - }); - - // 调用 - discountActivityService.updateDiscountActivity(reqVO); - // 校验活动 - DiscountActivityDO discountActivity = discountActivityMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, discountActivity); - assertEquals(discountActivity.getStatus(), PromotionActivityStatusEnum.WAIT.getStatus()); - // 校验商品 - List discountProducts = discountProductMapper.selectList(DiscountProductDO::getActivityId, discountActivity.getId()); - assertEquals(discountProducts.size(), reqVO.getProducts().size()); - for (int i = 0; i < reqVO.getProducts().size(); i++) { - DiscountActivityBaseVO.Product product = reqVO.getProducts().get(i); - DiscountProductDO discountProduct = discountProducts.get(i); - assertEquals(discountProduct.getActivityId(), discountActivity.getId()); - assertEquals(discountProduct.getSpuId(), product.getSpuId()); - assertEquals(discountProduct.getSkuId(), product.getSkuId()); - assertEquals(discountProduct.getDiscountType(), product.getDiscountType()); - assertEquals(discountProduct.getDiscountPrice(), product.getDiscountPrice()); - assertEquals(discountProduct.getDiscountPercent(), product.getDiscountPercent()); - } - } - - @Test - public void testCloseDiscountActivity() { - // mock 数据 - DiscountActivityDO dbDiscountActivity = randomPojo(DiscountActivityDO.class, - o -> o.setStatus(PromotionActivityStatusEnum.WAIT.getStatus())); - discountActivityMapper.insert(dbDiscountActivity);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbDiscountActivity.getId(); - - // 调用 - discountActivityService.closeRewardActivity(id); - // 校验状态 - DiscountActivityDO discountActivity = discountActivityMapper.selectById(id); - assertEquals(discountActivity.getStatus(), PromotionActivityStatusEnum.CLOSE.getStatus()); - } - - @Test - public void testUpdateDiscountActivity_notExists() { - // 准备参数 - DiscountActivityUpdateReqVO reqVO = randomPojo(DiscountActivityUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> discountActivityService.updateDiscountActivity(reqVO), DISCOUNT_ACTIVITY_NOT_EXISTS); - } - - @Test - public void testDeleteDiscountActivity_success() { - // mock 数据 - DiscountActivityDO dbDiscountActivity = randomPojo(DiscountActivityDO.class, - o -> o.setStatus(PromotionActivityStatusEnum.CLOSE.getStatus())); - discountActivityMapper.insert(dbDiscountActivity);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbDiscountActivity.getId(); - - // 调用 - discountActivityService.deleteDiscountActivity(id); - // 校验数据不存在了 - assertNull(discountActivityMapper.selectById(id)); - } - - @Test - public void testDeleteDiscountActivity_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> discountActivityService.deleteDiscountActivity(id), DISCOUNT_ACTIVITY_NOT_EXISTS); - } - - @Test - public void testGetDiscountActivityPage() { - // mock 数据 - DiscountActivityDO dbDiscountActivity = randomPojo(DiscountActivityDO.class, o -> { // 等会查询到 - o.setName("芋艿"); - o.setStatus(PromotionActivityStatusEnum.WAIT.getStatus()); - o.setCreateTime(buildTime(2021, 1, 15)); - }); - discountActivityMapper.insert(dbDiscountActivity); - // 测试 name 不匹配 - discountActivityMapper.insert(cloneIgnoreId(dbDiscountActivity, o -> o.setName("土豆"))); - // 测试 status 不匹配 - discountActivityMapper.insert(cloneIgnoreId(dbDiscountActivity, o -> o.setStatus(PromotionActivityStatusEnum.END.getStatus()))); - // 测试 createTime 不匹配 - discountActivityMapper.insert(cloneIgnoreId(dbDiscountActivity, o -> o.setCreateTime(buildTime(2021, 2, 10)))); - // 准备参数 - DiscountActivityPageReqVO reqVO = new DiscountActivityPageReqVO(); - reqVO.setName("芋艿"); - reqVO.setStatus(PromotionActivityStatusEnum.WAIT.getStatus()); - reqVO.setCreateTime((new LocalDateTime[]{buildTime(2021, 1, 1), buildTime(2021, 1, 31)})); - - // 调用 - PageResult pageResult = discountActivityService.getDiscountActivityPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbDiscountActivity, pageResult.getList().get(0)); - } - -} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityServiceImplTest.java b/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityServiceImplTest.java deleted file mode 100755 index f06104b22..000000000 --- a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityServiceImplTest.java +++ /dev/null @@ -1,218 +0,0 @@ -package cn.iocoder.yudao.module.promotion.service.reward; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityCreateReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityPageReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityUpdateReqVO; -import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO; -import cn.iocoder.yudao.module.promotion.dal.mysql.reward.RewardActivityMapper; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionActivityStatusEnum; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionConditionTypeEnum; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.time.Duration; -import java.util.Map; -import java.util.Set; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.addTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.REWARD_ACTIVITY_NOT_EXISTS; -import static java.util.Arrays.asList; -import static java.util.Collections.singletonList; -import static org.junit.jupiter.api.Assertions.*; - -/** -* {@link RewardActivityServiceImpl} 的单元测试类 -* -* @author 芋道源码 -*/ -@Import(RewardActivityServiceImpl.class) -public class RewardActivityServiceImplTest extends BaseDbUnitTest { - - @Resource - private RewardActivityServiceImpl rewardActivityService; - - @Resource - private RewardActivityMapper rewardActivityMapper; - - @Test - public void testCreateRewardActivity_success() { - // 准备参数 - RewardActivityCreateReqVO reqVO = randomPojo(RewardActivityCreateReqVO.class, o -> { - o.setConditionType(randomEle(PromotionConditionTypeEnum.values()).getType()); - o.setProductScope(randomEle(PromotionProductScopeEnum.values()).getScope()); - // 用于触发进行中的状态 - o.setStartTime(addTime(Duration.ofDays(1))).setEndTime(addTime(Duration.ofDays(2))); - }); - - // 调用 - Long rewardActivityId = rewardActivityService.createRewardActivity(reqVO); - // 断言 - assertNotNull(rewardActivityId); - // 校验记录的属性是否正确 - RewardActivityDO rewardActivity = rewardActivityMapper.selectById(rewardActivityId); - assertPojoEquals(reqVO, rewardActivity, "rules"); - assertEquals(rewardActivity.getStatus(), PromotionActivityStatusEnum.WAIT.getStatus()); - for (int i = 0; i < reqVO.getRules().size(); i++) { - assertPojoEquals(reqVO.getRules().get(i), rewardActivity.getRules().get(i)); - } - } - - @Test - public void testUpdateRewardActivity_success() { - // mock 数据 - RewardActivityDO dbRewardActivity = randomPojo(RewardActivityDO.class, o -> o.setStatus(PromotionActivityStatusEnum.WAIT.getStatus())); - rewardActivityMapper.insert(dbRewardActivity);// @Sql: 先插入出一条存在的数据 - // 准备参数 - RewardActivityUpdateReqVO reqVO = randomPojo(RewardActivityUpdateReqVO.class, o -> { - o.setId(dbRewardActivity.getId()); // 设置更新的 ID - o.setConditionType(randomEle(PromotionConditionTypeEnum.values()).getType()); - o.setProductScope(randomEle(PromotionProductScopeEnum.values()).getScope()); - // 用于触发进行中的状态 - o.setStartTime(addTime(Duration.ofDays(1))).setEndTime(addTime(Duration.ofDays(2))); - }); - - // 调用 - rewardActivityService.updateRewardActivity(reqVO); - // 校验是否更新正确 - RewardActivityDO rewardActivity = rewardActivityMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, rewardActivity, "rules"); - assertEquals(rewardActivity.getStatus(), PromotionActivityStatusEnum.WAIT.getStatus()); - for (int i = 0; i < reqVO.getRules().size(); i++) { - assertPojoEquals(reqVO.getRules().get(i), rewardActivity.getRules().get(i)); - } - } - - @Test - public void testCloseRewardActivity() { - // mock 数据 - RewardActivityDO dbRewardActivity = randomPojo(RewardActivityDO.class, o -> o.setStatus(PromotionActivityStatusEnum.WAIT.getStatus())); - rewardActivityMapper.insert(dbRewardActivity);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbRewardActivity.getId(); - - // 调用 - rewardActivityService.closeRewardActivity(id); - // 校验状态 - RewardActivityDO rewardActivity = rewardActivityMapper.selectById(id); - assertEquals(rewardActivity.getStatus(), PromotionActivityStatusEnum.CLOSE.getStatus()); - } - - @Test - public void testUpdateRewardActivity_notExists() { - // 准备参数 - RewardActivityUpdateReqVO reqVO = randomPojo(RewardActivityUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> rewardActivityService.updateRewardActivity(reqVO), REWARD_ACTIVITY_NOT_EXISTS); - } - - @Test - public void testDeleteRewardActivity_success() { - // mock 数据 - RewardActivityDO dbRewardActivity = randomPojo(RewardActivityDO.class, o -> o.setStatus(PromotionActivityStatusEnum.CLOSE.getStatus())); - rewardActivityMapper.insert(dbRewardActivity);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbRewardActivity.getId(); - - // 调用 - rewardActivityService.deleteRewardActivity(id); - // 校验数据不存在了 - assertNull(rewardActivityMapper.selectById(id)); - } - - @Test - public void testDeleteRewardActivity_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> rewardActivityService.deleteRewardActivity(id), REWARD_ACTIVITY_NOT_EXISTS); - } - - @Test - public void testGetRewardActivityPage() { - // mock 数据 - RewardActivityDO dbRewardActivity = randomPojo(RewardActivityDO.class, o -> { // 等会查询到 - o.setName("芋艿"); - o.setStatus(PromotionActivityStatusEnum.CLOSE.getStatus()); - }); - rewardActivityMapper.insert(dbRewardActivity); - // 测试 name 不匹配 - rewardActivityMapper.insert(cloneIgnoreId(dbRewardActivity, o -> o.setName("土豆"))); - // 测试 status 不匹配 - rewardActivityMapper.insert(cloneIgnoreId(dbRewardActivity, o -> o.setStatus(PromotionActivityStatusEnum.RUN.getStatus()))); - // 准备参数 - RewardActivityPageReqVO reqVO = new RewardActivityPageReqVO(); - reqVO.setName("芋艿"); - reqVO.setStatus(PromotionActivityStatusEnum.CLOSE.getStatus()); - - // 调用 - PageResult pageResult = rewardActivityService.getRewardActivityPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbRewardActivity, pageResult.getList().get(0), "rules"); - } - - @Test - public void testGetRewardActivities_all() { - // mock 数据 - RewardActivityDO allActivity = randomPojo(RewardActivityDO.class, o -> o.setStatus(PromotionActivityStatusEnum.RUN.getStatus()) - .setProductScope(PromotionProductScopeEnum.ALL.getScope())); - rewardActivityMapper.insert(allActivity); - RewardActivityDO productActivity = randomPojo(RewardActivityDO.class, o -> o.setStatus(PromotionActivityStatusEnum.RUN.getStatus()) - .setProductScope(PromotionProductScopeEnum.SPU.getScope()).setProductSpuIds(asList(1L, 2L))); - rewardActivityMapper.insert(productActivity); - // 准备参数 - Set spuIds = asSet(1L, 2L); - - // 调用 TODO getMatchRewardActivities 没有这个方法,但是找到了 getMatchRewardActivityList - //Map> matchRewardActivities = rewardActivityService.getMatchRewardActivities(spuIds); - // 断言 - //assertEquals(matchRewardActivities.size(), 1); - //Map.Entry> next = matchRewardActivities.entrySet().iterator().next(); - //assertPojoEquals(next.getKey(), allActivity); - //assertEquals(next.getValue(), spuIds); - } - - @Test - public void testGetRewardActivities_product() { - // mock 数据 - RewardActivityDO productActivity01 = randomPojo(RewardActivityDO.class, o -> o.setStatus(PromotionActivityStatusEnum.RUN.getStatus()) - .setProductScope(PromotionProductScopeEnum.SPU.getScope()).setProductSpuIds(asList(1L, 2L))); - rewardActivityMapper.insert(productActivity01); - RewardActivityDO productActivity02 = randomPojo(RewardActivityDO.class, o -> o.setStatus(PromotionActivityStatusEnum.RUN.getStatus()) - .setProductScope(PromotionProductScopeEnum.SPU.getScope()).setProductSpuIds(singletonList(3L))); - rewardActivityMapper.insert(productActivity02); - // 准备参数 - Set spuIds = asSet(1L, 2L, 3L); - - // 调用 TODO getMatchRewardActivities 没有这个方法,但是找到了 getMatchRewardActivityList - //Map> matchRewardActivities = rewardActivityService.getMatchRewardActivities(spuIds); - // 断言 - //assertEquals(matchRewardActivities.size(), 2); - //matchRewardActivities.forEach((activity, activitySpuIds) -> { - // if (activity.getId().equals(productActivity01.getId())) { - // assertPojoEquals(activity, productActivity01); - // assertEquals(activitySpuIds, asSet(1L, 2L)); - // } else if (activity.getId().equals(productActivity02.getId())) { - // assertPojoEquals(activity, productActivity02); - // assertEquals(activitySpuIds, asSet(3L)); - // } else { - // fail(); - // } - //}); - } - -} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/seckillactivity/SeckillActivityServiceImplTest.java b/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/seckillactivity/SeckillActivityServiceImplTest.java deleted file mode 100644 index 93dbecad9..000000000 --- a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/seckillactivity/SeckillActivityServiceImplTest.java +++ /dev/null @@ -1,171 +0,0 @@ -package cn.iocoder.yudao.module.promotion.service.seckillactivity; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityCreateReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityPageReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityUpdateReqVO; -import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillActivityDO; -import cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckillactivity.SeckillActivityMapper; -import cn.iocoder.yudao.module.promotion.service.seckill.SeckillActivityServiceImpl; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.SECKILL_ACTIVITY_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; - -/** -* {@link SeckillActivityServiceImpl} 的单元测试类 -* -* @author 芋道源码 -*/ -@Import(SeckillActivityServiceImpl.class) -@Disabled // TODO 芋艿:未来开启 -public class SeckillActivityServiceImplTest extends BaseDbUnitTest { - - @Resource - private SeckillActivityServiceImpl seckillActivityService; - - @Resource - private SeckillActivityMapper seckillActivityMapper; - - @Test - public void testCreateSeckillActivity_success() { - // 准备参数 - SeckillActivityCreateReqVO reqVO = randomPojo(SeckillActivityCreateReqVO.class); - - // 调用 - Long seckillActivityId = seckillActivityService.createSeckillActivity(reqVO); - // 断言 - assertNotNull(seckillActivityId); - // 校验记录的属性是否正确 - SeckillActivityDO seckillActivity = seckillActivityMapper.selectById(seckillActivityId); - assertPojoEquals(reqVO, seckillActivity); - } - - @Test - public void testUpdateSeckillActivity_success() { - // mock 数据 - SeckillActivityDO dbSeckillActivity = randomPojo(SeckillActivityDO.class); - seckillActivityMapper.insert(dbSeckillActivity);// @Sql: 先插入出一条存在的数据 - // 准备参数 - SeckillActivityUpdateReqVO reqVO = randomPojo(SeckillActivityUpdateReqVO.class, o -> { - o.setId(dbSeckillActivity.getId()); // 设置更新的 ID - }); - - // 调用 - seckillActivityService.updateSeckillActivity(reqVO); - // 校验是否更新正确 - SeckillActivityDO seckillActivity = seckillActivityMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, seckillActivity); - } - - @Test - public void testUpdateSeckillActivity_notExists() { - // 准备参数 - SeckillActivityUpdateReqVO reqVO = randomPojo(SeckillActivityUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> seckillActivityService.updateSeckillActivity(reqVO), SECKILL_ACTIVITY_NOT_EXISTS); - } - - @Test - public void testDeleteSeckillActivity_success() { - // mock 数据 - SeckillActivityDO dbSeckillActivity = randomPojo(SeckillActivityDO.class); - seckillActivityMapper.insert(dbSeckillActivity);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbSeckillActivity.getId(); - - // 调用 - seckillActivityService.deleteSeckillActivity(id); - // 校验数据不存在了 - assertNull(seckillActivityMapper.selectById(id)); - } - - @Test - public void testDeleteSeckillActivity_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> seckillActivityService.deleteSeckillActivity(id), SECKILL_ACTIVITY_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 - public void testGetSeckillActivityPage() { - // mock 数据 - SeckillActivityDO dbSeckillActivity = randomPojo(SeckillActivityDO.class, o -> { // 等会查询到 - o.setName(null); - o.setStatus(null); - o.setConfigIds(null); - o.setCreateTime(null); - }); - seckillActivityMapper.insert(dbSeckillActivity); - // 测试 name 不匹配 - seckillActivityMapper.insert(cloneIgnoreId(dbSeckillActivity, o -> o.setName(null))); - // 测试 status 不匹配 - seckillActivityMapper.insert(cloneIgnoreId(dbSeckillActivity, o -> o.setStatus(null))); - // 测试 timeId 不匹配 - seckillActivityMapper.insert(cloneIgnoreId(dbSeckillActivity, o -> o.setConfigIds(null))); - // 测试 createTime 不匹配 - seckillActivityMapper.insert(cloneIgnoreId(dbSeckillActivity, o -> o.setCreateTime(null))); - // 准备参数 - SeckillActivityPageReqVO reqVO = new SeckillActivityPageReqVO(); - reqVO.setName(null); - reqVO.setStatus(null); - reqVO.setConfigId(null); - reqVO.setCreateTime((new LocalDateTime[]{})); - - // 调用 - PageResult pageResult = seckillActivityService.getSeckillActivityPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbSeckillActivity, pageResult.getList().get(0)); - } - - @Test - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 - public void testGetSeckillActivityList() { - // mock 数据 - SeckillActivityDO dbSeckillActivity = randomPojo(SeckillActivityDO.class, o -> { // 等会查询到 - o.setName(null); - o.setStatus(null); - o.setConfigIds(null); - o.setCreateTime(null); - }); - seckillActivityMapper.insert(dbSeckillActivity); - // 测试 name 不匹配 - seckillActivityMapper.insert(cloneIgnoreId(dbSeckillActivity, o -> o.setName(null))); - // 测试 status 不匹配 - seckillActivityMapper.insert(cloneIgnoreId(dbSeckillActivity, o -> o.setStatus(null))); - // 测试 timeId 不匹配 - seckillActivityMapper.insert(cloneIgnoreId(dbSeckillActivity, o -> o.setConfigIds(null))); - // 测试 createTime 不匹配 - seckillActivityMapper.insert(cloneIgnoreId(dbSeckillActivity, o -> o.setCreateTime(null))); - // 准备参数 -// SeckillActivityExportReqVO reqVO = new SeckillActivityExportReqVO(); -// reqVO.setName(null); -// reqVO.setStatus(null); -// reqVO.setTimeId(null); -// reqVO.setCreateTime((new Date[]{})); -// -// // 调用 -// List list = seckillActivityService.getSeckillActivityList(reqVO); -// // 断言 -// assertEquals(1, list.size()); -// assertPojoEquals(dbSeckillActivity, list.get(0)); - } - -} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/seckillconfig/SeckillConfigServiceImplTest.java b/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/seckillconfig/SeckillConfigServiceImplTest.java deleted file mode 100644 index 28dee3382..000000000 --- a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/seckillconfig/SeckillConfigServiceImplTest.java +++ /dev/null @@ -1,190 +0,0 @@ -package cn.iocoder.yudao.module.promotion.service.seckillconfig; - -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.config.SeckillConfigCreateReqVO; -import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.config.SeckillConfigUpdateReqVO; -import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillConfigDO; -import cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckillconfig.SeckillConfigMapper; -import cn.iocoder.yudao.module.promotion.service.seckill.SeckillConfigServiceImpl; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.SECKILL_CONFIG_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; - -/** - * {@link SeckillConfigServiceImpl} 的单元测试类 - * - * @author 芋道源码 - */ -@Import(SeckillConfigServiceImpl.class) -@Disabled // TODO 芋艿:未来开启;后续要 review 下 -public class SeckillConfigServiceImplTest extends BaseDbUnitTest { - - @Resource - private SeckillConfigServiceImpl SeckillConfigService; - - @Resource - private SeckillConfigMapper seckillConfigMapper; - - @Resource - private ObjectMapper objectMapper; - - @Test - public void testJacksonSerializ() { - - // 准备参数 - SeckillConfigCreateReqVO reqVO = randomPojo(SeckillConfigCreateReqVO.class); -// ObjectMapper objectMapper = new ObjectMapper(); - try { - String string = objectMapper.writeValueAsString(reqVO); - System.out.println(string); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - - - } - - @Test - public void testCreateSeckillConfig_success() { - // 准备参数 - SeckillConfigCreateReqVO reqVO = randomPojo(SeckillConfigCreateReqVO.class); - - // 调用 - Long SeckillConfigId = SeckillConfigService.createSeckillConfig(reqVO); - // 断言 - assertNotNull(SeckillConfigId); - // 校验记录的属性是否正确 - SeckillConfigDO SeckillConfig = seckillConfigMapper.selectById(SeckillConfigId); - assertPojoEquals(reqVO, SeckillConfig); - } - - @Test - public void testUpdateSeckillConfig_success() { - // mock 数据 - SeckillConfigDO dbSeckillConfig = randomPojo(SeckillConfigDO.class); - seckillConfigMapper.insert(dbSeckillConfig);// @Sql: 先插入出一条存在的数据 - // 准备参数 - SeckillConfigUpdateReqVO reqVO = randomPojo(SeckillConfigUpdateReqVO.class, o -> { - o.setId(dbSeckillConfig.getId()); // 设置更新的 ID - }); - - // 调用 - SeckillConfigService.updateSeckillConfig(reqVO); - // 校验是否更新正确 - SeckillConfigDO SeckillConfig = seckillConfigMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, SeckillConfig); - } - - @Test - public void testUpdateSeckillConfig_notExists() { - // 准备参数 - SeckillConfigUpdateReqVO reqVO = randomPojo(SeckillConfigUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> SeckillConfigService.updateSeckillConfig(reqVO), SECKILL_CONFIG_NOT_EXISTS); - } - - @Test - public void testDeleteSeckillConfig_success() { - // mock 数据 - SeckillConfigDO dbSeckillConfig = randomPojo(SeckillConfigDO.class); - seckillConfigMapper.insert(dbSeckillConfig);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbSeckillConfig.getId(); - - // 调用 - SeckillConfigService.deleteSeckillConfig(id); - // 校验数据不存在了 - assertNull(seckillConfigMapper.selectById(id)); - } - - @Test - public void testDeleteSeckillConfig_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> SeckillConfigService.deleteSeckillConfig(id), SECKILL_CONFIG_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 - public void testGetSeckillConfigPage() { - // mock 数据 -// SeckillConfigDO dbSeckillConfig = randomPojo(SeckillConfigDO.class, o -> { // 等会查询到 -// o.setName(null); -// o.setStartTime(null); -// o.setEndTime(null); -// o.setCreateTime(null); -// }); -// seckillConfigMapper.insert(dbSeckillConfig); -// // 测试 name 不匹配 -// seckillConfigMapper.insert(cloneIgnoreId(dbSeckillConfig, o -> o.setName(null))); -// // 测试 startTime 不匹配 -// seckillConfigMapper.insert(cloneIgnoreId(dbSeckillConfig, o -> o.setStartTime(null))); -// // 测试 endTime 不匹配 -// seckillConfigMapper.insert(cloneIgnoreId(dbSeckillConfig, o -> o.setEndTime(null))); -// // 测试 createTime 不匹配 -// seckillConfigMapper.insert(cloneIgnoreId(dbSeckillConfig, o -> o.setCreateTime(null))); -// // 准备参数 -// SeckillConfigPageReqVO reqVO = new SeckillConfigPageReqVO(); -// reqVO.setName(null); -//// reqVO.setStartTime((new LocalTime())); -//// reqVO.setEndTime((new LocalTime[]{})); -//// reqVO.setCreateTime((new Date[]{})); -// -// // 调用 -// PageResult pageResult = SeckillConfigService.getSeckillConfigPage(reqVO); -// // 断言 -// assertEquals(1, pageResult.getTotal()); -// assertEquals(1, pageResult.getList().size()); -// assertPojoEquals(dbSeckillConfig, pageResult.getList().get(0)); - } - - @Test - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 - public void testGetSeckillConfigList() { - // mock 数据 - SeckillConfigDO dbSeckillConfig = randomPojo(SeckillConfigDO.class, o -> { // 等会查询到 - o.setName(null); - o.setStartTime(null); - o.setEndTime(null); - o.setCreateTime(null); - }); - seckillConfigMapper.insert(dbSeckillConfig); - // 测试 name 不匹配 - seckillConfigMapper.insert(cloneIgnoreId(dbSeckillConfig, o -> o.setName(null))); - // 测试 startTime 不匹配 - seckillConfigMapper.insert(cloneIgnoreId(dbSeckillConfig, o -> o.setStartTime(null))); - // 测试 endTime 不匹配 - seckillConfigMapper.insert(cloneIgnoreId(dbSeckillConfig, o -> o.setEndTime(null))); - // 测试 createTime 不匹配 - seckillConfigMapper.insert(cloneIgnoreId(dbSeckillConfig, o -> o.setCreateTime(null))); - // 准备参数 -// SeckillConfigExportReqVO reqVO = new SeckillConfigExportReqVO(); -// reqVO.setName(null); -// reqVO.setStartTime((new LocalTime[]{})); -// reqVO.setEndTime((new LocalTime[]{})); -// reqVO.setCreateTime((new Date[]{})); -// -// // 调用 -// List list = SeckillConfigService.getSeckillConfigList(reqVO); -// // 断言 -// assertEquals(1, list.size()); -// assertPojoEquals(dbSeckillConfig, list.get(0)); - } - -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/BrokerageUserController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/BrokerageUserController.java index 0f1224d30..7844b93e5 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/BrokerageUserController.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/BrokerageUserController.java @@ -77,6 +77,7 @@ public class BrokerageUserController { @PreAuthorize("@ss.hasPermission('trade:brokerage-user:query')") public CommonResult getBrokerageUser(@RequestParam("id") Long id) { BrokerageUserDO brokerageUser = brokerageUserService.getBrokerageUser(id); + // TODO @疯狂:是不是搞成一个统一的 convert? BrokerageUserRespVO respVO = BrokerageUserConvert.INSTANCE.convert(brokerageUser); return success(BrokerageUserConvert.INSTANCE.copyTo(memberUserApi.getUser(id).getCheckedData(), respVO)); } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserServiceImpl.java index 1d8d00753..2ed9ec2de 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserServiceImpl.java @@ -232,7 +232,8 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { return PageResult.empty(); } // 1.2 根据昵称过滤下级用户 - Map userMap = convertMapByFilter(memberUserApi.getUserList(childIds).getCheckedData(), + List users = memberUserApi.getUserList(childIds).getCheckedData(); + Map userMap = convertMapByFilter(users, user -> StrUtil.contains(user.getNickname(), pageReqVO.getNickname()), MemberUserRespDTO::getId); if (CollUtil.isEmpty(userMap)) { diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/framework/delivery/core/client/impl/Kd100ExpressClientIntegrationTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/framework/delivery/core/client/impl/Kd100ExpressClientIntegrationTest.java deleted file mode 100644 index 11b027bc8..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/framework/delivery/core/client/impl/Kd100ExpressClientIntegrationTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.iocoder.yudao.module.trade.framework.delivery.core.client.impl; - -import cn.iocoder.yudao.framework.common.util.json.JsonUtils; -import cn.iocoder.yudao.module.trade.framework.delivery.config.TradeExpressProperties; -import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackQueryReqDTO; -import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackRespDTO; -import cn.iocoder.yudao.module.trade.framework.delivery.core.client.impl.kd100.Kd100ExpressClient; -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.web.client.RestTemplateBuilder; -import org.springframework.web.client.RestTemplate; - -import java.util.List; - -/** - * {@link Kd100ExpressClient} 的集成测试 - * - * @author jason - */ -@Slf4j -public class Kd100ExpressClientIntegrationTest { - - private Kd100ExpressClient client; - - @BeforeEach - public void init() { - RestTemplate restTemplate = new RestTemplateBuilder().build(); - TradeExpressProperties.Kd100Config config = new TradeExpressProperties.Kd100Config() - .setKey("pLXUGAwK5305") - .setCustomer("E77DF18BE109F454A5CD319E44BF5177"); - client = new Kd100ExpressClient(restTemplate, config); - } - - @Test - @Disabled("集成测试,暂时忽略") - public void testGetExpressTrackList() { - ExpressTrackQueryReqDTO reqDTO = new ExpressTrackQueryReqDTO(); - reqDTO.setExpressCode("STO"); - reqDTO.setLogisticsNo("773220402764314"); - List tracks = client.getExpressTrackList(reqDTO); - System.out.println(JsonUtils.toJsonPrettyString(tracks)); - } - -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/framework/delivery/core/client/impl/KdNiaoExpressClientIntegrationTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/framework/delivery/core/client/impl/KdNiaoExpressClientIntegrationTest.java deleted file mode 100644 index a270c4b84..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/framework/delivery/core/client/impl/KdNiaoExpressClientIntegrationTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.iocoder.yudao.module.trade.framework.delivery.core.client.impl; - -import cn.iocoder.yudao.framework.common.util.json.JsonUtils; -import cn.iocoder.yudao.module.trade.framework.delivery.config.TradeExpressProperties; -import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackQueryReqDTO; -import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackRespDTO; -import cn.iocoder.yudao.module.trade.framework.delivery.core.client.impl.kdniao.KdNiaoExpressClient; -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.web.client.RestTemplateBuilder; -import org.springframework.web.client.RestTemplate; - -import java.util.List; - -/** - * {@link KdNiaoExpressClient} 的集成测试 - * - * @author jason - */ -@Slf4j -public class KdNiaoExpressClientIntegrationTest { - - private KdNiaoExpressClient client; - - @BeforeEach - public void init() { - RestTemplate restTemplate = new RestTemplateBuilder().build(); - TradeExpressProperties.KdNiaoConfig config = new TradeExpressProperties.KdNiaoConfig() - .setApiKey("cb022f1e-48f1-4c4a-a723-9001ac9676b8") - .setBusinessId("1809751"); - client = new KdNiaoExpressClient(restTemplate, config); - } - - @Test - @Disabled("集成测试,暂时忽略") - public void testGetExpressTrackList() { - ExpressTrackQueryReqDTO reqDTO = new ExpressTrackQueryReqDTO(); - reqDTO.setExpressCode("STO"); - reqDTO.setLogisticsNo("777168349863987"); - List tracks = client.getExpressTrackList(reqDTO); - System.out.println(JsonUtils.toJsonPrettyString(tracks)); - } - -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleServiceTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleServiceTest.java deleted file mode 100644 index 3f28bccb5..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleServiceTest.java +++ /dev/null @@ -1,156 +0,0 @@ -package cn.iocoder.yudao.module.trade.service.aftersale; - -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.pay.api.refund.PayRefundApi; -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.AfterSalePageReqVO; -import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleCreateReqVO; -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleDO; -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleLogDO; -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; -import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.AfterSaleLogMapper; -import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.AfterSaleMapper; -import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleStatusEnum; -import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleTypeEnum; -import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleWayEnum; -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum; -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum; -import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; -import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; -import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static java.util.Arrays.asList; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -/** - * {@link AfterSaleService} 的单元测试 - * - * @author 芋道源码 - */ -@Import(AfterSaleServiceImpl.class) -public class AfterSaleServiceTest extends BaseDbUnitTest { - - @Resource - private AfterSaleServiceImpl tradeAfterSaleService; - - @Resource - private AfterSaleMapper tradeAfterSaleMapper; - @Resource - private AfterSaleLogMapper tradeAfterSaleLogMapper; - - @MockBean - private TradeOrderUpdateService tradeOrderUpdateService; - @Resource - private TradeOrderQueryService tradeOrderQueryService; - - @MockBean - private PayRefundApi payRefundApi; - - @MockBean - private TradeOrderProperties tradeOrderProperties; - - @Test - public void testCreateAfterSale() { - // 准备参数 - Long userId = 1024L; - AppAfterSaleCreateReqVO createReqVO = new AppAfterSaleCreateReqVO() - .setOrderItemId(1L).setRefundPrice(100).setWay(AfterSaleWayEnum.RETURN_AND_REFUND.getWay()) - .setApplyReason("退钱").setApplyDescription("快退") - .setApplyPicUrls(asList("https://www.baidu.com/1.png", "https://www.baidu.com/2.png")); - // mock 方法(交易订单项) - TradeOrderItemDO orderItem = randomPojo(TradeOrderItemDO.class, o -> { - o.setOrderId(111L).setUserId(userId).setPayPrice(200); - o.setAfterSaleStatus(TradeOrderItemAfterSaleStatusEnum.NONE.getStatus()); - }); - when(tradeOrderQueryService.getOrderItem(eq(1024L), eq(1L))) - .thenReturn(orderItem); - // mock 方法(交易订单) - TradeOrderDO order = randomPojo(TradeOrderDO.class, o -> o.setStatus(TradeOrderStatusEnum.DELIVERED.getStatus()) - .setNo("202211301234")); - when(tradeOrderQueryService.getOrder(eq(1024L), eq(111L))).thenReturn(order); - - // 调用 - Long afterSaleId = tradeAfterSaleService.createAfterSale(userId, createReqVO); - // 断言(TradeAfterSaleDO) - AfterSaleDO afterSale = tradeAfterSaleMapper.selectById(afterSaleId); - assertNotNull(afterSale.getNo()); - assertEquals(afterSale.getStatus(), AfterSaleStatusEnum.APPLY.getStatus()); - assertEquals(afterSale.getType(), AfterSaleTypeEnum.IN_SALE.getType()); - assertPojoEquals(afterSale, createReqVO); - assertEquals(afterSale.getUserId(), 1024L); - assertPojoEquals(afterSale, orderItem, "id", "creator", "createTime", "updater", "updateTime"); - assertEquals(afterSale.getOrderNo(), "202211301234"); - assertNull(afterSale.getPayRefundId()); - assertNull(afterSale.getRefundTime()); - assertNull(afterSale.getLogisticsId()); - assertNull(afterSale.getLogisticsNo()); - assertNull(afterSale.getDeliveryTime()); - assertNull(afterSale.getReceiveReason()); - // 断言(TradeAfterSaleLogDO) - AfterSaleLogDO afterSaleLog = tradeAfterSaleLogMapper.selectList().get(0); - assertEquals(afterSaleLog.getUserId(), userId); - assertEquals(afterSaleLog.getUserType(), UserTypeEnum.MEMBER.getValue()); - assertEquals(afterSaleLog.getAfterSaleId(), afterSaleId); - assertPojoEquals(afterSale, orderItem, "id", "creator", "createTime", "updater", "updateTime"); - assertEquals(afterSaleLog.getContent(), AfterSaleStatusEnum.APPLY.getContent()); - } - - @Test - public void testGetAfterSalePage() { - // mock 数据 - AfterSaleDO dbAfterSale = randomPojo(AfterSaleDO.class, o -> { // 等会查询到 - o.setNo("202211190847450020500077"); - o.setStatus(AfterSaleStatusEnum.APPLY.getStatus()); - o.setWay(AfterSaleWayEnum.RETURN_AND_REFUND.getWay()); - o.setType(AfterSaleTypeEnum.IN_SALE.getType()); - o.setOrderNo("202211190847450020500011"); - o.setSpuName("芋艿"); - o.setCreateTime(buildTime(2022, 1, 15)); - }); - tradeAfterSaleMapper.insert(dbAfterSale); - // 测试 no 不匹配 - tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setNo("202211190847450020500066"))); - // 测试 status 不匹配 - tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setStatus(AfterSaleStatusEnum.SELLER_REFUSE.getStatus()))); - // 测试 way 不匹配 - tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setWay(AfterSaleWayEnum.REFUND.getWay()))); - // 测试 type 不匹配 - tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setType(AfterSaleTypeEnum.AFTER_SALE.getType()))); - // 测试 orderNo 不匹配 - tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setOrderNo("202211190847450020500022"))); - // 测试 spuName 不匹配 - tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setSpuName("土豆"))); - // 测试 createTime 不匹配 - tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setCreateTime(buildTime(2022, 1, 20)))); - // 准备参数 - AfterSalePageReqVO reqVO = new AfterSalePageReqVO(); - reqVO.setNo("20221119084745002050007"); - reqVO.setStatus(AfterSaleStatusEnum.APPLY.getStatus()); - reqVO.setWay(AfterSaleWayEnum.RETURN_AND_REFUND.getWay()); - reqVO.setType(AfterSaleTypeEnum.IN_SALE.getType()); - reqVO.setOrderNo("20221119084745002050001"); - reqVO.setSpuName("芋"); - reqVO.setCreateTime(new LocalDateTime[]{buildTime(2022, 1, 1), buildTime(2022, 1, 16)}); - - // 调用 - PageResult pageResult = tradeAfterSaleService.getAfterSalePage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbAfterSale, pageResult.getList().get(0)); - } -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImplTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImplTest.java deleted file mode 100644 index 99a815e5e..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImplTest.java +++ /dev/null @@ -1,118 +0,0 @@ -package cn.iocoder.yudao.module.trade.service.brokerage; - -import cn.hutool.core.util.NumberUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.record.BrokerageRecordPageReqVO; -import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageRecordDO; -import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.BrokerageRecordMapper; -import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageRecordServiceImpl; -import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageUserService; -import cn.iocoder.yudao.module.trade.service.config.TradeConfigService; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.math.RoundingMode; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.hutool.core.util.RandomUtil.randomInt; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomInteger; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.junit.jupiter.api.Assertions.assertEquals; - -// TODO @芋艿:单测后续看看 -/** - * {@link BrokerageRecordServiceImpl} 的单元测试类 - * - * @author owen - */ -@Import(BrokerageRecordServiceImpl.class) -public class BrokerageRecordServiceImplTest extends BaseDbUnitTest { - - @Resource - private BrokerageRecordServiceImpl brokerageRecordService; - @Resource - private BrokerageRecordMapper brokerageRecordMapper; - - @MockBean - private TradeConfigService tradeConfigService; - @MockBean - private BrokerageUserService brokerageUserService; - - @Test - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 - public void testGetBrokerageRecordPage() { - // mock 数据 - BrokerageRecordDO dbBrokerageRecord = randomPojo(BrokerageRecordDO.class, o -> { // 等会查询到 - o.setUserId(null); - o.setBizType(null); - o.setStatus(null); - o.setCreateTime(null); - }); - brokerageRecordMapper.insert(dbBrokerageRecord); - // 测试 userId 不匹配 - brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord, o -> o.setUserId(null))); - // 测试 bizType 不匹配 - brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord, o -> o.setBizType(null))); - // 测试 status 不匹配 - brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord, o -> o.setStatus(null))); - // 测试 createTime 不匹配 - brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord, o -> o.setCreateTime(null))); - // 准备参数 - BrokerageRecordPageReqVO reqVO = new BrokerageRecordPageReqVO(); - reqVO.setUserId(null); - reqVO.setBizType(null); - reqVO.setStatus(null); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = brokerageRecordService.getBrokerageRecordPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbBrokerageRecord, pageResult.getList().get(0)); - } - - @Test - public void testCalculatePrice_useFixedPrice() { - // mock 数据 - Integer payPrice = randomInteger(); - Integer percent = randomInt(1, 101); - Integer fixedPrice = randomInt(); - // 调用 - int brokerage = brokerageRecordService.calculatePrice(payPrice, percent, fixedPrice); - // 断言 - assertEquals(brokerage, fixedPrice); - } - - @Test - public void testCalculatePrice_usePercent() { - // mock 数据 - Integer payPrice = randomInteger(); - Integer percent = randomInt(1, 101); - Integer fixedPrice = randomEle(new Integer[]{0, null}); - System.out.println("fixedPrice=" + fixedPrice); - // 调用 - int brokerage = brokerageRecordService.calculatePrice(payPrice, percent, fixedPrice); - // 断言 - assertEquals(brokerage, NumberUtil.div(NumberUtil.mul(payPrice, percent), 100, 0, RoundingMode.DOWN).intValue()); - } - - @Test - public void testCalculatePrice_equalsZero() { - // mock 数据 - Integer payPrice = null; - Integer percent = null; - Integer fixedPrice = null; - // 调用 - int brokerage = brokerageRecordService.calculatePrice(payPrice, percent, fixedPrice); - // 断言 - assertEquals(brokerage, 0); - } -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserServiceImplTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserServiceImplTest.java deleted file mode 100644 index 88157c204..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserServiceImplTest.java +++ /dev/null @@ -1,66 +0,0 @@ -package cn.iocoder.yudao.module.trade.service.brokerage; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO; -import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; -import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.BrokerageUserMapper; -import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageUserServiceImpl; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.junit.jupiter.api.Assertions.assertEquals; - -// TODO @芋艿:单测后续看看 -/** - * {@link BrokerageUserServiceImpl} 的单元测试类 - * - * @author owen - */ -@Import(BrokerageUserServiceImpl.class) -public class BrokerageUserServiceImplTest extends BaseDbUnitTest { - - @Resource - private BrokerageUserServiceImpl brokerageUserService; - - @Resource - private BrokerageUserMapper brokerageUserMapper; - - @Test - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 - public void testGetBrokerageUserPage() { - // mock 数据 - BrokerageUserDO dbBrokerageUser = randomPojo(BrokerageUserDO.class, o -> { // 等会查询到 - o.setBindUserId(null); - o.setBrokerageEnabled(null); - o.setCreateTime(null); - }); - brokerageUserMapper.insert(dbBrokerageUser); - // 测试 brokerageUserId 不匹配 - brokerageUserMapper.insert(cloneIgnoreId(dbBrokerageUser, o -> o.setBindUserId(null))); - // 测试 brokerageEnabled 不匹配 - brokerageUserMapper.insert(cloneIgnoreId(dbBrokerageUser, o -> o.setBrokerageEnabled(null))); - // 测试 createTime 不匹配 - brokerageUserMapper.insert(cloneIgnoreId(dbBrokerageUser, o -> o.setCreateTime(null))); - // 准备参数 - BrokerageUserPageReqVO reqVO = new BrokerageUserPageReqVO(); - reqVO.setBindUserId(null); - reqVO.setBrokerageEnabled(null); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = brokerageUserService.getBrokerageUserPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbBrokerageUser, pageResult.getList().get(0)); - } - -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageWithdrawServiceImplTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageWithdrawServiceImplTest.java deleted file mode 100644 index af0cdbb1a..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageWithdrawServiceImplTest.java +++ /dev/null @@ -1,117 +0,0 @@ -package cn.iocoder.yudao.module.trade.service.brokerage; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi; -import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.withdraw.BrokerageWithdrawPageReqVO; -import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageWithdrawDO; -import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.BrokerageWithdrawMapper; -import cn.iocoder.yudao.module.trade.service.config.TradeConfigService; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import javax.validation.Validator; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.junit.jupiter.api.Assertions.assertEquals; - -// TODO 芋艿:后续 review -/** - * {@link BrokerageWithdrawServiceImpl} 的单元测试类 - * - * @author 芋道源码 - */ -@Import(BrokerageWithdrawServiceImpl.class) -public class BrokerageWithdrawServiceImplTest extends BaseDbUnitTest { - - @Resource - private BrokerageWithdrawServiceImpl brokerageWithdrawService; - - @Resource - private BrokerageWithdrawMapper brokerageWithdrawMapper; - - @MockBean - private BrokerageRecordService brokerageRecordService; - @MockBean - private BrokerageUserService brokerageUserService; - @MockBean - private TradeConfigService tradeConfigService; - - @MockBean - private NotifyMessageSendApi notifyMessageSendApi; - - @Resource - private Validator validator; - - @Test - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 - public void testGetBrokerageWithdrawPage() { - // mock 数据 - BrokerageWithdrawDO dbBrokerageWithdraw = randomPojo(BrokerageWithdrawDO.class, o -> { // 等会查询到 - o.setUserId(null); - o.setType(null); - o.setName(null); - o.setAccountNo(null); - o.setBankName(null); - o.setStatus(null); - o.setCreateTime(null); - }); - brokerageWithdrawMapper.insert(dbBrokerageWithdraw); - // 测试 userId 不匹配 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setUserId(null))); - // 测试 type 不匹配 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setType(null))); - // 测试 name 不匹配 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setName(null))); - // 测试 accountNo 不匹配 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setAccountNo(null))); - // 测试 bankName 不匹配 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setBankName(null))); - // 测试 status 不匹配 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setStatus(null))); - // 测试 auditReason 不匹配 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setAuditReason(null))); - // 测试 auditTime 不匹配 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setAuditTime(null))); - // 测试 remark 不匹配 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setRemark(null))); - // 测试 createTime 不匹配 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setCreateTime(null))); - // 准备参数 - BrokerageWithdrawPageReqVO reqVO = new BrokerageWithdrawPageReqVO(); - reqVO.setUserId(null); - reqVO.setType(null); - reqVO.setName(null); - reqVO.setAccountNo(null); - reqVO.setBankName(null); - reqVO.setStatus(null); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = brokerageWithdrawService.getBrokerageWithdrawPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbBrokerageWithdraw, pageResult.getList().get(0)); - } - - @Test - public void testCalculateFeePrice() { - Integer withdrawPrice = 100; - // 测试手续费比例未设置 - Integer percent = null; - assertEquals(brokerageWithdrawService.calculateFeePrice(withdrawPrice, percent), 0); - // 测试手续费给为0 - percent = 0; - assertEquals(brokerageWithdrawService.calculateFeePrice(withdrawPrice, percent), 0); - // 测试手续费 - percent = 1; - assertEquals(brokerageWithdrawService.calculateFeePrice(withdrawPrice, percent), 1); - } -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceTest.java deleted file mode 100644 index b0e901023..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceTest.java +++ /dev/null @@ -1,316 +0,0 @@ -package cn.iocoder.yudao.module.trade.service.order; - -import cn.iocoder.yudao.framework.common.enums.TerminalEnum; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.member.api.address.MemberAddressApi; -import cn.iocoder.yudao.module.member.api.address.dto.MemberAddressRespDTO; -import cn.iocoder.yudao.module.member.api.user.MemberUserApi; -import cn.iocoder.yudao.module.pay.api.order.PayOrderApi; -import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO; -import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; -import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO; -import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; -import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; -import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; -import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; -import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; -import cn.iocoder.yudao.module.promotion.api.coupon.CouponApi; -import cn.iocoder.yudao.module.promotion.api.price.PriceApi; -import cn.iocoder.yudao.module.promotion.api.price.dto.PriceCalculateRespDTO; -import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO; -import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO; -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; -import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderItemMapper; -import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderMapper; -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum; -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderRefundStatusEnum; -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum; -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; -import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderConfig; -import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.time.Duration; -import java.util.Arrays; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static java.util.Collections.singletonList; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.argThat; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -/** - * {@link TradeOrderUpdateServiceImpl} 的单元测试类 - * - * @author LeeYan9 - * @since 2022-09-07 - */ -@Import({TradeOrderUpdateServiceImpl.class, TradeOrderConfig.class}) -public class TradeOrderUpdateServiceTest extends BaseDbUnitTest { - - @Resource - private TradeOrderUpdateServiceImpl tradeOrderUpdateService; - - @Resource - private TradeOrderMapper tradeOrderMapper; - @Resource - private TradeOrderItemMapper tradeOrderItemMapper; - - @MockBean - private MemberUserApi memberUserApi; - @MockBean - private ProductSpuApi productSpuApi; - @MockBean - private ProductSkuApi productSkuApi; - @MockBean - private PriceApi priceApi; - @MockBean - private PayOrderApi payOrderApi; - @MockBean - private MemberAddressApi addressApi; - @MockBean - private CouponApi couponApi; - - @MockBean - private TradeOrderProperties tradeOrderProperties; - - @BeforeEach - public void setUp() { - when(tradeOrderProperties.getAppId()).thenReturn(888L); - when(tradeOrderProperties.getPayExpireTime()).thenReturn(Duration.ofDays(1)); - } - - @Test - public void testCreateTradeOrder_success() { - // 准备参数 - Long userId = 100L; - String userIp = "127.0.0.1"; -// AppTradeOrderCreateReqVO reqVO = new AppTradeOrderCreateReqVO() -// .setAddressId(10L).setCouponId(101L).setRemark("我是备注").setFromCart(true) -// .setItems(Arrays.asList(new AppTradeOrderCreateReqVO.Item().setSkuId(1L).setCount(3), -// new AppTradeOrderCreateReqVO.Item().setSkuId(2L).setCount(4))); - AppTradeOrderCreateReqVO reqVO = null; - // TODO 芋艿:重新高下 - // mock 方法(商品 SKU 检查) - ProductSkuRespDTO sku01 = randomPojo(ProductSkuRespDTO.class, o -> o.setId(1L).setSpuId(11L) - .setPrice(50).setStock(100) - .setProperties(singletonList(new ProductPropertyValueDetailRespDTO().setPropertyId(111L).setValueId(222L)))); - ProductSkuRespDTO sku02 = randomPojo(ProductSkuRespDTO.class, o -> o.setId(2L).setSpuId(21L) - .setPrice(20).setStock(50)) - .setProperties(singletonList(new ProductPropertyValueDetailRespDTO().setPropertyId(333L).setValueId(444L))); - when(productSkuApi.getSkuList(eq(asSet(1L, 2L)))).thenReturn(Arrays.asList(sku01, sku02)); - // mock 方法(商品 SPU 检查) - ProductSpuRespDTO spu01 = randomPojo(ProductSpuRespDTO.class, o -> o.setId(11L) - .setStatus(ProductSpuStatusEnum.ENABLE.getStatus()).setName("商品 1")); - ProductSpuRespDTO spu02 = randomPojo(ProductSpuRespDTO.class, o -> o.setId(21L) - .setStatus(ProductSpuStatusEnum.ENABLE.getStatus())); - when(productSpuApi.getSpuList(eq(asSet(11L, 21L)))).thenReturn(Arrays.asList(spu01, spu02)); - // mock 方法(用户收件地址的校验) - MemberAddressRespDTO addressRespDTO = new MemberAddressRespDTO().setId(10L).setUserId(userId).setName("芋艿") - .setMobile("15601691300").setAreaId(3306).setDetailAddress("土豆村"); - when(addressApi.getAddress(eq(10L), eq(userId))).thenReturn(addressRespDTO); - // mock 方法(价格计算) - PriceCalculateRespDTO.OrderItem priceOrderItem01 = new PriceCalculateRespDTO.OrderItem() - .setSpuId(11L).setSkuId(1L).setCount(3).setOriginalPrice(150).setOriginalUnitPrice(50) - .setDiscountPrice(20).setPayPrice(130).setOrderPartPrice(7).setOrderDividePrice(35); - PriceCalculateRespDTO.OrderItem priceOrderItem02 = new PriceCalculateRespDTO.OrderItem() - .setSpuId(21L).setSkuId(2L).setCount(4).setOriginalPrice(80).setOriginalUnitPrice(20) - .setDiscountPrice(40).setPayPrice(40).setOrderPartPrice(15).setOrderDividePrice(25); - PriceCalculateRespDTO.Order priceOrder = new PriceCalculateRespDTO.Order() - .setTotalPrice(230).setDiscountPrice(0).setCouponPrice(30) - .setPointPrice(10).setDeliveryPrice(20).setPayPrice(80).setCouponId(101L).setCouponPrice(30) - .setItems(Arrays.asList(priceOrderItem01, priceOrderItem02)); - when(priceApi.calculatePrice(argThat(priceCalculateReqDTO -> { - assertEquals(priceCalculateReqDTO.getUserId(), 100L); - assertEquals(priceCalculateReqDTO.getCouponId(), 101L); - assertEquals(priceCalculateReqDTO.getItems().get(0).getSkuId(), 1L); - assertEquals(priceCalculateReqDTO.getItems().get(0).getCount(), 3); - assertEquals(priceCalculateReqDTO.getItems().get(1).getSkuId(), 2L); - assertEquals(priceCalculateReqDTO.getItems().get(1).getCount(), 4); - return true; - }))).thenReturn(new PriceCalculateRespDTO().setOrder(priceOrder)); - // mock 方法(创建支付单) - when(payOrderApi.createOrder(argThat(createReqDTO -> { - assertEquals(createReqDTO.getAppId(), 888L); - assertEquals(createReqDTO.getUserIp(), userIp); - assertNotNull(createReqDTO.getMerchantOrderId()); // 由于 tradeOrderId 后生成,只能校验非空 - assertEquals(createReqDTO.getSubject(), "商品 1 等多件"); - assertNull(createReqDTO.getBody()); - assertEquals(createReqDTO.getPrice(), 80); - assertNotNull(createReqDTO.getExpireTime()); - return true; - }))).thenReturn(1000L); - - // 调用方法 - TradeOrderDO order = tradeOrderUpdateService.createOrder(userId, userIp, reqVO, null); - // 断言 TradeOrderDO 订单 - List tradeOrderDOs = tradeOrderMapper.selectList(); - assertEquals(tradeOrderDOs.size(), 1); - TradeOrderDO tradeOrderDO = tradeOrderDOs.get(0); - assertEquals(tradeOrderDO.getId(), order.getId()); - assertNotNull(tradeOrderDO.getNo()); - assertEquals(tradeOrderDO.getType(), TradeOrderTypeEnum.NORMAL.getType()); - assertEquals(tradeOrderDO.getTerminal(), TerminalEnum.H5.getTerminal()); - assertEquals(tradeOrderDO.getUserId(), userId); - assertEquals(tradeOrderDO.getUserIp(), userIp); - assertEquals(tradeOrderDO.getStatus(), TradeOrderStatusEnum.UNPAID.getStatus()); - assertEquals(tradeOrderDO.getProductCount(), 7); - assertNull(tradeOrderDO.getFinishTime()); - assertNull(tradeOrderDO.getCancelTime()); - assertNull(tradeOrderDO.getCancelType()); - assertEquals(tradeOrderDO.getUserRemark(), "我是备注"); - assertNull(tradeOrderDO.getRemark()); - assertFalse(tradeOrderDO.getPayStatus()); - assertNull(tradeOrderDO.getPayTime()); - assertEquals(tradeOrderDO.getTotalPrice(), 230); - assertEquals(tradeOrderDO.getDiscountPrice(), 0); - assertEquals(tradeOrderDO.getAdjustPrice(), 0); - assertEquals(tradeOrderDO.getPayPrice(), 80); - assertEquals(tradeOrderDO.getPayOrderId(), 1000L); - assertNull(tradeOrderDO.getPayChannelCode()); - assertNull(tradeOrderDO.getLogisticsId()); - assertNull(tradeOrderDO.getDeliveryTime()); - assertNull(tradeOrderDO.getReceiveTime()); - assertEquals(tradeOrderDO.getReceiverName(), "芋艿"); - assertEquals(tradeOrderDO.getReceiverMobile(), "15601691300"); - assertEquals(tradeOrderDO.getReceiverAreaId(), 3306); - assertEquals(tradeOrderDO.getReceiverDetailAddress(), "土豆村"); - assertEquals(tradeOrderDO.getRefundStatus(), TradeOrderRefundStatusEnum.NONE.getStatus()); - assertEquals(tradeOrderDO.getRefundPrice(), 0); - assertEquals(tradeOrderDO.getCouponPrice(), 30); - assertEquals(tradeOrderDO.getPointPrice(), 10); - // 断言 TradeOrderItemDO 订单(第 1 个) - List tradeOrderItemDOs = tradeOrderItemMapper.selectList(); - assertEquals(tradeOrderItemDOs.size(), 2); - TradeOrderItemDO tradeOrderItemDO01 = tradeOrderItemDOs.get(0); - assertNotNull(tradeOrderItemDO01.getId()); - assertEquals(tradeOrderItemDO01.getUserId(), userId); - assertEquals(tradeOrderItemDO01.getOrderId(), order.getId()); - assertEquals(tradeOrderItemDO01.getSpuId(), 11L); - assertEquals(tradeOrderItemDO01.getSkuId(), 1L); - assertEquals(tradeOrderItemDO01.getProperties().size(), 1); - assertEquals(tradeOrderItemDO01.getProperties().get(0).getPropertyId(), 111L); - assertEquals(tradeOrderItemDO01.getProperties().get(0).getValueId(), 222L); - //assertEquals(tradeOrderItemDO01.getSpuName(), sku01.getSpuName()); TODO 找不到spuName - assertEquals(tradeOrderItemDO01.getPicUrl(), sku01.getPicUrl()); - assertEquals(tradeOrderItemDO01.getCount(), 3); -// assertEquals(tradeOrderItemDO01.getOriginalPrice(), 150); - assertEquals(tradeOrderItemDO01.getPrice(), 50); - assertEquals(tradeOrderItemDO01.getDiscountPrice(), 20); - assertEquals(tradeOrderItemDO01.getPayPrice(), 130); - assertEquals(tradeOrderItemDO01.getAfterSaleStatus(), TradeOrderItemAfterSaleStatusEnum.NONE.getStatus()); - // 断言 TradeOrderItemDO 订单(第 2 个) - TradeOrderItemDO tradeOrderItemDO02 = tradeOrderItemDOs.get(1); - assertNotNull(tradeOrderItemDO02.getId()); - assertEquals(tradeOrderItemDO02.getUserId(), userId); - assertEquals(tradeOrderItemDO02.getOrderId(), order.getId()); - assertEquals(tradeOrderItemDO02.getSpuId(), 21L); - assertEquals(tradeOrderItemDO02.getSkuId(), 2L); - assertEquals(tradeOrderItemDO02.getProperties().size(), 1); - assertEquals(tradeOrderItemDO02.getProperties().get(0).getPropertyId(), 333L); - assertEquals(tradeOrderItemDO02.getProperties().get(0).getValueId(), 444L); - //assertEquals(tradeOrderItemDO02.getSpuName(), sku02.getSpuName()); TODO 找不到spuName - assertEquals(tradeOrderItemDO02.getPicUrl(), sku02.getPicUrl()); - assertEquals(tradeOrderItemDO02.getCount(), 4); -// assertEquals(tradeOrderItemDO02.getOriginalPrice(), 80); - assertEquals(tradeOrderItemDO02.getPrice(), 20); - assertEquals(tradeOrderItemDO02.getDiscountPrice(), 40); - assertEquals(tradeOrderItemDO02.getPayPrice(), 40); - assertEquals(tradeOrderItemDO02.getAfterSaleStatus(), TradeOrderItemAfterSaleStatusEnum.NONE.getStatus()); - // 校验调用 - verify(productSkuApi).updateSkuStock(argThat(updateStockReqDTO -> { - assertEquals(updateStockReqDTO.getItems().size(), 2); - assertEquals(updateStockReqDTO.getItems().get(0).getId(), 1L); - assertEquals(updateStockReqDTO.getItems().get(0).getIncrCount(), 3); - assertEquals(updateStockReqDTO.getItems().get(1).getId(), 2L); - assertEquals(updateStockReqDTO.getItems().get(1).getIncrCount(), 4); - return true; - })); - verify(couponApi).useCoupon(argThat(reqDTO -> { - assertEquals(reqDTO.getId(), reqVO.getCouponId()); - assertEquals(reqDTO.getUserId(), userId); - assertEquals(reqDTO.getOrderId(), order.getId()); - return true; - })); - } - - @Test - public void testUpdateOrderPaid() { - // mock 数据(TradeOrder) - TradeOrderDO order = randomPojo(TradeOrderDO.class, o -> { - o.setId(1L).setStatus(TradeOrderStatusEnum.UNPAID.getStatus()); - o.setPayOrderId(10L).setPayStatus(false).setPayPrice(100).setPayTime(null); - }); - tradeOrderMapper.insert(order); - // 准备参数 - Long id = 1L; - Long payOrderId = 10L; - // mock 方法(支付单) - when(payOrderApi.getOrder(eq(10L))).thenReturn(randomPojo(PayOrderRespDTO.class, - o -> o.setStatus(PayOrderStatusEnum.SUCCESS.getStatus()).setChannelCode("wx_pub") - .setMerchantOrderId("1")).setPrice(100)); - - // 调用 - tradeOrderUpdateService.updateOrderPaid(id, payOrderId); - // 断言 - TradeOrderDO dbOrder = tradeOrderMapper.selectById(id); - assertEquals(dbOrder.getStatus(), TradeOrderStatusEnum.UNDELIVERED.getStatus()); - assertTrue(dbOrder.getPayStatus()); - assertNotNull(dbOrder.getPayTime()); - assertEquals(dbOrder.getPayChannelCode(), "wx_pub"); - } - - @Test - public void testDeliveryOrder() { - // mock 数据(TradeOrder) - TradeOrderDO order = randomPojo(TradeOrderDO.class, o -> { - o.setId(1L).setStatus(TradeOrderStatusEnum.UNDELIVERED.getStatus()); - o.setLogisticsId(null).setLogisticsNo(null).setDeliveryTime(null); - }); - tradeOrderMapper.insert(order); - // 准备参数 - TradeOrderDeliveryReqVO deliveryReqVO = new TradeOrderDeliveryReqVO().setId(1L) - .setLogisticsId(10L).setLogisticsNo("100"); - // mock 方法(支付单) - - // 调用 - tradeOrderUpdateService.deliveryOrder(deliveryReqVO); - // 断言 - TradeOrderDO dbOrder = tradeOrderMapper.selectById(1L); - assertEquals(dbOrder.getStatus(), TradeOrderStatusEnum.DELIVERED.getStatus()); - assertPojoEquals(dbOrder, deliveryReqVO); - assertNotNull(dbOrder.getDeliveryTime()); - } - - @Test - public void testReceiveOrder() { - // mock 数据(TradeOrder) - TradeOrderDO order = randomPojo(TradeOrderDO.class, o -> { - o.setId(1L).setUserId(10L).setStatus(TradeOrderStatusEnum.DELIVERED.getStatus()); - o.setReceiveTime(null); - }); - tradeOrderMapper.insert(order); - // 准备参数 - Long id = 1L; - Long userId = 10L; - // mock 方法(支付单) - - // 调用 - tradeOrderUpdateService.receiveOrderByMember(userId, id); - // 断言 - TradeOrderDO dbOrder = tradeOrderMapper.selectById(1L); - assertEquals(dbOrder.getStatus(), TradeOrderStatusEnum.COMPLETED.getStatus()); - assertNotNull(dbOrder.getReceiveTime()); - } - -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/TradePriceServiceImplTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/TradePriceServiceImplTest.java deleted file mode 100644 index b998f87b1..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/TradePriceServiceImplTest.java +++ /dev/null @@ -1,135 +0,0 @@ -package cn.iocoder.yudao.module.trade.service.price; - -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO; -import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; -import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; -import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; -import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; -import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; -import cn.iocoder.yudao.module.trade.service.price.calculator.TradePriceCalculator; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; - -import java.util.Arrays; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; -import static java.util.Collections.singletonList; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.when; - -/** - * {@link TradePriceServiceImpl} 的单元测试 - * - * @author 芋道源码 - */ -public class TradePriceServiceImplTest extends BaseMockitoUnitTest { - - @InjectMocks - private TradePriceServiceImpl tradePriceService; - - @Mock - private ProductSkuApi productSkuApi; - @Mock - private ProductSpuApi productSpuApi; - @Mock - private List priceCalculators; - - @Test - public void testCalculatePrice() { - // 准备参数 - TradePriceCalculateReqBO calculateReqBO = new TradePriceCalculateReqBO() - .setUserId(10L) - .setCouponId(20L).setAddressId(30L) - .setItems(Arrays.asList( - new TradePriceCalculateReqBO.Item().setSkuId(100L).setCount(1).setSelected(true), - new TradePriceCalculateReqBO.Item().setSkuId(200L).setCount(3).setSelected(true), - new TradePriceCalculateReqBO.Item().setSkuId(300L).setCount(6).setCartId(233L).setSelected(false) - )); - // mock 方法 - List skuList = Arrays.asList( - new ProductSkuRespDTO().setId(100L).setStock(500).setPrice(1000).setPicUrl("https://t.cn/1.png").setSpuId(1001L) - .setProperties(singletonList(new ProductPropertyValueDetailRespDTO().setPropertyId(1L).setPropertyName("颜色") - .setValueId(2L).setValueName("红色"))), - new ProductSkuRespDTO().setId(200L).setStock(400).setPrice(2000).setPicUrl("https://t.cn/2.png").setSpuId(1001L) - .setProperties(singletonList(new ProductPropertyValueDetailRespDTO().setPropertyId(1L).setPropertyName("颜色") - .setValueId(3L).setValueName("黄色"))), - new ProductSkuRespDTO().setId(300L).setStock(600).setPrice(3000).setPicUrl("https://t.cn/3.png").setSpuId(1001L) - .setProperties(singletonList(new ProductPropertyValueDetailRespDTO().setPropertyId(1L).setPropertyName("颜色") - .setValueId(4L).setValueName("黑色"))) - ); - when(productSkuApi.getSkuList(Mockito.eq(asSet(100L, 200L, 300L)))).thenReturn(skuList); - when(productSpuApi.getSpuList(Mockito.eq(asSet(1001L)))) - .thenReturn(singletonList(new ProductSpuRespDTO().setId(1001L).setName("小菜").setCategoryId(666L) - .setStatus(ProductSpuStatusEnum.ENABLE.getStatus()))); - - // 调用 - TradePriceCalculateRespBO calculateRespBO = tradePriceService.calculatePrice(calculateReqBO); - // 断言 - assertEquals(TradeOrderTypeEnum.NORMAL.getType(), calculateRespBO.getType()); - assertEquals(0, calculateRespBO.getPromotions().size()); - assertNull(calculateRespBO.getCouponId()); - // 断言:订单价格 - assertEquals(7000, calculateRespBO.getPrice().getTotalPrice()); - assertEquals(0, calculateRespBO.getPrice().getDiscountPrice()); - assertEquals(0, calculateRespBO.getPrice().getDeliveryPrice()); - assertEquals(0, calculateRespBO.getPrice().getCouponPrice()); - assertEquals(0, calculateRespBO.getPrice().getPointPrice()); - assertEquals(7000, calculateRespBO.getPrice().getPayPrice()); - // 断言:SKU 1 - assertEquals(1001L, calculateRespBO.getItems().get(0).getSpuId()); - assertEquals(100L, calculateRespBO.getItems().get(0).getSkuId()); - assertEquals(1, calculateRespBO.getItems().get(0).getCount()); - assertNull(calculateRespBO.getItems().get(0).getCartId()); - assertTrue(calculateRespBO.getItems().get(0).getSelected()); - assertEquals(1000, calculateRespBO.getItems().get(0).getPrice()); - assertEquals(0, calculateRespBO.getItems().get(0).getDiscountPrice()); - assertEquals(0, calculateRespBO.getItems().get(0).getDeliveryPrice()); - assertEquals(0, calculateRespBO.getItems().get(0).getCouponPrice()); - assertEquals(0, calculateRespBO.getItems().get(0).getPointPrice()); - assertEquals(1000, calculateRespBO.getItems().get(0).getPayPrice()); - assertEquals("小菜", calculateRespBO.getItems().get(0).getSpuName()); - assertEquals("https://t.cn/1.png", calculateRespBO.getItems().get(0).getPicUrl()); - assertEquals(666L, calculateRespBO.getItems().get(0).getCategoryId()); - assertEquals(skuList.get(0).getProperties(), calculateRespBO.getItems().get(0).getProperties()); - // 断言:SKU 2 - assertEquals(1001L, calculateRespBO.getItems().get(1).getSpuId()); - assertEquals(200L, calculateRespBO.getItems().get(1).getSkuId()); - assertEquals(3, calculateRespBO.getItems().get(1).getCount()); - assertNull(calculateRespBO.getItems().get(1).getCartId()); - assertTrue(calculateRespBO.getItems().get(1).getSelected()); - assertEquals(2000, calculateRespBO.getItems().get(1).getPrice()); - assertEquals(0, calculateRespBO.getItems().get(1).getDiscountPrice()); - assertEquals(0, calculateRespBO.getItems().get(1).getDeliveryPrice()); - assertEquals(0, calculateRespBO.getItems().get(1).getCouponPrice()); - assertEquals(0, calculateRespBO.getItems().get(1).getPointPrice()); - assertEquals(6000, calculateRespBO.getItems().get(1).getPayPrice()); - assertEquals("小菜", calculateRespBO.getItems().get(1).getSpuName()); - assertEquals("https://t.cn/2.png", calculateRespBO.getItems().get(1).getPicUrl()); - assertEquals(666L, calculateRespBO.getItems().get(1).getCategoryId()); - assertEquals(skuList.get(1).getProperties(), calculateRespBO.getItems().get(1).getProperties()); - // 断言:SKU 3 - assertEquals(1001L, calculateRespBO.getItems().get(2).getSpuId()); - assertEquals(300L, calculateRespBO.getItems().get(2).getSkuId()); - assertEquals(6, calculateRespBO.getItems().get(2).getCount()); - assertEquals(233L, calculateRespBO.getItems().get(2).getCartId()); - assertFalse(calculateRespBO.getItems().get(2).getSelected()); - assertEquals(3000, calculateRespBO.getItems().get(2).getPrice()); - assertEquals(0, calculateRespBO.getItems().get(2).getDiscountPrice()); - assertEquals(0, calculateRespBO.getItems().get(2).getDeliveryPrice()); - assertEquals(0, calculateRespBO.getItems().get(2).getCouponPrice()); - assertEquals(0, calculateRespBO.getItems().get(2).getPointPrice()); - assertEquals(18000, calculateRespBO.getItems().get(2).getPayPrice()); - assertEquals("小菜", calculateRespBO.getItems().get(2).getSpuName()); - assertEquals("https://t.cn/3.png", calculateRespBO.getItems().get(2).getPicUrl()); - assertEquals(666L, calculateRespBO.getItems().get(2).getCategoryId()); - assertEquals(skuList.get(2).getProperties(), calculateRespBO.getItems().get(2).getProperties()); - } - -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeCouponPriceCalculatorTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeCouponPriceCalculatorTest.java deleted file mode 100644 index 06655e0b2..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeCouponPriceCalculatorTest.java +++ /dev/null @@ -1,146 +0,0 @@ -package cn.iocoder.yudao.module.trade.service.price.calculator; - -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.promotion.api.coupon.CouponApi; -import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponRespDTO; -import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponValidReqDTO; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import java.util.ArrayList; - -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static java.util.Arrays.asList; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -/** - * {@link TradeCouponPriceCalculator} 的单元测试类 - * - * @author 芋道源码 - */ -public class TradeCouponPriceCalculatorTest extends BaseMockitoUnitTest { - - @InjectMocks - private TradeCouponPriceCalculator tradeCouponPriceCalculator; - - @Mock - private CouponApi couponApi; - - @Test - public void testCalculate() { - // 准备参数 - TradePriceCalculateReqBO param = new TradePriceCalculateReqBO() - .setUserId(233L).setCouponId(1024L) - .setItems(asList( - new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), // 匹配优惠劵 - new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(true), // 匹配优惠劵 - new TradePriceCalculateReqBO.Item().setSkuId(30L).setCount(4).setSelected(true), // 不匹配优惠劵 - new TradePriceCalculateReqBO.Item().setSkuId(40L).setCount(5).setSelected(false) // 匹配优惠劵,但是未选中 - )); - TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() - .setType(TradeOrderTypeEnum.NORMAL.getType()) - .setPrice(new TradePriceCalculateRespBO.Price()) - .setPromotions(new ArrayList<>()) - .setItems(asList( - new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true) - .setPrice(100).setSpuId(1L), - new TradePriceCalculateRespBO.OrderItem().setSkuId(20L).setCount(3).setSelected(true) - .setPrice(50).setSpuId(2L), - new TradePriceCalculateRespBO.OrderItem().setSkuId(30L).setCount(4).setSelected(true) - .setPrice(30).setSpuId(3L), - new TradePriceCalculateRespBO.OrderItem().setSkuId(40L).setCount(5).setSelected(false) - .setPrice(60).setSpuId(1L) - )); - // 保证价格被初始化上 - TradePriceCalculatorHelper.recountPayPrice(result.getItems()); - TradePriceCalculatorHelper.recountAllPrice(result); - - // mock 方法(优惠劵 Coupon 信息) - CouponRespDTO coupon = randomPojo(CouponRespDTO.class, o -> o.setId(1024L).setName("程序员节") - .setProductScope(PromotionProductScopeEnum.SPU.getScope()).setProductScopeValues(asList(1L, 2L)) - .setUsePrice(350).setDiscountType(PromotionDiscountTypeEnum.PERCENT.getType()) - .setDiscountPercent(50).setDiscountLimitPrice(70)); - when(couponApi.validateCoupon(eq(new CouponValidReqDTO().setId(1024L).setUserId(233L)))).thenReturn(coupon); - - // 调用 - tradeCouponPriceCalculator.calculate(param, result); - // 断言 - assertEquals(result.getCouponId(), 1024L); - // 断言:Price 部分 - TradePriceCalculateRespBO.Price price = result.getPrice(); - assertEquals(price.getTotalPrice(), 470); - assertEquals(price.getDiscountPrice(), 0); - assertEquals(price.getPointPrice(), 0); - assertEquals(price.getDeliveryPrice(), 0); - assertEquals(price.getCouponPrice(), 70); - assertEquals(price.getPayPrice(), 400); - // 断言:SKU 1 - TradePriceCalculateRespBO.OrderItem orderItem01 = result.getItems().get(0); - assertEquals(orderItem01.getSkuId(), 10L); - assertEquals(orderItem01.getCount(), 2); - assertEquals(orderItem01.getPrice(), 100); - assertEquals(orderItem01.getDiscountPrice(), 0); - assertEquals(orderItem01.getDeliveryPrice(), 0); - assertEquals(orderItem01.getCouponPrice(), 40); - assertEquals(orderItem01.getPointPrice(), 0); - assertEquals(orderItem01.getPayPrice(), 160); - // 断言:SKU 2 - TradePriceCalculateRespBO.OrderItem orderItem02 = result.getItems().get(1); - assertEquals(orderItem02.getSkuId(), 20L); - assertEquals(orderItem02.getCount(), 3); - assertEquals(orderItem02.getPrice(), 50); - assertEquals(orderItem02.getDiscountPrice(), 0); - assertEquals(orderItem02.getDeliveryPrice(), 0); - assertEquals(orderItem02.getCouponPrice(), 30); - assertEquals(orderItem02.getPointPrice(), 0); - assertEquals(orderItem02.getPayPrice(), 120); - // 断言:SKU 3 - TradePriceCalculateRespBO.OrderItem orderItem03 = result.getItems().get(2); - assertEquals(orderItem03.getSkuId(), 30L); - assertEquals(orderItem03.getCount(), 4); - assertEquals(orderItem03.getPrice(), 30); - assertEquals(orderItem03.getDiscountPrice(), 0); - assertEquals(orderItem03.getCouponPrice(), 0); - assertEquals(orderItem03.getPointPrice(), 0); - assertEquals(orderItem03.getPayPrice(), 120); - // 断言:SKU 4 - TradePriceCalculateRespBO.OrderItem orderItem04 = result.getItems().get(3); - assertEquals(orderItem04.getSkuId(), 40L); - assertEquals(orderItem04.getCount(), 5); - assertEquals(orderItem04.getPrice(), 60); - assertEquals(orderItem04.getDiscountPrice(), 0); - assertEquals(orderItem04.getCouponPrice(), 0); - assertEquals(orderItem04.getPointPrice(), 0); - assertEquals(orderItem04.getPayPrice(), 300); - // 断言:Promotion 部分 - assertEquals(result.getPromotions().size(), 1); - TradePriceCalculateRespBO.Promotion promotion01 = result.getPromotions().get(0); - assertEquals(promotion01.getId(), 1024L); - assertEquals(promotion01.getName(), "程序员节"); - assertEquals(promotion01.getType(), PromotionTypeEnum.COUPON.getType()); - assertEquals(promotion01.getTotalPrice(), 350); - assertEquals(promotion01.getDiscountPrice(), 70); - assertTrue(promotion01.getMatch()); - assertEquals(promotion01.getDescription(), "优惠劵:省 0.70 元"); - assertEquals(promotion01.getItems().size(), 2); - TradePriceCalculateRespBO.PromotionItem promotionItem011 = promotion01.getItems().get(0); - assertEquals(promotionItem011.getSkuId(), 10L); - assertEquals(promotionItem011.getTotalPrice(), 200); - assertEquals(promotionItem011.getDiscountPrice(), 40); - TradePriceCalculateRespBO.PromotionItem promotionItem012 = promotion01.getItems().get(1); - assertEquals(promotionItem012.getSkuId(), 20L); - assertEquals(promotionItem012.getTotalPrice(), 150); - assertEquals(promotionItem012.getDiscountPrice(), 30); - } - -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDeliveryPriceCalculatorTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDeliveryPriceCalculatorTest.java deleted file mode 100644 index 9441e473f..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDeliveryPriceCalculatorTest.java +++ /dev/null @@ -1,193 +0,0 @@ -package cn.iocoder.yudao.module.trade.service.price.calculator; - -import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.member.api.address.MemberAddressApi; -import cn.iocoder.yudao.module.member.api.address.dto.MemberAddressRespDTO; -import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO; -import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryExpressChargeModeEnum; -import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum; -import cn.iocoder.yudao.module.trade.service.config.TradeConfigService; -import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressTemplateService; -import cn.iocoder.yudao.module.trade.service.delivery.bo.DeliveryExpressTemplateRespBO; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import java.util.ArrayList; - -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static java.util.Arrays.asList; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -/** - * {@link TradeDeliveryPriceCalculator} 的单元测试 - * - * @author jason - */ -public class TradeDeliveryPriceCalculatorTest extends BaseMockitoUnitTest { - - @InjectMocks - private TradeDeliveryPriceCalculator calculator; - - @Mock - private MemberAddressApi addressApi; - - @Mock - private DeliveryExpressTemplateService deliveryExpressTemplateService; - @Mock - private TradeConfigService tradeConfigService; - - private TradePriceCalculateReqBO reqBO; - private TradePriceCalculateRespBO resultBO; - - private DeliveryExpressTemplateRespBO templateRespBO; - private DeliveryExpressTemplateRespBO.Charge chargeBO; - private DeliveryExpressTemplateRespBO.Free freeBO; - - @BeforeEach - public void init(){ - // 准备参数 - reqBO = new TradePriceCalculateReqBO() - .setDeliveryType(DeliveryTypeEnum.EXPRESS.getType()) - .setAddressId(10L) - .setUserId(1L) - .setItems(asList( - new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), - new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(10).setSelected(true), - new TradePriceCalculateReqBO.Item().setSkuId(30L).setCount(4).setSelected(false) // 未选中 - )); - resultBO = new TradePriceCalculateRespBO() - .setPrice(new TradePriceCalculateRespBO.Price()) - .setPromotions(new ArrayList<>()) - .setItems(asList( - new TradePriceCalculateRespBO.OrderItem().setDeliveryTemplateId(1L).setSkuId(10L).setCount(2).setSelected(true) - .setWeight(10d).setVolume(10d).setPrice(100), - new TradePriceCalculateRespBO.OrderItem().setDeliveryTemplateId(1L).setSkuId(20L).setCount(10).setSelected(true) - .setWeight(10d).setVolume(10d).setPrice(200), - new TradePriceCalculateRespBO.OrderItem().setDeliveryTemplateId(1L).setSkuId(30L).setCount(1).setSelected(false) - .setWeight(10d).setVolume(10d).setPrice(300) - )); - // 保证价格被初始化上 - TradePriceCalculatorHelper.recountPayPrice(resultBO.getItems()); - TradePriceCalculatorHelper.recountAllPrice(resultBO); - - // 准备收件地址数据 - MemberAddressRespDTO addressResp = randomPojo(MemberAddressRespDTO.class, item -> item.setAreaId(10)); - when(addressApi.getAddress(eq(10L), eq(1L))).thenReturn(addressResp); - - // 准备运费模板费用配置数据 - chargeBO = randomPojo(DeliveryExpressTemplateRespBO.Charge.class, - item -> item.setStartCount(10D).setStartPrice(1000).setExtraCount(10D).setExtraPrice(2000)); - // 准备运费模板包邮配置数据:订单总件数 < 包邮件数时 12 < 20 - freeBO = randomPojo(DeliveryExpressTemplateRespBO.Free.class, - item -> item.setFreeCount(20).setFreePrice(100)); - // 准备 SP 运费模板数据 - templateRespBO = randomPojo(DeliveryExpressTemplateRespBO.class, - item -> item.setChargeMode(DeliveryExpressChargeModeEnum.COUNT.getType()) - .setCharge(chargeBO).setFree(freeBO)); - } - - @Test - @DisplayName("全场包邮") - public void testCalculate_expressGlobalFree() { - // mock 方法(全场包邮) - when(tradeConfigService.getTradeConfig()).thenReturn(new TradeConfigDO().setDeliveryExpressFreeEnabled(true) - .setDeliveryExpressFreePrice(2200)); - - // 调用 - calculator.calculate(reqBO, resultBO); - TradePriceCalculateRespBO.Price price = resultBO.getPrice(); - assertThat(price) - .extracting("totalPrice","discountPrice","couponPrice","pointPrice","deliveryPrice","payPrice") - .containsExactly(2200, 0, 0, 0, 0, 2200); - assertThat(resultBO.getItems()).hasSize(3); - // 断言:SKU1 - assertThat(resultBO.getItems().get(0)) - .extracting("price", "count","discountPrice" ,"couponPrice", "pointPrice","deliveryPrice","payPrice") - .containsExactly(100, 2, 0, 0, 0, 0, 200); - // 断言:SKU2 - assertThat(resultBO.getItems().get(1)) - .extracting("price", "count","discountPrice" ,"couponPrice", "pointPrice","deliveryPrice","payPrice") - .containsExactly(200, 10, 0, 0, 0, 0, 2000); - // 断言:SKU3 未选中 - assertThat(resultBO.getItems().get(2)) - .extracting("price", "count","discountPrice" ,"couponPrice", "pointPrice","deliveryPrice","payPrice") - .containsExactly(300, 1, 0, 0, 0, 0, 300); - } - - @Test - @DisplayName("按件计算运费不包邮的情况") - public void testCalculate_expressTemplateCharge() { - // SKU 1 : 100 * 2 = 200 - // SKU 2 :200 * 10 = 2000 - // 运费 首件 1000 + 续件 2000 = 3000 - // mock 方法 - when(deliveryExpressTemplateService.getExpressTemplateMapByIdsAndArea(eq(asSet(1L)), eq(10))) - .thenReturn(MapUtil.of(1L, templateRespBO)); - - // 调用 - calculator.calculate(reqBO, resultBO); - // 断言 - TradePriceCalculateRespBO.Price price = resultBO.getPrice(); - assertThat(price) - .extracting("totalPrice","discountPrice","couponPrice","pointPrice","deliveryPrice","payPrice") - .containsExactly(2200, 0, 0, 0, 3000, 5200); - assertThat(resultBO.getItems()).hasSize(3); - // 断言:SKU1 - assertThat(resultBO.getItems().get(0)) - .extracting("price", "count","discountPrice" ,"couponPrice", "pointPrice","deliveryPrice","payPrice") - .containsExactly(100, 2, 0, 0, 0, 500, 700); - // 断言:SKU2 - assertThat(resultBO.getItems().get(1)) - .extracting("price", "count","discountPrice" ,"couponPrice", "pointPrice","deliveryPrice","payPrice") - .containsExactly(200, 10, 0, 0, 0, 2500, 4500); - // 断言:SKU3 未选中 - assertThat(resultBO.getItems().get(2)) - .extracting("price", "count","discountPrice" ,"couponPrice", "pointPrice","deliveryPrice","payPrice") - .containsExactly(300, 1, 0, 0, 0, 0, 300); - } - - @Test - @DisplayName("按件计算运费包邮的情况") - public void testCalculate_expressTemplateFree() { - // SKU 1 : 100 * 2 = 200 - // SKU 2 :200 * 10 = 2000 - // 运费 0 - // mock 方法 - // 准备运费模板包邮配置数据 包邮 订单总件数 > 包邮件数时 12 > 10 - templateRespBO.setFree(randomPojo(DeliveryExpressTemplateRespBO.Free.class, - item -> item.setFreeCount(10).setFreePrice(1000))); - when(deliveryExpressTemplateService.getExpressTemplateMapByIdsAndArea(eq(asSet(1L)), eq(10))) - .thenReturn(MapUtil.of(1L, templateRespBO)); - - // 调用 - calculator.calculate(reqBO, resultBO); - // 断言 - TradePriceCalculateRespBO.Price price = resultBO.getPrice(); - assertThat(price) - .extracting("totalPrice","discountPrice","couponPrice","pointPrice","deliveryPrice","payPrice") - .containsExactly(2200, 0, 0, 0, 0, 2200); - assertThat(resultBO.getItems()).hasSize(3); - // 断言:SKU1 - assertThat(resultBO.getItems().get(0)) - .extracting("price", "count","discountPrice" ,"couponPrice", "pointPrice","deliveryPrice","payPrice") - .containsExactly(100, 2, 0, 0, 0, 0, 200); - // 断言:SKU2 - assertThat(resultBO.getItems().get(1)) - .extracting("price", "count","discountPrice" ,"couponPrice", "pointPrice","deliveryPrice","payPrice") - .containsExactly(200, 10, 0, 0, 0, 0, 2000); - // 断言:SKU3 未选中 - assertThat(resultBO.getItems().get(2)) - .extracting("price", "count","discountPrice" ,"couponPrice", "pointPrice","deliveryPrice","payPrice") - .containsExactly(300, 1, 0, 0, 0, 0, 300); - } - -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDiscountActivityPriceCalculatorTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDiscountActivityPriceCalculatorTest.java deleted file mode 100644 index 21760217c..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDiscountActivityPriceCalculatorTest.java +++ /dev/null @@ -1,120 +0,0 @@ -package cn.iocoder.yudao.module.trade.service.price.calculator; - -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.promotion.api.discount.DiscountActivityApi; -import cn.iocoder.yudao.module.promotion.api.discount.dto.DiscountProductRespDTO; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import java.util.ArrayList; - -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static java.util.Arrays.asList; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -/** - * {@link TradeDiscountActivityPriceCalculator} 的单元测试类 - * - * @author 芋道源码 - */ -public class TradeDiscountActivityPriceCalculatorTest extends BaseMockitoUnitTest { - - @InjectMocks - private TradeDiscountActivityPriceCalculator tradeDiscountActivityPriceCalculator; - - @Mock - private DiscountActivityApi discountActivityApi; - - @Test - public void testCalculate() { - // 准备参数 - TradePriceCalculateReqBO param = new TradePriceCalculateReqBO() - .setItems(asList( - new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), // 匹配活动,且已选中 - new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(false) // 匹配活动,但未选中 - )); - TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() - .setType(TradeOrderTypeEnum.NORMAL.getType()) - .setPrice(new TradePriceCalculateRespBO.Price()) - .setPromotions(new ArrayList<>()) - .setItems(asList( - new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true) - .setPrice(100), - new TradePriceCalculateRespBO.OrderItem().setSkuId(20L).setCount(3).setSelected(false) - .setPrice(50) - )); - // 保证价格被初始化上 - TradePriceCalculatorHelper.recountPayPrice(result.getItems()); - TradePriceCalculatorHelper.recountAllPrice(result); - - // mock 方法(限时折扣活动) - when(discountActivityApi.getMatchDiscountProductList(eq(asSet(10L, 20L)))).thenReturn(asList( - randomPojo(DiscountProductRespDTO.class, o -> o.setActivityId(1000L) - .setActivityName("活动 1000 号").setSkuId(10L) - .setDiscountType(PromotionDiscountTypeEnum.PRICE.getType()).setDiscountPrice(40)), - randomPojo(DiscountProductRespDTO.class, o -> o.setActivityId(2000L) - .setActivityName("活动 2000 号").setSkuId(20L) - .setDiscountType(PromotionDiscountTypeEnum.PERCENT.getType()).setDiscountPercent(60)) - )); - // 10L: 100 * 2 - 40 * 2 = 120 - // 20L:50 * 3 - 50 * 3 * 0.4 = 90 - - // 调用 - tradeDiscountActivityPriceCalculator.calculate(param, result); - // 断言:Price 部分 - TradePriceCalculateRespBO.Price price = result.getPrice(); - assertEquals(price.getTotalPrice(), 200); - assertEquals(price.getDiscountPrice(), 80); - assertEquals(price.getPointPrice(), 0); - assertEquals(price.getDeliveryPrice(), 0); - assertEquals(price.getCouponPrice(), 0); - assertEquals(price.getPayPrice(), 120); - assertNull(result.getCouponId()); - // 断言:SKU 1 - assertEquals(result.getItems().size(), 2); - TradePriceCalculateRespBO.OrderItem orderItem01 = result.getItems().get(0); - assertEquals(orderItem01.getSkuId(), 10L); - assertEquals(orderItem01.getCount(), 2); - assertEquals(orderItem01.getPrice(), 100); - assertEquals(orderItem01.getDiscountPrice(), 80); - assertEquals(orderItem01.getDeliveryPrice(), 0); - assertEquals(orderItem01.getCouponPrice(), 0); - assertEquals(orderItem01.getPointPrice(), 0); - assertEquals(orderItem01.getPayPrice(), 120); - // 断言:SKU 2 - TradePriceCalculateRespBO.OrderItem orderItem02 = result.getItems().get(1); - assertEquals(orderItem02.getSkuId(), 20L); - assertEquals(orderItem02.getCount(), 3); - assertEquals(orderItem02.getPrice(), 50); - assertEquals(orderItem02.getDiscountPrice(), 60); - assertEquals(orderItem02.getDeliveryPrice(), 0); - assertEquals(orderItem02.getCouponPrice(), 0); - assertEquals(orderItem02.getPointPrice(), 0); - assertEquals(orderItem02.getPayPrice(), 90); - // 断言:Promotion 部分 - assertEquals(result.getPromotions().size(), 1); - TradePriceCalculateRespBO.Promotion promotion01 = result.getPromotions().get(0); - assertEquals(promotion01.getId(), 1000L); - assertEquals(promotion01.getName(), "活动 1000 号"); - assertEquals(promotion01.getType(), PromotionTypeEnum.DISCOUNT_ACTIVITY.getType()); - assertEquals(promotion01.getTotalPrice(), 200); - assertEquals(promotion01.getDiscountPrice(), 80); - assertTrue(promotion01.getMatch()); - assertEquals(promotion01.getDescription(), "限时折扣:省 0.80 元"); - TradePriceCalculateRespBO.PromotionItem promotionItem01 = promotion01.getItems().get(0); - assertEquals(promotion01.getItems().size(), 1); - assertEquals(promotionItem01.getSkuId(), 10L); - assertEquals(promotionItem01.getTotalPrice(), 200); - assertEquals(promotionItem01.getDiscountPrice(), 80); - } - -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeMemberLevelPriceCalculatorTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeMemberLevelPriceCalculatorTest.java deleted file mode 100644 index 44e783103..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeMemberLevelPriceCalculatorTest.java +++ /dev/null @@ -1,118 +0,0 @@ -package cn.iocoder.yudao.module.trade.service.price.calculator; - -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.member.api.level.MemberLevelApi; -import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; -import cn.iocoder.yudao.module.member.api.user.MemberUserApi; -import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import java.util.ArrayList; - -import static java.util.Arrays.asList; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -/** - * {@link TradeMemberLevelPriceCalculator} 的单元测试类 - * - * @author 芋道源码 - */ -public class TradeMemberLevelPriceCalculatorTest extends BaseMockitoUnitTest { - - @InjectMocks - private TradeMemberLevelPriceCalculator memberLevelPriceCalculator; - - @Mock - private MemberLevelApi memberLevelApi; - @Mock - private MemberUserApi memberUserApi; - - @Test - public void testCalculate() { - // 准备参数 - TradePriceCalculateReqBO param = new TradePriceCalculateReqBO() - .setUserId(1024L) - .setItems(asList( - new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), // 匹配活动,且已选中 - new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(false) // 匹配活动,但未选中 - )); - TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() - .setType(TradeOrderTypeEnum.NORMAL.getType()) - .setPrice(new TradePriceCalculateRespBO.Price()) - .setPromotions(new ArrayList<>()) - .setItems(asList( - new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true) - .setPrice(100), - new TradePriceCalculateRespBO.OrderItem().setSkuId(20L).setCount(3).setSelected(false) - .setPrice(50) - )); - // 保证价格被初始化上 - TradePriceCalculatorHelper.recountPayPrice(result.getItems()); - TradePriceCalculatorHelper.recountAllPrice(result); - - // mock 方法(会员等级) - when(memberUserApi.getUser(eq(1024L))).thenReturn(new MemberUserRespDTO().setLevelId(2048L)); - when(memberLevelApi.getMemberLevel(eq(2048L))).thenReturn( - new MemberLevelRespDTO().setId(2048L).setName("VIP 会员").setDiscountPercent(60)); - - // 调用 - memberLevelPriceCalculator.calculate(param, result); - // 断言:Price 部分 - TradePriceCalculateRespBO.Price price = result.getPrice(); - assertEquals(price.getTotalPrice(), 200); - assertEquals(price.getDiscountPrice(), 0); - assertEquals(price.getPointPrice(), 0); - assertEquals(price.getDeliveryPrice(), 0); - assertEquals(price.getCouponPrice(), 0); - assertEquals(price.getVipPrice(), 80); - assertEquals(price.getPayPrice(), 120); - assertNull(result.getCouponId()); - // 断言:SKU 1 - assertEquals(result.getItems().size(), 2); - TradePriceCalculateRespBO.OrderItem orderItem01 = result.getItems().get(0); - assertEquals(orderItem01.getSkuId(), 10L); - assertEquals(orderItem01.getCount(), 2); - assertEquals(orderItem01.getPrice(), 100); - assertEquals(orderItem01.getDiscountPrice(), 0); - assertEquals(orderItem01.getDeliveryPrice(), 0); - assertEquals(orderItem01.getCouponPrice(), 0); - assertEquals(orderItem01.getPointPrice(), 0); - assertEquals(orderItem01.getVipPrice(), 80); - assertEquals(orderItem01.getPayPrice(), 120); - // 断言:SKU 2 - TradePriceCalculateRespBO.OrderItem orderItem02 = result.getItems().get(1); - assertEquals(orderItem02.getSkuId(), 20L); - assertEquals(orderItem02.getCount(), 3); - assertEquals(orderItem02.getPrice(), 50); - assertEquals(orderItem02.getDiscountPrice(), 0); - assertEquals(orderItem02.getDeliveryPrice(), 0); - assertEquals(orderItem02.getCouponPrice(), 0); - assertEquals(orderItem02.getPointPrice(), 0); - assertEquals(orderItem02.getVipPrice(), 60); - assertEquals(orderItem02.getPayPrice(), 90); - // 断言:Promotion 部分 - assertEquals(result.getPromotions().size(), 1); - TradePriceCalculateRespBO.Promotion promotion01 = result.getPromotions().get(0); - assertEquals(promotion01.getId(), 2048L); - assertEquals(promotion01.getName(), "VIP 会员"); - assertEquals(promotion01.getType(), PromotionTypeEnum.MEMBER_LEVEL.getType()); - assertEquals(promotion01.getTotalPrice(), 200); - assertEquals(promotion01.getDiscountPrice(), 80); - assertTrue(promotion01.getMatch()); - assertEquals(promotion01.getDescription(), "会员等级折扣:省 0.80 元"); - TradePriceCalculateRespBO.PromotionItem promotionItem01 = promotion01.getItems().get(0); - assertEquals(promotion01.getItems().size(), 1); - assertEquals(promotionItem01.getSkuId(), 10L); - assertEquals(promotionItem01.getTotalPrice(), 200); - assertEquals(promotionItem01.getDiscountPrice(), 80); - } - -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePointGiveCalculatorTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePointGiveCalculatorTest.java deleted file mode 100644 index 910639ec1..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePointGiveCalculatorTest.java +++ /dev/null @@ -1,99 +0,0 @@ -package cn.iocoder.yudao.module.trade.service.price.calculator; - -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.member.api.config.MemberConfigApi; -import cn.iocoder.yudao.module.member.api.config.dto.MemberConfigRespDTO; -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import java.util.ArrayList; - -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static java.util.Arrays.asList; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.when; - -// TODO 芋艿:晚点 review -/** - * {@link TradePointGiveCalculator} 的单元测试类 - * - * @author owen - */ -public class TradePointGiveCalculatorTest extends BaseMockitoUnitTest { - - @InjectMocks - private TradePointGiveCalculator tradePointGiveCalculator; - - @Mock - private MemberConfigApi memberConfigApi; - - @Test - public void testCalculate() { - - // 准备参数 - TradePriceCalculateReqBO param = new TradePriceCalculateReqBO() - .setUserId(233L) - .setItems(asList( - new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), // 全局积分 - new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(true), // 全局积分 + SKU 积分 - new TradePriceCalculateReqBO.Item().setSkuId(30L).setCount(4).setSelected(false), // 全局积分,但是未选中 - new TradePriceCalculateReqBO.Item().setSkuId(40L).setCount(5).setSelected(false) // 全局积分 + SKU 积分,但是未选中 - )); - TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() - .setType(TradeOrderTypeEnum.NORMAL.getType()) - .setPrice(new TradePriceCalculateRespBO.Price()) - .setPromotions(new ArrayList<>()) - .setItems(asList( - new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true) - .setPrice(100).setSpuId(1L).setGivePoint(0), - new TradePriceCalculateRespBO.OrderItem().setSkuId(20L).setCount(3).setSelected(true) - .setPrice(50).setSpuId(2L).setGivePoint(100), - new TradePriceCalculateRespBO.OrderItem().setSkuId(30L).setCount(4).setSelected(false) - .setPrice(30).setSpuId(3L).setGivePoint(0), - new TradePriceCalculateRespBO.OrderItem().setSkuId(40L).setCount(5).setSelected(false) - .setPrice(60).setSpuId(1L).setGivePoint(100) - )); - // 保证价格被初始化上 - TradePriceCalculatorHelper.recountPayPrice(result.getItems()); - TradePriceCalculatorHelper.recountAllPrice(result); - - // mock 方法(积分配置 信息) - MemberConfigRespDTO memberConfig = randomPojo(MemberConfigRespDTO.class, - o -> o.setPointTradeDeductEnable(true) // 启用积分折扣 - .setPointTradeGivePoint(100)); // 1 元赠送多少分 - when(memberConfigApi.getConfig()).thenReturn(memberConfig); - - // 调用 - tradePointGiveCalculator.calculate(param, result); - // 断言:Price 部分 - assertEquals(result.getGivePoint(), 2 * 100 + 3 * 50 + 100); - // 断言:SKU 1 - TradePriceCalculateRespBO.OrderItem orderItem01 = result.getItems().get(0); - assertEquals(orderItem01.getSkuId(), 10L); - assertEquals(orderItem01.getCount(), 2); - assertEquals(orderItem01.getPrice(), 100); - assertEquals(orderItem01.getGivePoint(), 2 * 100); // 全局积分 - // 断言:SKU 2 - TradePriceCalculateRespBO.OrderItem orderItem02 = result.getItems().get(1); - assertEquals(orderItem02.getSkuId(), 20L); - assertEquals(orderItem02.getCount(), 3); - assertEquals(orderItem02.getPrice(), 50); - assertEquals(orderItem02.getGivePoint(), 3 * 50 + 100); // 全局积分 + SKU 积分 - // 断言:SKU 3 - TradePriceCalculateRespBO.OrderItem orderItem03 = result.getItems().get(2); - assertEquals(orderItem03.getSkuId(), 30L); - assertEquals(orderItem03.getCount(), 4); - assertEquals(orderItem03.getPrice(), 30); - assertEquals(orderItem03.getGivePoint(), 0); // 全局积分,但是未选中 - // 断言:SKU 4 - TradePriceCalculateRespBO.OrderItem orderItem04 = result.getItems().get(3); - assertEquals(orderItem04.getSkuId(), 40L); - assertEquals(orderItem04.getCount(), 5); - assertEquals(orderItem04.getPrice(), 60); - assertEquals(orderItem04.getGivePoint(), 100); // 全局积分 + SKU 积分,但是未选中 - } -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePointUsePriceCalculatorTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePointUsePriceCalculatorTest.java deleted file mode 100644 index fe679b408..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePointUsePriceCalculatorTest.java +++ /dev/null @@ -1,333 +0,0 @@ -package cn.iocoder.yudao.module.trade.service.price.calculator; - -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.member.api.config.MemberConfigApi; -import cn.iocoder.yudao.module.member.api.config.dto.MemberConfigRespDTO; -import cn.iocoder.yudao.module.member.api.user.MemberUserApi; -import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import java.util.ArrayList; - -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static java.util.Arrays.asList; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.when; - -// TODO 芋艿:晚点 review -/** - * {@link TradePointUsePriceCalculator } 的单元测试类 - * - * @author owen - */ -public class TradePointUsePriceCalculatorTest extends BaseMockitoUnitTest { - - @InjectMocks - private TradePointUsePriceCalculator tradePointUsePriceCalculator; - - @Mock - private MemberConfigApi memberConfigApi; - @Mock - private MemberUserApi memberUserApi; - - @Test - public void testCalculate_success() { - // 准备参数 - TradePriceCalculateReqBO param = new TradePriceCalculateReqBO() - .setUserId(233L).setPointStatus(true) // 是否使用积分 - .setItems(asList( - new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), // 使用积分 - new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(true), // 使用积分 - new TradePriceCalculateReqBO.Item().setSkuId(30L).setCount(5).setSelected(false) // 未选中,不使用积分 - )); - TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() - .setType(TradeOrderTypeEnum.NORMAL.getType()) - .setPrice(new TradePriceCalculateRespBO.Price()) - .setPromotions(new ArrayList<>()) - .setItems(asList( - new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true) - .setPrice(100).setSpuId(1L), - new TradePriceCalculateRespBO.OrderItem().setSkuId(20L).setCount(3).setSelected(true) - .setPrice(50).setSpuId(2L), - new TradePriceCalculateRespBO.OrderItem().setSkuId(30L).setCount(5).setSelected(false) - .setPrice(30).setSpuId(3L) - )); - // 保证价格被初始化上 - TradePriceCalculatorHelper.recountPayPrice(result.getItems()); - TradePriceCalculatorHelper.recountAllPrice(result); - - // mock 方法(积分配置 信息) - MemberConfigRespDTO memberConfig = randomPojo(MemberConfigRespDTO.class, - o -> o.setPointTradeDeductEnable(true) // 启用积分折扣 - .setPointTradeDeductUnitPrice(1) // 1 积分抵扣多少金额(单位分) - .setPointTradeDeductMaxPrice(100)); // 积分抵扣最大值 - when(memberConfigApi.getConfig()).thenReturn(memberConfig); - // mock 方法(会员 信息) - MemberUserRespDTO user = randomPojo(MemberUserRespDTO.class, o -> o.setId(param.getUserId()).setPoint(100)); - when(memberUserApi.getUser(user.getId())).thenReturn(user); - - // 调用 - tradePointUsePriceCalculator.calculate(param, result); - // 断言:使用了多少积分 - assertEquals(result.getUsePoint(), 100); - // 断言:Price 部分 - TradePriceCalculateRespBO.Price price = result.getPrice(); - assertEquals(price.getTotalPrice(), 350); - assertEquals(price.getPayPrice(), 250); - assertEquals(price.getPointPrice(), 100); - // 断言:SKU 1 - TradePriceCalculateRespBO.OrderItem orderItem01 = result.getItems().get(0); - assertEquals(orderItem01.getSkuId(), 10L); - assertEquals(orderItem01.getCount(), 2); - assertEquals(orderItem01.getPrice(), 100); - assertEquals(orderItem01.getPointPrice(), 57); - assertEquals(orderItem01.getPayPrice(), 143); - // 断言:SKU 2 - TradePriceCalculateRespBO.OrderItem orderItem02 = result.getItems().get(1); - assertEquals(orderItem02.getSkuId(), 20L); - assertEquals(orderItem02.getCount(), 3); - assertEquals(orderItem02.getPrice(), 50); - assertEquals(orderItem02.getPointPrice(), 43); - assertEquals(orderItem02.getPayPrice(), 107); - // 断言:SKU 3 - TradePriceCalculateRespBO.OrderItem orderItem03 = result.getItems().get(2); - assertEquals(orderItem03.getSkuId(), 30L); - assertEquals(orderItem03.getCount(), 5); - assertEquals(orderItem03.getPrice(), 30); - assertEquals(orderItem03.getPointPrice(), 0); - assertEquals(orderItem03.getPayPrice(), 150); - // 断言:Promotion 部分 - assertEquals(result.getPromotions().size(), 1); - TradePriceCalculateRespBO.Promotion promotion01 = result.getPromotions().get(0); - assertEquals(promotion01.getId(), user.getId()); - assertEquals(promotion01.getName(), "积分抵扣"); - assertEquals(promotion01.getType(), PromotionTypeEnum.POINT.getType()); - assertEquals(promotion01.getTotalPrice(), 350); - assertEquals(promotion01.getDiscountPrice(), 100); - assertTrue(promotion01.getMatch()); - assertEquals(promotion01.getDescription(), "积分抵扣:省 1.00 元"); - assertEquals(promotion01.getItems().size(), 2); - TradePriceCalculateRespBO.PromotionItem promotionItem011 = promotion01.getItems().get(0); - assertEquals(promotionItem011.getSkuId(), 10L); - assertEquals(promotionItem011.getTotalPrice(), 200); - assertEquals(promotionItem011.getDiscountPrice(), 57); - TradePriceCalculateRespBO.PromotionItem promotionItem012 = promotion01.getItems().get(1); - assertEquals(promotionItem012.getSkuId(), 20L); - assertEquals(promotionItem012.getTotalPrice(), 150); - assertEquals(promotionItem012.getDiscountPrice(), 43); - } - - /** - * 当用户积分充足时,抵扣的金额为:配置表的“积分抵扣最大值” - */ - @Test - public void testCalculate_TradeDeductMaxPrice() { - // 准备参数 - TradePriceCalculateReqBO param = new TradePriceCalculateReqBO() - .setUserId(233L).setPointStatus(true) // 是否使用积分 - .setItems(asList( - new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), // 使用积分 - new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(true), // 使用积分 - new TradePriceCalculateReqBO.Item().setSkuId(30L).setCount(5).setSelected(false) // 未选中,不使用积分 - )); - TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() - .setType(TradeOrderTypeEnum.NORMAL.getType()) - .setPrice(new TradePriceCalculateRespBO.Price()) - .setPromotions(new ArrayList<>()) - .setItems(asList( - new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true) - .setPrice(100).setSpuId(1L), - new TradePriceCalculateRespBO.OrderItem().setSkuId(20L).setCount(3).setSelected(true) - .setPrice(50).setSpuId(2L), - new TradePriceCalculateRespBO.OrderItem().setSkuId(30L).setCount(5).setSelected(false) - .setPrice(30).setSpuId(3L) - )); - // 保证价格被初始化上 - TradePriceCalculatorHelper.recountPayPrice(result.getItems()); - TradePriceCalculatorHelper.recountAllPrice(result); - - // mock 方法(积分配置 信息) - MemberConfigRespDTO memberConfig = randomPojo(MemberConfigRespDTO.class, - o -> o.setPointTradeDeductEnable(true) // 启用积分折扣 - .setPointTradeDeductUnitPrice(1) // 1 积分抵扣多少金额(单位分) - .setPointTradeDeductMaxPrice(50)); // 积分抵扣最大值 - when(memberConfigApi.getConfig()).thenReturn(memberConfig); - // mock 方法(会员 信息) - MemberUserRespDTO user = randomPojo(MemberUserRespDTO.class, o -> o.setId(param.getUserId()).setPoint(100)); - when(memberUserApi.getUser(user.getId())).thenReturn(user); - - // 调用 - tradePointUsePriceCalculator.calculate(param, result); - // 断言:使用了多少积分 - assertEquals(result.getUsePoint(), 50); - // 断言:Price 部分 - TradePriceCalculateRespBO.Price price = result.getPrice(); - assertEquals(price.getTotalPrice(), 350); - assertEquals(price.getPayPrice(), 300); - assertEquals(price.getPointPrice(), 50); - // 断言:SKU 1 - TradePriceCalculateRespBO.OrderItem orderItem01 = result.getItems().get(0); - assertEquals(orderItem01.getSkuId(), 10L); - assertEquals(orderItem01.getCount(), 2); - assertEquals(orderItem01.getPrice(), 100); - assertEquals(orderItem01.getPointPrice(), 28); - assertEquals(orderItem01.getPayPrice(), 172); - // 断言:SKU 2 - TradePriceCalculateRespBO.OrderItem orderItem02 = result.getItems().get(1); - assertEquals(orderItem02.getSkuId(), 20L); - assertEquals(orderItem02.getCount(), 3); - assertEquals(orderItem02.getPrice(), 50); - assertEquals(orderItem02.getPointPrice(), 22); - assertEquals(orderItem02.getPayPrice(), 128); - // 断言:SKU 3 - TradePriceCalculateRespBO.OrderItem orderItem03 = result.getItems().get(2); - assertEquals(orderItem03.getSkuId(), 30L); - assertEquals(orderItem03.getCount(), 5); - assertEquals(orderItem03.getPrice(), 30); - assertEquals(orderItem03.getPointPrice(), 0); - assertEquals(orderItem03.getPayPrice(), 150); - // 断言:Promotion 部分 - assertEquals(result.getPromotions().size(), 1); - TradePriceCalculateRespBO.Promotion promotion01 = result.getPromotions().get(0); - assertEquals(promotion01.getId(), user.getId()); - assertEquals(promotion01.getName(), "积分抵扣"); - assertEquals(promotion01.getType(), PromotionTypeEnum.POINT.getType()); - assertEquals(promotion01.getTotalPrice(), 350); - assertEquals(promotion01.getDiscountPrice(), 50); - assertTrue(promotion01.getMatch()); - assertEquals(promotion01.getDescription(), "积分抵扣:省 0.50 元"); - assertEquals(promotion01.getItems().size(), 2); - TradePriceCalculateRespBO.PromotionItem promotionItem011 = promotion01.getItems().get(0); - assertEquals(promotionItem011.getSkuId(), 10L); - assertEquals(promotionItem011.getTotalPrice(), 200); - assertEquals(promotionItem011.getDiscountPrice(), 28); - TradePriceCalculateRespBO.PromotionItem promotionItem012 = promotion01.getItems().get(1); - assertEquals(promotionItem012.getSkuId(), 20L); - assertEquals(promotionItem012.getTotalPrice(), 150); - assertEquals(promotionItem012.getDiscountPrice(), 22); - } - - /** - * 订单不使用积分,不会产生优惠 - */ - @Test - public void testCalculate_PointStatusFalse() { - // 准备参数 - TradePriceCalculateReqBO param = new TradePriceCalculateReqBO() - .setUserId(233L).setPointStatus(false) // 是否使用积分 - .setItems(asList( - new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), // 使用积分 - new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(true), // 使用积分 - new TradePriceCalculateReqBO.Item().setSkuId(30L).setCount(5).setSelected(false) // 未选中,不使用积分 - )); - TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() - .setType(TradeOrderTypeEnum.NORMAL.getType()) - .setPrice(new TradePriceCalculateRespBO.Price()) - .setPromotions(new ArrayList<>()) - .setItems(asList( - new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true) - .setPrice(100).setSpuId(1L), - new TradePriceCalculateRespBO.OrderItem().setSkuId(20L).setCount(3).setSelected(true) - .setPrice(50).setSpuId(2L), - new TradePriceCalculateRespBO.OrderItem().setSkuId(30L).setCount(5).setSelected(false) - .setPrice(30).setSpuId(3L) - )); - // 保证价格被初始化上 - TradePriceCalculatorHelper.recountPayPrice(result.getItems()); - TradePriceCalculatorHelper.recountAllPrice(result); - - // 调用 - tradePointUsePriceCalculator.calculate(param, result); - // 断言:没有使用积分 - assertNotUsePoint(result); - } - - /** - * 会员积分不足,不会产生优惠 - */ - @Test - public void testCalculate_UserPointNotEnough() { - // 准备参数 - TradePriceCalculateReqBO param = new TradePriceCalculateReqBO() - .setUserId(233L).setPointStatus(true) // 是否使用积分 - .setItems(asList( - new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), // 使用积分 - new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(true), // 使用积分 - new TradePriceCalculateReqBO.Item().setSkuId(30L).setCount(5).setSelected(false) // 未选中,不使用积分 - )); - TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() - .setType(TradeOrderTypeEnum.NORMAL.getType()) - .setPrice(new TradePriceCalculateRespBO.Price()) - .setPromotions(new ArrayList<>()) - .setItems(asList( - new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true) - .setPrice(100).setSpuId(1L), - new TradePriceCalculateRespBO.OrderItem().setSkuId(20L).setCount(3).setSelected(true) - .setPrice(50).setSpuId(2L), - new TradePriceCalculateRespBO.OrderItem().setSkuId(30L).setCount(5).setSelected(false) - .setPrice(30).setSpuId(3L) - )); - // 保证价格被初始化上 - TradePriceCalculatorHelper.recountPayPrice(result.getItems()); - TradePriceCalculatorHelper.recountAllPrice(result); - - // mock 方法(积分配置 信息) - MemberConfigRespDTO memberConfig = randomPojo(MemberConfigRespDTO.class, - o -> o.setPointTradeDeductEnable(true) // 启用积分折扣 - .setPointTradeDeductUnitPrice(1) // 1 积分抵扣多少金额(单位分) - .setPointTradeDeductMaxPrice(100)); // 积分抵扣最大值 - when(memberConfigApi.getConfig()).thenReturn(memberConfig); - // mock 方法(会员 信息) - MemberUserRespDTO user = randomPojo(MemberUserRespDTO.class, o -> o.setId(param.getUserId()).setPoint(0)); - when(memberUserApi.getUser(user.getId())).thenReturn(user); - - // 调用 - tradePointUsePriceCalculator.calculate(param, result); - - // 断言:没有使用积分 - assertNotUsePoint(result); - } - - /** - * 断言:没有使用积分 - */ - private static void assertNotUsePoint(TradePriceCalculateRespBO result) { - // 断言:使用了多少积分 - assertEquals(result.getUsePoint(), 0); - // 断言:Price 部分 - TradePriceCalculateRespBO.Price price = result.getPrice(); - assertEquals(price.getTotalPrice(), 350); - assertEquals(price.getPayPrice(), 350); - assertEquals(price.getPointPrice(), 0); - // 断言:SKU 1 - TradePriceCalculateRespBO.OrderItem orderItem01 = result.getItems().get(0); - assertEquals(orderItem01.getSkuId(), 10L); - assertEquals(orderItem01.getCount(), 2); - assertEquals(orderItem01.getPrice(), 100); - assertEquals(orderItem01.getPointPrice(), 0); - assertEquals(orderItem01.getPayPrice(), 200); - // 断言:SKU 2 - TradePriceCalculateRespBO.OrderItem orderItem02 = result.getItems().get(1); - assertEquals(orderItem02.getSkuId(), 20L); - assertEquals(orderItem02.getCount(), 3); - assertEquals(orderItem02.getPrice(), 50); - assertEquals(orderItem02.getPointPrice(), 0); - assertEquals(orderItem02.getPayPrice(), 150); - // 断言:SKU 3 - TradePriceCalculateRespBO.OrderItem orderItem03 = result.getItems().get(2); - assertEquals(orderItem03.getSkuId(), 30L); - assertEquals(orderItem03.getCount(), 5); - assertEquals(orderItem03.getPrice(), 30); - assertEquals(orderItem03.getPointPrice(), 0); - assertEquals(orderItem03.getPayPrice(), 150); - // 断言:Promotion 部分 - assertEquals(result.getPromotions().size(), 0); - } -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeRewardActivityPriceCalculatorTest.java b/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeRewardActivityPriceCalculatorTest.java deleted file mode 100644 index de72ed616..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeRewardActivityPriceCalculatorTest.java +++ /dev/null @@ -1,235 +0,0 @@ -package cn.iocoder.yudao.module.trade.service.price.calculator; - -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.promotion.api.reward.RewardActivityApi; -import cn.iocoder.yudao.module.promotion.api.reward.dto.RewardActivityMatchRespDTO; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionConditionTypeEnum; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import java.util.ArrayList; - -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static java.util.Arrays.asList; -import static java.util.Collections.singletonList; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -/** - * {@link TradeRewardActivityPriceCalculator} 的单元测试类 - * - * @author 芋道源码 - */ -public class TradeRewardActivityPriceCalculatorTest extends BaseMockitoUnitTest { - - @InjectMocks - private TradeRewardActivityPriceCalculator tradeRewardActivityPriceCalculator; - - @Mock - private RewardActivityApi rewardActivityApi; - - @Test - public void testCalculate_match() { - // 准备参数 - TradePriceCalculateReqBO param = new TradePriceCalculateReqBO() - .setItems(asList( - new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), // 匹配活动 1 - new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(true), // 匹配活动 1 - new TradePriceCalculateReqBO.Item().setSkuId(30L).setCount(4).setSelected(true) // 匹配活动 2 - )); - TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() - .setType(TradeOrderTypeEnum.NORMAL.getType()) - .setPrice(new TradePriceCalculateRespBO.Price()) - .setPromotions(new ArrayList<>()) - .setItems(asList( - new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true) - .setPrice(100).setSpuId(1L), - new TradePriceCalculateRespBO.OrderItem().setSkuId(20L).setCount(3).setSelected(true) - .setPrice(50).setSpuId(2L), - new TradePriceCalculateRespBO.OrderItem().setSkuId(30L).setCount(4).setSelected(true) - .setPrice(30).setSpuId(3L) - )); - // 保证价格被初始化上 - TradePriceCalculatorHelper.recountPayPrice(result.getItems()); - TradePriceCalculatorHelper.recountAllPrice(result); - - // mock 方法(限时折扣 DiscountActivity 信息) - when(rewardActivityApi.getMatchRewardActivityList(eq(asSet(1L, 2L, 3L)))).thenReturn(asList( - randomPojo(RewardActivityMatchRespDTO.class, o -> o.setId(1000L).setName("活动 1000 号") - .setSpuIds(asList(1L, 2L)).setConditionType(PromotionConditionTypeEnum.PRICE.getType()) - .setRules(singletonList(new RewardActivityMatchRespDTO.Rule().setLimit(200).setDiscountPrice(70)))), - randomPojo(RewardActivityMatchRespDTO.class, o -> o.setId(2000L).setName("活动 2000 号") - .setSpuIds(singletonList(3L)).setConditionType(PromotionConditionTypeEnum.COUNT.getType()) - .setRules(asList(new RewardActivityMatchRespDTO.Rule().setLimit(1).setDiscountPrice(10), - new RewardActivityMatchRespDTO.Rule().setLimit(2).setDiscountPrice(60), // 最大可满足,因为是 4 个 - new RewardActivityMatchRespDTO.Rule().setLimit(10).setDiscountPrice(100)))) - )); - - // 调用 - tradeRewardActivityPriceCalculator.calculate(param, result); - // 断言 Order 部分 - TradePriceCalculateRespBO.Price price = result.getPrice(); - assertEquals(price.getTotalPrice(), 470); - assertEquals(price.getDiscountPrice(), 130); - assertEquals(price.getPointPrice(), 0); - assertEquals(price.getDeliveryPrice(), 0); - assertEquals(price.getCouponPrice(), 0); - assertEquals(price.getPayPrice(), 340); - assertNull(result.getCouponId()); - // 断言:SKU 1 - assertEquals(result.getItems().size(), 3); - TradePriceCalculateRespBO.OrderItem orderItem01 = result.getItems().get(0); - assertEquals(orderItem01.getSkuId(), 10L); - assertEquals(orderItem01.getCount(), 2); - assertEquals(orderItem01.getPrice(), 100); - assertEquals(orderItem01.getDiscountPrice(), 40); - assertEquals(orderItem01.getDeliveryPrice(), 0); - assertEquals(orderItem01.getCouponPrice(), 0); - assertEquals(orderItem01.getPointPrice(), 0); - assertEquals(orderItem01.getPayPrice(), 160); - // 断言:SKU 2 - TradePriceCalculateRespBO.OrderItem orderItem02 = result.getItems().get(1); - assertEquals(orderItem02.getSkuId(), 20L); - assertEquals(orderItem02.getCount(), 3); - assertEquals(orderItem02.getPrice(), 50); - assertEquals(orderItem02.getDiscountPrice(), 30); - assertEquals(orderItem02.getDeliveryPrice(), 0); - assertEquals(orderItem02.getCouponPrice(), 0); - assertEquals(orderItem02.getPointPrice(), 0); - assertEquals(orderItem02.getPayPrice(), 120); - // 断言:SKU 3 - TradePriceCalculateRespBO.OrderItem orderItem03 = result.getItems().get(2); - assertEquals(orderItem03.getSkuId(), 30L); - assertEquals(orderItem03.getCount(), 4); - assertEquals(orderItem03.getPrice(), 30); - assertEquals(orderItem03.getDiscountPrice(), 60); - assertEquals(orderItem03.getDeliveryPrice(), 0); - assertEquals(orderItem03.getCouponPrice(), 0); - assertEquals(orderItem03.getPointPrice(), 0); - assertEquals(orderItem03.getPayPrice(), 60); - // 断言:Promotion 部分(第一个) - assertEquals(result.getPromotions().size(), 2); - TradePriceCalculateRespBO.Promotion promotion01 = result.getPromotions().get(0); - assertEquals(promotion01.getId(), 1000L); - assertEquals(promotion01.getName(), "活动 1000 号"); - assertEquals(promotion01.getType(), PromotionTypeEnum.REWARD_ACTIVITY.getType()); - assertEquals(promotion01.getTotalPrice(), 350); - assertEquals(promotion01.getDiscountPrice(), 70); - assertTrue(promotion01.getMatch()); - assertEquals(promotion01.getDescription(), "满减送:省 0.70 元"); - assertEquals(promotion01.getItems().size(), 2); - TradePriceCalculateRespBO.PromotionItem promotionItem011 = promotion01.getItems().get(0); - assertEquals(promotionItem011.getSkuId(), 10L); - assertEquals(promotionItem011.getTotalPrice(), 200); - assertEquals(promotionItem011.getDiscountPrice(), 40); - TradePriceCalculateRespBO.PromotionItem promotionItem012 = promotion01.getItems().get(1); - assertEquals(promotionItem012.getSkuId(), 20L); - assertEquals(promotionItem012.getTotalPrice(), 150); - assertEquals(promotionItem012.getDiscountPrice(), 30); - // 断言:Promotion 部分(第二个) - TradePriceCalculateRespBO.Promotion promotion02 = result.getPromotions().get(1); - assertEquals(promotion02.getId(), 2000L); - assertEquals(promotion02.getName(), "活动 2000 号"); - assertEquals(promotion02.getType(), PromotionTypeEnum.REWARD_ACTIVITY.getType()); - assertEquals(promotion02.getTotalPrice(), 120); - assertEquals(promotion02.getDiscountPrice(), 60); - assertTrue(promotion02.getMatch()); - assertEquals(promotion02.getDescription(), "满减送:省 0.60 元"); - TradePriceCalculateRespBO.PromotionItem promotionItem02 = promotion02.getItems().get(0); - assertEquals(promotion02.getItems().size(), 1); - assertEquals(promotionItem02.getSkuId(), 30L); - assertEquals(promotionItem02.getTotalPrice(), 120); - assertEquals(promotionItem02.getDiscountPrice(), 60); - } - - @Test - public void testCalculate_notMatch() { - // 准备参数 - TradePriceCalculateReqBO param = new TradePriceCalculateReqBO() - .setItems(asList( - new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), - new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(true), - new TradePriceCalculateReqBO.Item().setSkuId(30L).setCount(4).setSelected(true) - )); - TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() - .setType(TradeOrderTypeEnum.NORMAL.getType()) - .setPrice(new TradePriceCalculateRespBO.Price()) - .setPromotions(new ArrayList<>()) - .setItems(asList( - new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true) - .setPrice(100).setSpuId(1L), - new TradePriceCalculateRespBO.OrderItem().setSkuId(20L).setCount(3).setSelected(true) - .setPrice(50).setSpuId(2L) - )); - // 保证价格被初始化上 - TradePriceCalculatorHelper.recountPayPrice(result.getItems()); - TradePriceCalculatorHelper.recountAllPrice(result); - - // mock 方法(限时折扣 DiscountActivity 信息) - when(rewardActivityApi.getMatchRewardActivityList(eq(asSet(1L, 2L)))).thenReturn(singletonList( - randomPojo(RewardActivityMatchRespDTO.class, o -> o.setId(1000L).setName("活动 1000 号") - .setSpuIds(asList(1L, 2L)).setConditionType(PromotionConditionTypeEnum.PRICE.getType()) - .setRules(singletonList(new RewardActivityMatchRespDTO.Rule().setLimit(351).setDiscountPrice(70)))) - )); - - // 调用 - tradeRewardActivityPriceCalculator.calculate(param, result); - // 断言 Order 部分 - TradePriceCalculateRespBO.Price price = result.getPrice(); - assertEquals(price.getTotalPrice(), 350); - assertEquals(price.getDiscountPrice(), 0); - assertEquals(price.getPointPrice(), 0); - assertEquals(price.getDeliveryPrice(), 0); - assertEquals(price.getCouponPrice(), 0); - assertEquals(price.getPayPrice(), 350); - assertNull(result.getCouponId()); - // 断言:SKU 1 - assertEquals(result.getItems().size(), 2); - TradePriceCalculateRespBO.OrderItem orderItem01 = result.getItems().get(0); - assertEquals(orderItem01.getSkuId(), 10L); - assertEquals(orderItem01.getCount(), 2); - assertEquals(orderItem01.getPrice(), 100); - assertEquals(orderItem01.getDiscountPrice(), 0); - assertEquals(orderItem01.getDeliveryPrice(), 0); - assertEquals(orderItem01.getCouponPrice(), 0); - assertEquals(orderItem01.getPointPrice(), 0); - assertEquals(orderItem01.getPayPrice(), 200); - // 断言:SKU 2 - TradePriceCalculateRespBO.OrderItem orderItem02 = result.getItems().get(1); - assertEquals(orderItem02.getSkuId(), 20L); - assertEquals(orderItem02.getCount(), 3); - assertEquals(orderItem02.getPrice(), 50); - assertEquals(orderItem02.getDiscountPrice(), 0); - assertEquals(orderItem02.getDeliveryPrice(), 0); - assertEquals(orderItem02.getCouponPrice(), 0); - assertEquals(orderItem02.getPointPrice(), 0); - assertEquals(orderItem02.getPayPrice(), 150); - // 断言 Promotion 部分 - assertEquals(result.getPromotions().size(), 1); - TradePriceCalculateRespBO.Promotion promotion01 = result.getPromotions().get(0); - assertEquals(promotion01.getId(), 1000L); - assertEquals(promotion01.getName(), "活动 1000 号"); - assertEquals(promotion01.getType(), PromotionTypeEnum.REWARD_ACTIVITY.getType()); - assertEquals(promotion01.getTotalPrice(), 350); - assertEquals(promotion01.getDiscountPrice(), 0); - assertFalse(promotion01.getMatch()); - assertEquals(promotion01.getDescription(), "TODO"); // TODO 芋艿:后面再想想 - assertEquals(promotion01.getItems().size(), 2); - TradePriceCalculateRespBO.PromotionItem promotionItem011 = promotion01.getItems().get(0); - assertEquals(promotionItem011.getSkuId(), 10L); - assertEquals(promotionItem011.getTotalPrice(), 200); - assertEquals(promotionItem011.getDiscountPrice(), 0); - TradePriceCalculateRespBO.PromotionItem promotionItem012 = promotion01.getItems().get(1); - assertEquals(promotionItem012.getSkuId(), 20L); - assertEquals(promotionItem012.getTotalPrice(), 150); - assertEquals(promotionItem012.getDiscountPrice(), 0); - } - -} diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java index c05eaa9fd..07cc581c6 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java @@ -39,7 +39,8 @@ public interface MemberUserApi { * @return 会员用户 Map */ default Map getUserMap(Collection ids) { - return convertMap(getUserList(ids).getCheckedData(), MemberUserRespDTO::getId); + List list = getUserList(ids).getCheckedData(); + return convertMap(list, MemberUserRespDTO::getId); } @GetMapping(PREFIX + "/list-by-nickname") diff --git a/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/address/AddressServiceImplTest.java b/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/address/AddressServiceImplTest.java deleted file mode 100644 index e4337f2c9..000000000 --- a/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/address/AddressServiceImplTest.java +++ /dev/null @@ -1,98 +0,0 @@ -package cn.iocoder.yudao.module.member.service.address; - -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressCreateReqVO; -import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.address.MemberAddressDO; -import cn.iocoder.yudao.module.member.dal.mysql.address.MemberAddressMapper; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ADDRESS_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; - -/** - * {@link AddressServiceImpl} 的单元测试类 - * - * @author 芋道源码 - */ -@Import(AddressServiceImpl.class) -public class AddressServiceImplTest extends BaseDbUnitTest { - - @Resource - private AddressServiceImpl addressService; - - @Resource - private MemberAddressMapper addressMapper; - - @Test - public void testCreateAddress_success() { - // 准备参数 - AppAddressCreateReqVO reqVO = randomPojo(AppAddressCreateReqVO.class); - - // 调用 - Long addressId = addressService.createAddress(randomLongId(), reqVO); - // 断言 - assertNotNull(addressId); - // 校验记录的属性是否正确 - MemberAddressDO address = addressMapper.selectById(addressId); - assertPojoEquals(reqVO, address); - } - - @Test - public void testUpdateAddress_success() { - // mock 数据 - MemberAddressDO dbAddress = randomPojo(MemberAddressDO.class); - addressMapper.insert(dbAddress);// @Sql: 先插入出一条存在的数据 - // 准备参数 - AppAddressUpdateReqVO reqVO = randomPojo(AppAddressUpdateReqVO.class, o -> { - o.setId(dbAddress.getId()); // 设置更新的 ID - }); - - // 调用 - addressService.updateAddress(dbAddress.getUserId(), reqVO); - // 校验是否更新正确 - MemberAddressDO address = addressMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, address); - } - - @Test - public void testUpdateAddress_notExists() { - // 准备参数 - AppAddressUpdateReqVO reqVO = randomPojo(AppAddressUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> addressService.updateAddress(randomLongId(), reqVO), ADDRESS_NOT_EXISTS); - } - - @Test - public void testDeleteAddress_success() { - // mock 数据 - MemberAddressDO dbAddress = randomPojo(MemberAddressDO.class); - addressMapper.insert(dbAddress);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbAddress.getId(); - - // 调用 - addressService.deleteAddress(dbAddress.getUserId(), id); - // 校验数据不存在了 - assertNull(addressMapper.selectById(id)); - } - - @Test - public void testDeleteAddress_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> addressService.deleteAddress(randomLongId(), id), ADDRESS_NOT_EXISTS); - } - -} diff --git a/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java b/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java deleted file mode 100644 index 78ddc5677..000000000 --- a/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java +++ /dev/null @@ -1,118 +0,0 @@ -package cn.iocoder.yudao.module.member.service.auth; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbAndRedisUnitTest; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import cn.iocoder.yudao.module.system.api.logger.LoginLogApi; -import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi; -import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; -import cn.iocoder.yudao.module.system.api.social.SocialUserApi; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; -import org.springframework.security.crypto.password.PasswordEncoder; - -import javax.annotation.Resource; -import java.util.function.Consumer; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; - -// TODO @芋艿:单测的 review,等逻辑都达成一致后 -/** - * {@link MemberAuthService} 的单元测试类 - * - * @author 宋天 - */ -@Import({MemberAuthServiceImpl.class, YudaoRedisAutoConfiguration.class}) -public class MemberAuthServiceTest extends BaseDbAndRedisUnitTest { - - // TODO @芋艿:登录相关的单测,待补全 - - @Resource - private MemberAuthServiceImpl authService; - - @MockBean - private MemberUserService userService; - @MockBean - private SmsCodeApi smsCodeApi; - @MockBean - private LoginLogApi loginLogApi; - @MockBean - private OAuth2TokenApi oauth2TokenApi; - @MockBean - private SocialUserApi socialUserApi; - @MockBean - private PasswordEncoder passwordEncoder; - - @Resource - private MemberUserMapper memberUserMapper; - - // TODO 芋艿:后续重构这个单测 -// @Test -// public void testUpdatePassword_success(){ -// // 准备参数 -// MemberUserDO userDO = randomUserDO(); -// memberUserMapper.insert(userDO); -// -// // 新密码 -// String newPassword = randomString(); -// -// // 请求实体 -// AppMemberUserUpdatePasswordReqVO reqVO = AppMemberUserUpdatePasswordReqVO.builder() -// .oldPassword(userDO.getPassword()) -// .password(newPassword) -// .build(); -// -// // 测试桩 -// // 这两个相等是为了返回ture这个结果 -// when(passwordEncoder.matches(reqVO.getOldPassword(),reqVO.getOldPassword())).thenReturn(true); -// when(passwordEncoder.encode(newPassword)).thenReturn(newPassword); -// -// // 更新用户密码 -// authService.updatePassword(userDO.getId(), reqVO); -// assertEquals(memberUserMapper.selectById(userDO.getId()).getPassword(),newPassword); -// } - - // TODO 芋艿:后续重构这个单测 -// @Test -// public void testResetPassword_success(){ -// // 准备参数 -// MemberUserDO userDO = randomUserDO(); -// memberUserMapper.insert(userDO); -// -// // 随机密码 -// String password = randomNumbers(11); -// // 随机验证码 -// String code = randomNumbers(4); -// -// // mock -// when(passwordEncoder.encode(password)).thenReturn(password); -// -// // 更新用户密码 -// AppMemberUserResetPasswordReqVO reqVO = new AppMemberUserResetPasswordReqVO(); -// reqVO.setMobile(userDO.getMobile()); -// reqVO.setPassword(password); -// reqVO.setCode(code); -// -// authService.resetPassword(reqVO); -// assertEquals(memberUserMapper.selectById(userDO.getId()).getPassword(),password); -// } - - // ========== 随机对象 ========== - - @SafeVarargs - private static MemberUserDO randomUserDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围 - o.setPassword(randomString()); - }; - return randomPojo(MemberUserDO.class, ArrayUtils.append(consumer, consumers)); - } - - -} diff --git a/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImplTest.java b/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImplTest.java deleted file mode 100644 index 6d8e6f9ce..000000000 --- a/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImplTest.java +++ /dev/null @@ -1,160 +0,0 @@ -package cn.iocoder.yudao.module.member.service.group; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; -import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_HAS_USER; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -// TODO 芋艿:完全 review 完,在去 review 单测 -/** - * {@link MemberGroupServiceImpl} 的单元测试类 - * - * @author owen - */ -@Import(MemberGroupServiceImpl.class) -public class MemberGroupServiceImplTest extends BaseDbUnitTest { - - @Resource - private MemberGroupServiceImpl groupService; - - @Resource - private MemberGroupMapper groupMapper; - - @MockBean - private MemberUserService memberUserService; - - @Test - public void testCreateGroup_success() { - // 准备参数 - MemberGroupCreateReqVO reqVO = randomPojo(MemberGroupCreateReqVO.class, - o -> o.setStatus(randomCommonStatus())); - - // 调用 - Long groupId = groupService.createGroup(reqVO); - // 断言 - assertNotNull(groupId); - // 校验记录的属性是否正确 - MemberGroupDO group = groupMapper.selectById(groupId); - assertPojoEquals(reqVO, group); - } - - @Test - public void testUpdateGroup_success() { - // mock 数据 - MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class); - groupMapper.insert(dbGroup);// @Sql: 先插入出一条存在的数据 - // 准备参数 - MemberGroupUpdateReqVO reqVO = randomPojo(MemberGroupUpdateReqVO.class, o -> { - o.setId(dbGroup.getId()); // 设置更新的 ID - o.setStatus(randomCommonStatus()); - }); - - // 调用 - groupService.updateGroup(reqVO); - // 校验是否更新正确 - MemberGroupDO group = groupMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, group); - } - - @Test - public void testUpdateGroup_notExists() { - // 准备参数 - MemberGroupUpdateReqVO reqVO = randomPojo(MemberGroupUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> groupService.updateGroup(reqVO), GROUP_NOT_EXISTS); - } - - @Test - public void testDeleteGroup_success() { - // mock 数据 - MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class); - groupMapper.insert(dbGroup);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbGroup.getId(); - - // 调用 - groupService.deleteGroup(id); - // 校验数据不存在了 - assertNull(groupMapper.selectById(id)); - } - - @Test - public void testDeleteGroup_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> groupService.deleteGroup(id), GROUP_NOT_EXISTS); - } - - @Test - public void testDeleteGroup_hasUser() { - // mock 数据 - MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class); - groupMapper.insert(dbGroup);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbGroup.getId(); - - // mock 会员数据 - when(memberUserService.getUserCountByGroupId(eq(id))).thenReturn(1L); - - // 调用, 并断言异常 - assertServiceException(() -> groupService.deleteGroup(id), GROUP_HAS_USER); - } - - @Test - public void testGetGroupPage() { - String name = randomString(); - int status = CommonStatusEnum.ENABLE.getStatus(); - - // mock 数据 - MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class, o -> { // 等会查询到 - o.setName(name); - o.setStatus(status); - o.setCreateTime(buildTime(2023, 2, 18)); - }); - groupMapper.insert(dbGroup); - // 测试 name 不匹配 - groupMapper.insert(cloneIgnoreId(dbGroup, o -> o.setName(""))); - // 测试 status 不匹配 - groupMapper.insert(cloneIgnoreId(dbGroup, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 createTime 不匹配 - groupMapper.insert(cloneIgnoreId(dbGroup, o -> o.setCreateTime(null))); - // 准备参数 - MemberGroupPageReqVO reqVO = new MemberGroupPageReqVO(); - reqVO.setName(name); - reqVO.setStatus(status); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = groupService.getGroupPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbGroup, pageResult.getList().get(0)); - } - -} diff --git a/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImplTest.java b/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImplTest.java deleted file mode 100644 index 439322913..000000000 --- a/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImplTest.java +++ /dev/null @@ -1,268 +0,0 @@ -package cn.iocoder.yudao.module.member.service.level; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelListReqVO; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; -import cn.iocoder.yudao.module.member.dal.mysql.level.MemberLevelMapper; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.util.List; -import java.util.function.Consumer; - -import static cn.hutool.core.util.RandomUtil.randomInt; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; -import static org.junit.jupiter.api.Assertions.*; - -// TODO 芋艿:完全 review 完,在去 review 单测 -/** - * {@link MemberLevelServiceImpl} 的单元测试类 - * - * @author owen - */ -@Import(MemberLevelServiceImpl.class) -public class MemberLevelServiceImplTest extends BaseDbUnitTest { - - @Resource - private MemberLevelServiceImpl levelService; - - @Resource - private MemberLevelMapper memberlevelMapper; - - @MockBean - private MemberLevelRecordService memberLevelRecordService; - @MockBean - private MemberExperienceRecordService memberExperienceRecordService; - @MockBean - private MemberUserService memberUserService; - - @Test - public void testCreateLevel_success() { - // 准备参数 - MemberLevelCreateReqVO reqVO = randomPojo(MemberLevelCreateReqVO.class, o -> { - o.setDiscountPercent(randomInt()); - o.setIcon(randomURL()); - o.setBackgroundUrl(randomURL()); - o.setStatus(randomCommonStatus()); - }); - - // 调用 - Long levelId = levelService.createLevel(reqVO); - // 断言 - assertNotNull(levelId); - // 校验记录的属性是否正确 - MemberLevelDO level = memberlevelMapper.selectById(levelId); - assertPojoEquals(reqVO, level); - } - - @Test - public void testUpdateLevel_success() { - // mock 数据 - MemberLevelDO dbLevel = randomPojo(MemberLevelDO.class); - memberlevelMapper.insert(dbLevel);// @Sql: 先插入出一条存在的数据 - // 准备参数 - MemberLevelUpdateReqVO reqVO = randomPojo(MemberLevelUpdateReqVO.class, o -> { - o.setId(dbLevel.getId()); // 设置更新的 ID - //以下要保持一致 - o.setName(dbLevel.getName()); - o.setLevel(dbLevel.getLevel()); - o.setExperience(dbLevel.getExperience()); - //以下是要修改的字段 - o.setDiscountPercent(randomInt()); - o.setIcon(randomURL()); - o.setBackgroundUrl(randomURL()); - o.setStatus(randomCommonStatus()); - }); - - // 调用 - levelService.updateLevel(reqVO); - // 校验是否更新正确 - MemberLevelDO level = memberlevelMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, level); - } - - @Test - public void testUpdateLevel_notExists() { - // 准备参数 - MemberLevelUpdateReqVO reqVO = randomPojo(MemberLevelUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> levelService.updateLevel(reqVO), LEVEL_NOT_EXISTS); - } - - @Test - public void testDeleteLevel_success() { - // mock 数据 - MemberLevelDO dbLevel = randomPojo(MemberLevelDO.class); - memberlevelMapper.insert(dbLevel);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbLevel.getId(); - - // 调用 - levelService.deleteLevel(id); - // 校验数据不存在了 - assertNull(memberlevelMapper.selectById(id)); - } - - @Test - public void testDeleteLevel_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> levelService.deleteLevel(id), LEVEL_NOT_EXISTS); - } - - @Test - public void testGetLevelList() { - // mock 数据 - MemberLevelDO dbLevel = randomPojo(MemberLevelDO.class, o -> { // 等会查询到 - o.setName("黄金会员"); - o.setStatus(1); - }); - memberlevelMapper.insert(dbLevel); - // 测试 name 不匹配 - memberlevelMapper.insert(cloneIgnoreId(dbLevel, o -> o.setName(""))); - // 测试 status 不匹配 - memberlevelMapper.insert(cloneIgnoreId(dbLevel, o -> o.setStatus(0))); - // 准备参数 - MemberLevelListReqVO reqVO = new MemberLevelListReqVO(); - reqVO.setName("黄金会员"); - reqVO.setStatus(1); - - // 调用 - List list = levelService.getLevelList(reqVO); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(dbLevel, list.get(0)); - } - - @Test - public void testCreateLevel_nameUnique() { - // 准备参数 - String name = randomString(); - - // mock 数据 - memberlevelMapper.insert(randomLevelDO(o -> o.setName(name))); - - // 调用,校验异常 - List list = memberlevelMapper.selectList(); - assertServiceException(() -> levelService.validateNameUnique(list, null, name), LEVEL_NAME_EXISTS, name); - } - - @Test - public void testUpdateLevel_nameUnique() { - // 准备参数 - Long id = randomLongId(); - String name = randomString(); - - // mock 数据 - memberlevelMapper.insert(randomLevelDO(o -> o.setName(name))); - - // 调用,校验异常 - List list = memberlevelMapper.selectList(); - assertServiceException(() -> levelService.validateNameUnique(list, id, name), LEVEL_NAME_EXISTS, name); - } - - @Test - public void testCreateLevel_levelUnique() { - // 准备参数 - Integer level = randomInteger(); - String name = randomString(); - - // mock 数据 - memberlevelMapper.insert(randomLevelDO(o -> { - o.setLevel(level); - o.setName(name); - })); - - // 调用,校验异常 - List list = memberlevelMapper.selectList(); - assertServiceException(() -> levelService.validateLevelUnique(list, null, level), LEVEL_VALUE_EXISTS, level, name); - } - - @Test - public void testUpdateLevel_levelUnique() { - // 准备参数 - Long id = randomLongId(); - Integer level = randomInteger(); - String name = randomString(); - - // mock 数据 - memberlevelMapper.insert(randomLevelDO(o -> { - o.setLevel(level); - o.setName(name); - })); - - // 调用,校验异常 - List list = memberlevelMapper.selectList(); - assertServiceException(() -> levelService.validateLevelUnique(list, id, level), LEVEL_VALUE_EXISTS, level, name); - } - - @Test - public void testCreateLevel_experienceOutRange() { - // 准备参数 - int level = 10; - int experience = 10; - String name = randomString(); - - // mock 数据 - memberlevelMapper.insert(randomLevelDO(o -> { - o.setLevel(level); - o.setExperience(experience); - o.setName(name); - })); - List list = memberlevelMapper.selectList(); - - // 调用,校验异常 - assertServiceException(() -> levelService.validateExperienceOutRange(list, null, level + 1, experience - 1), LEVEL_EXPERIENCE_MIN, name, level); - // 调用,校验异常 - assertServiceException(() -> levelService.validateExperienceOutRange(list, null, level - 1, experience + 1), LEVEL_EXPERIENCE_MAX, name, level); - } - - @Test - public void testUpdateLevel_experienceOutRange() { - // 准备参数 - int level = 10; - int experience = 10; - Long id = randomLongId(); - String name = randomString(); - - // mock 数据 - memberlevelMapper.insert(randomLevelDO(o -> { - o.setLevel(level); - o.setExperience(experience); - o.setName(name); - })); - List list = memberlevelMapper.selectList(); - - // 调用,校验异常 - assertServiceException(() -> levelService.validateExperienceOutRange(list, id, level + 1, experience - 1), LEVEL_EXPERIENCE_MIN, name, level); - // 调用,校验异常 - assertServiceException(() -> levelService.validateExperienceOutRange(list, id, level - 1, experience + 1), LEVEL_EXPERIENCE_MAX, name, level); - } - - // ========== 随机对象 ========== - - @SafeVarargs - private static MemberLevelDO randomLevelDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setDiscountPercent(randomInt(0, 100)); - o.setIcon(randomURL()); - o.setBackgroundUrl(randomURL()); - }; - return randomPojo(MemberLevelDO.class, ArrayUtils.append(consumer, consumers)); - } -} diff --git a/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImplTest.java b/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImplTest.java deleted file mode 100644 index 5fd4f7a9c..000000000 --- a/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImplTest.java +++ /dev/null @@ -1,133 +0,0 @@ -package cn.iocoder.yudao.module.member.service.tag; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO; -import cn.iocoder.yudao.module.member.dal.mysql.tag.MemberTagMapper; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.TAG_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; - -// TODO 芋艿:完全 review 完,在去 review 单测 -/** - * {@link MemberTagServiceImpl} 的单元测试类 - * - * @author 芋道源码 - */ -@Import(MemberTagServiceImpl.class) -public class MemberTagServiceImplTest extends BaseDbUnitTest { - - @Resource - private MemberTagServiceImpl tagService; - - @Resource - private MemberTagMapper tagMapper; - - @MockBean - private MemberUserService memberUserService; - - @Test - public void testCreateTag_success() { - // 准备参数 - MemberTagCreateReqVO reqVO = randomPojo(MemberTagCreateReqVO.class); - - // 调用 - Long tagId = tagService.createTag(reqVO); - // 断言 - assertNotNull(tagId); - // 校验记录的属性是否正确 - MemberTagDO tag = tagMapper.selectById(tagId); - assertPojoEquals(reqVO, tag); - } - - @Test - public void testUpdateTag_success() { - // mock 数据 - MemberTagDO dbTag = randomPojo(MemberTagDO.class); - tagMapper.insert(dbTag);// @Sql: 先插入出一条存在的数据 - // 准备参数 - MemberTagUpdateReqVO reqVO = randomPojo(MemberTagUpdateReqVO.class, o -> { - o.setId(dbTag.getId()); // 设置更新的 ID - }); - - // 调用 - tagService.updateTag(reqVO); - // 校验是否更新正确 - MemberTagDO tag = tagMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, tag); - } - - @Test - public void testUpdateTag_notExists() { - // 准备参数 - MemberTagUpdateReqVO reqVO = randomPojo(MemberTagUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> tagService.updateTag(reqVO), TAG_NOT_EXISTS); - } - - @Test - public void testDeleteTag_success() { - // mock 数据 - MemberTagDO dbTag = randomPojo(MemberTagDO.class); - tagMapper.insert(dbTag);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbTag.getId(); - - // 调用 - tagService.deleteTag(id); - // 校验数据不存在了 - assertNull(tagMapper.selectById(id)); - } - - @Test - public void testDeleteTag_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> tagService.deleteTag(id), TAG_NOT_EXISTS); - } - - @Test - public void testGetTagPage() { - // mock 数据 - MemberTagDO dbTag = randomPojo(MemberTagDO.class, o -> { // 等会查询到 - o.setName("test"); - o.setCreateTime(buildTime(2023, 2, 18)); - }); - tagMapper.insert(dbTag); - // 测试 name 不匹配 - tagMapper.insert(cloneIgnoreId(dbTag, o -> o.setName("ne"))); - // 测试 createTime 不匹配 - tagMapper.insert(cloneIgnoreId(dbTag, o -> o.setCreateTime(null))); - // 准备参数 - MemberTagPageReqVO reqVO = new MemberTagPageReqVO(); - reqVO.setName("test"); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = tagService.getTagPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbTag, pageResult.getList().get(0)); - } - -} diff --git a/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java b/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java deleted file mode 100644 index bff2ae0c1..000000000 --- a/yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java +++ /dev/null @@ -1,136 +0,0 @@ -package cn.iocoder.yudao.module.member.service.user; - -import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbAndRedisUnitTest; -import cn.iocoder.yudao.module.infra.api.file.FileApi; -import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; -import cn.iocoder.yudao.module.member.service.auth.MemberAuthServiceImpl; -import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.security.crypto.password.PasswordEncoder; - -import javax.annotation.Resource; -import java.util.function.Consumer; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.hutool.core.util.RandomUtil.randomNumbers; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.junit.jupiter.api.Assertions.assertEquals; - -// TODO @芋艿:单测的 review,等逻辑都达成一致后 -/** - * {@link MemberUserServiceImpl} 的单元测试类 - * - * @author 宋天 - */ -@Import({MemberUserServiceImpl.class, YudaoRedisAutoConfiguration.class}) -public class MemberUserServiceImplTest extends BaseDbAndRedisUnitTest { - - @Resource - private MemberUserServiceImpl memberUserService; - - @Resource - private StringRedisTemplate stringRedisTemplate; - - @Resource - private MemberUserMapper userMapper; - - @MockBean - private MemberAuthServiceImpl authService; - - @MockBean - private PasswordEncoder passwordEncoder; - - @MockBean - private SmsCodeApi smsCodeApi; - @MockBean - private FileApi fileApi; - - // TODO 芋艿:后续重构这个单测 -// @Test -// public void testUpdateNickName_success(){ -// // mock 数据 -// MemberUserDO userDO = randomUserDO(); -// userMapper.insert(userDO); -// -// // 随机昵称 -// String newNickName = randomString(); -// -// // 调用接口修改昵称 -// memberUserService.updateUser(userDO.getId(),newNickName); -// // 查询新修改后的昵称 -// String nickname = memberUserService.getUser(userDO.getId()).getNickname(); -// // 断言 -// assertEquals(newNickName,nickname); -// } -// -// @Test -// public void testUpdateAvatar_success() throws Exception { -// // mock 数据 -// MemberUserDO dbUser = randomUserDO(); -// userMapper.insert(dbUser); -// -// // 准备参数 -// Long userId = dbUser.getId(); -// byte[] avatarFileBytes = randomBytes(10); -// ByteArrayInputStream avatarFile = new ByteArrayInputStream(avatarFileBytes); -// // mock 方法 -// String avatar = randomString(); -// when(fileApi.createFile(eq(avatarFileBytes))).thenReturn(avatar); -// // 调用 -// String str = memberUserService.updateUserAvatar(userId, avatarFile); -// // 断言 -// assertEquals(avatar, str); -// } - - @Test - @Disabled // TODO 芋艿:后续再修复 - public void updateMobile_success(){ - // mock数据 - String oldMobile = randomNumbers(11); - MemberUserDO userDO = randomUserDO(); - userDO.setMobile(oldMobile); - userMapper.insert(userDO); - - // TODO 芋艿:需要修复该单元测试,重构多模块带来的 - // 旧手机和旧验证码 -// SmsCodeDO codeDO = new SmsCodeDO(); - String oldCode = RandomUtil.randomString(4); -// codeDO.setMobile(userDO.getMobile()); -// codeDO.setCode(oldCode); -// codeDO.setScene(SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()); -// codeDO.setUsed(Boolean.FALSE); -// when(smsCodeService.checkCodeIsExpired(codeDO.getMobile(),codeDO.getCode(),codeDO.getScene())).thenReturn(codeDO); - - // 更新手机号 - String newMobile = randomNumbers(11); - String newCode = randomNumbers(4); - AppMemberUserUpdateMobileReqVO reqVO = new AppMemberUserUpdateMobileReqVO(); - reqVO.setMobile(newMobile); - reqVO.setCode(newCode); - reqVO.setOldCode(oldCode); - memberUserService.updateUserMobile(userDO.getId(),reqVO); - - assertEquals(memberUserService.getUser(userDO.getId()).getMobile(),newMobile); - } - - // ========== 随机对象 ========== - - @SafeVarargs - private static MemberUserDO randomUserDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围 - }; - return randomPojo(MemberUserDO.class, ArrayUtils.append(consumer, consumers)); - } - -} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApi.java index affa89ea1..7f558286f 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApi.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApi.java @@ -44,7 +44,8 @@ public interface DeptApi { * @return 部门 Map */ default Map getDeptMap(Set ids) { - return CollectionUtils.convertMap(getDeptList(ids).getCheckedData(), DeptRespDTO::getId); + List list = getDeptList(ids).getCheckedData(); + return CollectionUtils.convertMap(list, DeptRespDTO::getId); } } diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApi.java index 14082ad68..e7f34bf52 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApi.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApi.java @@ -49,7 +49,8 @@ public interface AdminUserApi { * @return 用户 Map */ default Map getUserMap(Collection ids) { - return CollectionUtils.convertMap(getUsers(ids).getCheckedData(), AdminUserRespDTO::getId); + List users = getUsers(ids).getCheckedData(); + return CollectionUtils.convertMap(users, AdminUserRespDTO::getId); } @GetMapping(PREFIX + "/valid")