feat(优惠券): 实现优惠券状态管理功能
- 新增优惠券状态管理相关实体类字段和方法 - 实现优惠券状态自动更新和手动更新功能- 添加优惠券适用范围验证逻辑 - 新增优惠券状态查询和统计接口 - 优化数据库索引和查询性能
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
package com.gxwebsoft.shop.service;
|
||||
|
||||
import com.gxwebsoft.shop.entity.ShopUserCoupon;
|
||||
import com.gxwebsoft.shop.service.CouponStatusService.CouponStatusResult;
|
||||
import com.gxwebsoft.shop.service.CouponStatusService.CouponValidationResult;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
/**
|
||||
* 优惠券状态管理服务测试
|
||||
*
|
||||
* @author WebSoft
|
||||
* @since 2025-01-15
|
||||
*/
|
||||
@SpringBootTest
|
||||
@ActiveProfiles("dev")
|
||||
public class CouponStatusServiceTest {
|
||||
|
||||
@Autowired
|
||||
private CouponStatusService couponStatusService;
|
||||
|
||||
@Test
|
||||
public void testCouponStatusConstants() {
|
||||
// 测试状态常量
|
||||
assertEquals(0, ShopUserCoupon.STATUS_UNUSED);
|
||||
assertEquals(1, ShopUserCoupon.STATUS_USED);
|
||||
assertEquals(2, ShopUserCoupon.STATUS_EXPIRED);
|
||||
|
||||
// 测试类型常量
|
||||
assertEquals(10, ShopUserCoupon.TYPE_REDUCE);
|
||||
assertEquals(20, ShopUserCoupon.TYPE_DISCOUNT);
|
||||
assertEquals(30, ShopUserCoupon.TYPE_FREE);
|
||||
|
||||
// 测试适用范围常量
|
||||
assertEquals(10, ShopUserCoupon.APPLY_ALL);
|
||||
assertEquals(20, ShopUserCoupon.APPLY_GOODS);
|
||||
assertEquals(30, ShopUserCoupon.APPLY_CATEGORY);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCouponStatusMethods() {
|
||||
// 创建测试优惠券
|
||||
ShopUserCoupon coupon = new ShopUserCoupon();
|
||||
coupon.setStatus(ShopUserCoupon.STATUS_UNUSED);
|
||||
coupon.setEndTime(LocalDateTime.now().plusDays(7));
|
||||
|
||||
// 测试可用状态
|
||||
assertTrue(coupon.isAvailable());
|
||||
assertFalse(coupon.isUsed());
|
||||
assertFalse(coupon.isExpired());
|
||||
assertEquals("可使用", coupon.getStatusDesc());
|
||||
|
||||
// 测试已使用状态
|
||||
coupon.markAsUsed(123, "ORDER123");
|
||||
assertTrue(coupon.isUsed());
|
||||
assertFalse(coupon.isAvailable());
|
||||
assertEquals("已使用", coupon.getStatusDesc());
|
||||
assertEquals(Integer.valueOf(123), coupon.getOrderId());
|
||||
assertEquals("ORDER123", coupon.getOrderNo());
|
||||
|
||||
// 测试过期状态
|
||||
coupon.setStatus(ShopUserCoupon.STATUS_UNUSED);
|
||||
coupon.setEndTime(LocalDateTime.now().minusDays(1));
|
||||
assertTrue(coupon.isExpired());
|
||||
assertFalse(coupon.isAvailable());
|
||||
assertEquals("已过期", coupon.getStatusDesc());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidateCouponForOrder() {
|
||||
// 这个测试需要数据库中有实际的优惠券数据
|
||||
// 这里只是演示测试结构
|
||||
|
||||
List<Integer> goodsIds = Arrays.asList(1, 2, 3);
|
||||
BigDecimal totalAmount = new BigDecimal("150.00");
|
||||
|
||||
// 注意:这个测试需要实际的优惠券ID,在真实环境中需要先创建测试数据
|
||||
// CouponValidationResult result = couponStatusService.validateCouponForOrder(1L, totalAmount, goodsIds);
|
||||
// assertNotNull(result);
|
||||
|
||||
System.out.println("优惠券验证测试需要实际的数据库数据");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetUserCouponsGroupByStatus() {
|
||||
// 这个测试需要数据库中有实际的用户和优惠券数据
|
||||
// 这里只是演示测试结构
|
||||
|
||||
// 注意:这个测试需要实际的用户ID,在真实环境中需要先创建测试数据
|
||||
// CouponStatusResult result = couponStatusService.getUserCouponsGroupByStatus(1);
|
||||
// assertNotNull(result);
|
||||
// assertTrue(result.getTotalCount() >= 0);
|
||||
|
||||
System.out.println("用户优惠券分组测试需要实际的数据库数据");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateExpiredCoupons() {
|
||||
// 测试批量更新过期优惠券
|
||||
int updatedCount = couponStatusService.updateExpiredCoupons();
|
||||
assertTrue(updatedCount >= 0);
|
||||
System.out.println("更新了 " + updatedCount + " 张过期优惠券");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user