From 24681c81c09022f584a57006f2534b5f74723414 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 30 六月 2026 09:27:31 +0800
Subject: [PATCH] 初始化项目

---
 yudao-module-mall/yudao-module-promotion/src/test/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImplTest.java |  116 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 102 insertions(+), 14 deletions(-)

diff --git a/yudao-module-mall/yudao-module-promotion/src/test/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImplTest.java b/yudao-module-mall/yudao-module-promotion/src/test/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImplTest.java
index 2f38628..1845be2 100644
--- a/yudao-module-mall/yudao-module-promotion/src/test/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImplTest.java
+++ b/yudao-module-mall/yudao-module-promotion/src/test/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImplTest.java
@@ -2,7 +2,10 @@
 
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
+import cn.iocoder.yudao.module.product.api.category.ProductCategoryApi;
+import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
 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;
@@ -10,21 +13,23 @@
 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.CouponTakeTypeEnum;
 import cn.iocoder.yudao.module.promotion.enums.coupon.CouponTemplateValidityTypeEnum;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.annotation.Import;
+import org.springframework.test.context.bean.override.mockito.MockitoBean;
 
 import jakarta.annotation.Resource;
 import java.time.LocalDateTime;
+import java.util.function.Consumer;
 
-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_ENOUGH;
 import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COUPON_TEMPLATE_NOT_EXISTS;
 import static org.junit.jupiter.api.Assertions.*;
 
@@ -33,7 +38,6 @@
 *
 * @author 鑺嬮亾婧愮爜
 */
-@Disabled // TODO 鑺嬭壙锛氬悗缁� fix 琛ュ厖鐨勫崟娴�
 @Import(CouponTemplateServiceImpl.class)
 public class CouponTemplateServiceImplTest extends BaseDbUnitTest {
 
@@ -43,13 +47,26 @@
     @Resource
     private CouponTemplateMapper couponTemplateMapper;
 
+    @MockitoBean
+    private ProductCategoryApi productCategoryApi;
+    @MockitoBean
+    private ProductSpuApi productSpuApi;
+
     @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()));
+        CouponTemplateCreateReqVO reqVO = randomPojo(CouponTemplateCreateReqVO.class, o -> {
+            o.setTotalCount(10);
+            o.setTakeLimitCount(2);
+            o.setTakeType(CouponTakeTypeEnum.USER.getType());
+            o.setProductScope(PromotionProductScopeEnum.ALL.getScope());
+            o.setProductScopeValues(null);
+            o.setValidityType(CouponTemplateValidityTypeEnum.TERM.getType());
+            o.setFixedStartTerm(0);
+            o.setFixedEndTerm(7);
+            o.setDiscountType(PromotionDiscountTypeEnum.PRICE.getType());
+            o.setDiscountPrice(100);
+        });
 
         // 璋冪敤
         Long couponTemplateId = couponTemplateService.createCouponTemplate(reqVO);
@@ -63,15 +80,21 @@
     @Test
     public void testUpdateCouponTemplate_success() {
         // mock 鏁版嵁
-        CouponTemplateDO dbCouponTemplate = randomPojo(CouponTemplateDO.class);
+        CouponTemplateDO dbCouponTemplate = randomCouponTemplateDO();
         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());
+            o.setTotalCount(10);
+            o.setTakeLimitCount(2);
+            o.setTakeType(CouponTakeTypeEnum.USER.getType());
+            o.setProductScope(PromotionProductScopeEnum.ALL.getScope());
+            o.setProductScopeValues(null);
+            o.setValidityType(CouponTemplateValidityTypeEnum.TERM.getType());
+            o.setFixedStartTerm(0);
+            o.setFixedEndTerm(7);
+            o.setDiscountType(PromotionDiscountTypeEnum.PRICE.getType());
+            o.setDiscountPrice(100);
         });
 
         // 璋冪敤
@@ -84,16 +107,60 @@
     @Test
     public void testUpdateCouponTemplate_notExists() {
         // 鍑嗗鍙傛暟
-        CouponTemplateUpdateReqVO reqVO = randomPojo(CouponTemplateUpdateReqVO.class);
+        CouponTemplateUpdateReqVO reqVO = randomPojo(CouponTemplateUpdateReqVO.class, o -> o.setId(randomLongId()));
 
         // 璋冪敤, 骞舵柇瑷�寮傚父
         assertServiceException(() -> couponTemplateService.updateCouponTemplate(reqVO), COUPON_TEMPLATE_NOT_EXISTS);
     }
 
     @Test
