[WLOS-050] 补齐白名单状态修正的单测/集成测试与回归场景

This commit is contained in:
Guoqs
2026-01-28 16:18:07 +08:00
parent 84f3807554
commit a8fdf3dd6f
2 changed files with 107 additions and 1 deletions

View File

@@ -0,0 +1,106 @@
package com.jsowell.service;
import com.jsowell.common.enums.ykc.OrderPayModeEnum;
import com.jsowell.common.enums.ykc.OrderStatusEnum;
import com.jsowell.pile.domain.OrderBasicInfo;
import com.jsowell.pile.service.OrderBasicInfoService;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
class OrderServiceWhitelistCompletionTest {
private static OrderService newOrderService(OrderBasicInfoService orderBasicInfoService) {
OrderService service = new OrderService();
setField(service, "orderBasicInfoService", orderBasicInfoService);
return service;
}
private static void setField(Object target, String fieldName, Object value) {
try {
Field field = target.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
field.set(target, value);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Test
void completeWhitelistOrderIfNeeded_shouldComplete_whenAbnormal() {
OrderBasicInfoService orderBasicInfoService = Mockito.mock(OrderBasicInfoService.class);
OrderBasicInfo orderBasicInfo = new OrderBasicInfo();
orderBasicInfo.setOrderCode("O1");
orderBasicInfo.setPayMode(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue());
orderBasicInfo.setOrderStatus(OrderStatusEnum.ABNORMAL.getValue());
orderBasicInfo.setPayAmount(new BigDecimal("10"));
when(orderBasicInfoService.getOrderInfoByOrderCode("O1")).thenReturn(orderBasicInfo);
when(orderBasicInfoService.updateOrderBasicInfo(any(OrderBasicInfo.class))).thenReturn(1);
OrderService service = newOrderService(orderBasicInfoService);
boolean updated = service.completeWhitelistOrderIfNeeded("O1");
assertTrue(updated);
assertEquals(OrderStatusEnum.ORDER_COMPLETE.getValue(), orderBasicInfo.getOrderStatus());
assertNotNull(orderBasicInfo.getSettlementTime());
assertEquals(new BigDecimal("10"), orderBasicInfo.getOrderAmount());
assertEquals(new BigDecimal("10"), orderBasicInfo.getVirtualAmount());
assertEquals(BigDecimal.ZERO, orderBasicInfo.getSettleAmount());
assertEquals(BigDecimal.ZERO, orderBasicInfo.getActualReceivedAmount());
verify(orderBasicInfoService).updateOrderBasicInfo(orderBasicInfo);
verify(orderBasicInfoService).cleanCacheByOrderCode("O1", null);
}
@Test
void completeWhitelistOrderIfNeeded_shouldComplete_whenStaySettlement() {
OrderBasicInfoService orderBasicInfoService = Mockito.mock(OrderBasicInfoService.class);
OrderBasicInfo orderBasicInfo = new OrderBasicInfo();
orderBasicInfo.setOrderCode("O2");
orderBasicInfo.setPayMode(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue());
orderBasicInfo.setOrderStatus(OrderStatusEnum.STAY_SETTLEMENT.getValue());
when(orderBasicInfoService.getOrderInfoByOrderCode("O2")).thenReturn(orderBasicInfo);
when(orderBasicInfoService.updateOrderBasicInfo(any(OrderBasicInfo.class))).thenReturn(1);
OrderService service = newOrderService(orderBasicInfoService);
boolean updated = service.completeWhitelistOrderIfNeeded("O2");
assertTrue(updated);
assertEquals(OrderStatusEnum.ORDER_COMPLETE.getValue(), orderBasicInfo.getOrderStatus());
assertNotNull(orderBasicInfo.getSettlementTime());
verify(orderBasicInfoService).updateOrderBasicInfo(orderBasicInfo);
}
@Test
void completeWhitelistOrderIfNeeded_shouldNoop_whenNotWhitelistPayMode() {
OrderBasicInfoService orderBasicInfoService = Mockito.mock(OrderBasicInfoService.class);
OrderBasicInfo orderBasicInfo = new OrderBasicInfo();
orderBasicInfo.setOrderCode("O3");
orderBasicInfo.setPayMode(OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue());
orderBasicInfo.setOrderStatus(OrderStatusEnum.ABNORMAL.getValue());
when(orderBasicInfoService.getOrderInfoByOrderCode("O3")).thenReturn(orderBasicInfo);
OrderService service = newOrderService(orderBasicInfoService);
boolean updated = service.completeWhitelistOrderIfNeeded("O3");
assertFalse(updated);
verify(orderBasicInfoService, never()).updateOrderBasicInfo(any(OrderBasicInfo.class));
}
}