修复下单接口
This commit is contained in:
@@ -0,0 +1,199 @@
|
||||
package com.gxwebsoft.shop.service;
|
||||
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
import com.gxwebsoft.shop.dto.OrderCreateRequest;
|
||||
import com.gxwebsoft.shop.entity.ShopGoods;
|
||||
import com.gxwebsoft.shop.entity.ShopOrder;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
/**
|
||||
* 订单业务服务测试类
|
||||
*/
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class OrderBusinessServiceTest {
|
||||
|
||||
@Mock
|
||||
private ShopOrderService shopOrderService;
|
||||
|
||||
@Mock
|
||||
private ShopGoodsService shopGoodsService;
|
||||
|
||||
@InjectMocks
|
||||
private OrderBusinessService orderBusinessService;
|
||||
|
||||
private User testUser;
|
||||
private ShopGoods testGoods;
|
||||
private OrderCreateRequest testRequest;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
// 准备测试用户
|
||||
testUser = new User();
|
||||
testUser.setUserId(1);
|
||||
testUser.setOpenid("test_openid");
|
||||
testUser.setPhone("13800138000");
|
||||
|
||||
// 准备测试商品
|
||||
testGoods = new ShopGoods();
|
||||
testGoods.setGoodsId(10021);
|
||||
testGoods.setName("扎尔伯特五谷礼盒");
|
||||
testGoods.setPrice(new BigDecimal("99.00"));
|
||||
testGoods.setStock(100);
|
||||
testGoods.setStatus(0);
|
||||
testGoods.setIsShow(true);
|
||||
testGoods.setDeleted(0);
|
||||
|
||||
// 准备测试请求(模拟前端发送的数据格式)
|
||||
testRequest = new OrderCreateRequest();
|
||||
testRequest.setGoodsId(10021); // 使用goodsId字段
|
||||
testRequest.setQuantity(1); // 使用quantity字段
|
||||
testRequest.setTotalPrice(new BigDecimal("99.00"));
|
||||
testRequest.setTenantId(10832);
|
||||
testRequest.setPayType(1);
|
||||
testRequest.setComments("扎尔伯特五谷礼盒");
|
||||
testRequest.setDeliveryType(0);
|
||||
testRequest.setType(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCreateOrder_Success() {
|
||||
// 模拟商品查询
|
||||
when(shopGoodsService.getById(10021)).thenReturn(testGoods);
|
||||
|
||||
// 模拟订单保存
|
||||
when(shopOrderService.save(any(ShopOrder.class))).thenReturn(true);
|
||||
|
||||
// 模拟微信支付订单创建
|
||||
Map<String, String> wxOrderInfo = new HashMap<>();
|
||||
wxOrderInfo.put("prepay_id", "test_prepay_id");
|
||||
when(shopOrderService.createWxOrder(any(ShopOrder.class))).thenReturn((HashMap<String, String>) wxOrderInfo);
|
||||
|
||||
// 执行测试
|
||||
Map<String, String> result = orderBusinessService.createOrder(testRequest, testUser);
|
||||
|
||||
// 验证结果
|
||||
assertNotNull(result);
|
||||
assertEquals("test_prepay_id", result.get("prepay_id"));
|
||||
|
||||
// 验证方法调用
|
||||
verify(shopGoodsService).getById(10021);
|
||||
verify(shopOrderService).save(any(ShopOrder.class));
|
||||
verify(shopOrderService).createWxOrder(any(ShopOrder.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCreateOrder_GoodsNotFound() {
|
||||
// 模拟商品不存在
|
||||
when(shopGoodsService.getById(10021)).thenReturn(null);
|
||||
|
||||
// 执行测试并验证异常
|
||||
Exception exception = assertThrows(Exception.class, () -> {
|
||||
orderBusinessService.createOrder(testRequest, testUser);
|
||||
});
|
||||
|
||||
assertTrue(exception.getMessage().contains("商品不存在"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCreateOrder_InsufficientStock() {
|
||||
// 设置库存不足
|
||||
testGoods.setStock(0);
|
||||
testRequest.setQuantity(1);
|
||||
|
||||
when(shopGoodsService.getById(10021)).thenReturn(testGoods);
|
||||
|
||||
// 执行测试并验证异常
|
||||
Exception exception = assertThrows(Exception.class, () -> {
|
||||
orderBusinessService.createOrder(testRequest, testUser);
|
||||
});
|
||||
|
||||
assertTrue(exception.getMessage().contains("商品库存不足"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCreateOrder_PriceValidation() {
|
||||
// 设置错误的价格
|
||||
testRequest.setTotalPrice(new BigDecimal("50.00")); // 商品价格是99.00,但请求价格是50.00
|
||||
|
||||
when(shopGoodsService.getById(10021)).thenReturn(testGoods);
|
||||
|
||||
// 执行测试并验证异常
|
||||
Exception exception = assertThrows(Exception.class, () -> {
|
||||
orderBusinessService.createOrder(testRequest, testUser);
|
||||
});
|
||||
|
||||
assertTrue(exception.getMessage().contains("商品价格异常"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCreateOrder_CompatibilityFields() {
|
||||
// 测试兼容性字段
|
||||
OrderCreateRequest compatRequest = new OrderCreateRequest();
|
||||
compatRequest.setFormId(10021); // 使用formId字段
|
||||
compatRequest.setTotalNum(1); // 使用totalNum字段
|
||||
compatRequest.setTotalPrice(new BigDecimal("99.00"));
|
||||
compatRequest.setTenantId(10832);
|
||||
compatRequest.setPayType(1);
|
||||
compatRequest.setType(0);
|
||||
|
||||
when(shopGoodsService.getById(10021)).thenReturn(testGoods);
|
||||
when(shopOrderService.save(any(ShopOrder.class))).thenReturn(true);
|
||||
|
||||
Map<String, String> wxOrderInfo = new HashMap<>();
|
||||
wxOrderInfo.put("prepay_id", "test_prepay_id");
|
||||
when(shopOrderService.createWxOrder(any(ShopOrder.class))).thenReturn((HashMap<String, String>) wxOrderInfo);
|
||||
|
||||
// 执行测试
|
||||
Map<String, String> result = orderBusinessService.createOrder(compatRequest, testUser);
|
||||
|
||||
// 验证结果
|
||||
assertNotNull(result);
|
||||
assertEquals("test_prepay_id", result.get("prepay_id"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetActualFormId() {
|
||||
// 测试goodsId字段
|
||||
OrderCreateRequest request1 = new OrderCreateRequest();
|
||||
request1.setGoodsId(123);
|
||||
assertEquals(123, request1.getActualFormId());
|
||||
|
||||
// 测试formId字段优先级
|
||||
OrderCreateRequest request2 = new OrderCreateRequest();
|
||||
request2.setFormId(456);
|
||||
request2.setGoodsId(123);
|
||||
assertEquals(456, request2.getActualFormId());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetActualTotalNum() {
|
||||
// 测试quantity字段
|
||||
OrderCreateRequest request1 = new OrderCreateRequest();
|
||||
request1.setQuantity(5);
|
||||
assertEquals(5, request1.getActualTotalNum());
|
||||
|
||||
// 测试totalNum字段优先级
|
||||
OrderCreateRequest request2 = new OrderCreateRequest();
|
||||
request2.setTotalNum(10);
|
||||
request2.setQuantity(5);
|
||||
assertEquals(10, request2.getActualTotalNum());
|
||||
|
||||
// 测试默认值
|
||||
OrderCreateRequest request3 = new OrderCreateRequest();
|
||||
assertEquals(1, request3.getActualTotalNum());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user