+    public void testCreateCouponTemplate_takeLimitCountGreaterThanTotalCount() {
+        // 鍑嗗鍙傛暟
+        CouponTemplateCreateReqVO reqVO = randomPojo(CouponTemplateCreateReqVO.class, o -> {
+            o.setTotalCount(1);
+            o.setTakeLimitCount(2);
+            o.setTakeType(CouponTakeTypeEnum.USER.getType());
+            o.setProductScope(PromotionProductScopeEnum.ALL.getScope());
+            o.setProductScopeValues(null);
+            o.setValidityType(CouponTemplateValidityTypeEnum.TERM.getType());
+            o.setFixedStartTerm(0);
+            o.setFixedEndTerm(7);
+            o.setDiscountType(PromotionDiscountTypeEnum.PRICE.getType());
+            o.setDiscountPrice(100);
+        });
+
+        // 璋冪敤锛屽苟鏂█
+        assertServiceException(() -> couponTemplateService.createCouponTemplate(reqVO), COUPON_TEMPLATE_NOT_ENOUGH);
+    }
+
+    @Test
+    public void testUpdateCouponTemplate_takeLimitCountGreaterThanTotalCount() {
+        // mock 鏁版嵁
+        CouponTemplateDO couponTemplate = randomCouponTemplateDO();
+        couponTemplateMapper.insert(couponTemplate);
+        // 鍑嗗鍙傛暟
+        CouponTemplateUpdateReqVO reqVO = randomPojo(CouponTemplateUpdateReqVO.class, o -> {
+            o.setId(couponTemplate.getId()); // 璁剧疆鏇存柊鐨� ID
+            o.setTotalCount(1);
+            o.setTakeLimitCount(2);
+            o.setTakeType(CouponTakeTypeEnum.USER.getType());
+            o.setProductScope(PromotionProductScopeEnum.ALL.getScope());
+            o.setProductScopeValues(null);
+            o.setValidityType(CouponTemplateValidityTypeEnum.TERM.getType());
+            o.setFixedStartTerm(0);
+            o.setFixedEndTerm(7);
+            o.setDiscountType(PromotionDiscountTypeEnum.PRICE.getType());
+            o.setDiscountPrice(100);
+        });
+
+        // 璋冪敤锛屽苟鏂█
+        assertServiceException(() -> couponTemplateService.updateCouponTemplate(reqVO), COUPON_TEMPLATE_NOT_ENOUGH);
+    }
+
+    @Test
     public void testDeleteCouponTemplate_success() {
         // mock 鏁版嵁
-        CouponTemplateDO dbCouponTemplate = randomPojo(CouponTemplateDO.class);
+        CouponTemplateDO dbCouponTemplate = randomCouponTemplateDO();
         couponTemplateMapper.insert(dbCouponTemplate);// @Sql: 鍏堟彃鍏ュ嚭涓�鏉″瓨鍦ㄧ殑鏁版嵁
         // 鍑嗗鍙傛暟
         Long id = dbCouponTemplate.getId();
@@ -146,4 +213,25 @@
        assertPojoEquals(dbCouponTemplate, pageResult.getList().get(0));
     }
 
+    @SafeVarargs
+    private static CouponTemplateDO randomCouponTemplateDO(Consumer<CouponTemplateDO>... consumers) {
+        Consumer<CouponTemplateDO> consumer = o -> {
+            o.setStatus(CommonStatusEnum.ENABLE.getStatus());
+            o.setTotalCount(10);
+            o.setTakeLimitCount(1);
+            o.setTakeType(CouponTakeTypeEnum.USER.getType());
+            o.setUsePrice(0);
+            o.setProductScope(PromotionProductScopeEnum.ALL.getScope());
+            o.setProductScopeValues(null);
+            o.setValidityType(CouponTemplateValidityTypeEnum.TERM.getType());
+            o.setFixedStartTerm(0);
+            o.setFixedEndTerm(7);
+            o.setDiscountType(PromotionDiscountTypeEnum.PRICE.getType());
+            o.setDiscountPrice(100);
+            o.setTakeCount(0);
+            o.setUseCount(0);
+        };
+        return randomPojo(CouponTemplateDO.class, ArrayUtils.append(consumer, consumers));
+    }
+
 }

--
Gitblit v1.9.3