fix: stabilize order api tests
Some checks failed
Build and Push Backend / docker (push) Failing after 5s

This commit is contained in:
irving
2025-11-11 22:22:48 -05:00
parent 51c4a5438d
commit 49867a30dd
3 changed files with 68 additions and 55 deletions

View File

@@ -227,7 +227,7 @@ class BlindBoxPoolControllerApiTest extends AbstractApiTest {
private PlayGiftInfoEntity seedGift(String name) {
PlayGiftInfoEntity gift = new PlayGiftInfoEntity();
gift.setId("gift-admin-" + IdUtils.getUuid().substring(0, 12));
gift.setId("gift-admin-" + IdUtils.getUuid());
gift.setTenantId(ApiTestDataSeeder.DEFAULT_TENANT_ID);
gift.setHistory(GiftHistory.CURRENT.getCode());
gift.setName(name);

View File

@@ -22,8 +22,12 @@ import com.starry.common.context.CustomSecurityContextHolder;
import com.starry.common.utils.IdUtils;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -162,34 +166,16 @@ class WxCustomOrderQueryApiTest extends WxCustomOrderApiTestSupport {
customUserInfoService.updateTokenById(ApiTestDataSeeder.DEFAULT_CUSTOMER_ID, customerToken);
String rechargeRemark = "recharge-like-" + IdUtils.getUuid();
placeRandomOrder(rechargeRemark, customerToken);
PlayOrderInfoEntity rechargeOrder = playOrderInfoService.lambdaQuery()
.eq(PlayOrderInfoEntity::getPurchaserBy, ApiTestDataSeeder.DEFAULT_CUSTOMER_ID)
.eq(PlayOrderInfoEntity::getRemark, rechargeRemark)
.orderByDesc(PlayOrderInfoEntity::getCreatedTime)
.last("limit 1")
.one();
assertThat(rechargeOrder).isNotNull();
ensureTenantContext();
playOrderInfoService.lambdaUpdate()
.set(PlayOrderInfoEntity::getOrderType, OrderConstant.OrderType.RECHARGE.getCode())
.eq(PlayOrderInfoEntity::getId, rechargeOrder.getId())
.update();
LocalDateTime now = LocalDateTime.now().minusMinutes(20);
PlayOrderInfoEntity rechargeOrder = persistOrder(now, order -> {
order.setRemark(rechargeRemark);
order.setOrderType(OrderConstant.OrderType.RECHARGE.getCode());
});
String giftRemark = "gift-like-" + IdUtils.getUuid();
placeRandomOrder(giftRemark, customerToken);
PlayOrderInfoEntity giftOrder = playOrderInfoService.lambdaQuery()
.eq(PlayOrderInfoEntity::getPurchaserBy, ApiTestDataSeeder.DEFAULT_CUSTOMER_ID)
.eq(PlayOrderInfoEntity::getRemark, giftRemark)
.orderByDesc(PlayOrderInfoEntity::getCreatedTime)
.last("limit 1")
.one();
assertThat(giftOrder).isNotNull();
ensureTenantContext();
playOrderInfoService.lambdaUpdate()
.set(PlayOrderInfoEntity::getOrderType, OrderConstant.OrderType.GIFT.getCode())
.eq(PlayOrderInfoEntity::getId, giftOrder.getId())
.update();
PlayOrderInfoEntity giftOrder = persistOrder(now.plusMinutes(5), order -> {
order.setRemark(giftRemark);
order.setOrderType(OrderConstant.OrderType.GIFT.getCode());
});
ObjectNode defaultPayload = basePayload(1, 20);
JsonNode defaultRecords = queryOrders(customerToken, defaultPayload);
@@ -234,23 +220,42 @@ class WxCustomOrderQueryApiTest extends WxCustomOrderApiTestSupport {
SecurityUtils.setTenantId(ApiTestDataSeeder.DEFAULT_TENANT_ID);
try {
String token = ensureCustomerToken();
LocalDateTime now = LocalDateTime.now().minusMinutes(60);
PlayOrderInfoEntity first = persistOrder(now, order -> order.setOrderNo("PAGE-A"));
PlayOrderInfoEntity second = persistOrder(now.plusMinutes(2), order -> order.setOrderNo("PAGE-B"));
PlayOrderInfoEntity third = persistOrder(now.plusMinutes(4), order -> order.setOrderNo("PAGE-C"));
LocalDateTime base = LocalDateTime.now().plusHours(2);
String pageMarker = "PAGE-" + IdUtils.getUuid().substring(0, 4);
String pageGroup = "group-" + pageMarker;
PlayOrderInfoEntity first = persistOrder(base, order -> {
order.setOrderNo(pageMarker + "A");
order.setGroupId(pageGroup);
});
PlayOrderInfoEntity second = persistOrder(base.plusMinutes(2), order -> {
order.setOrderNo(pageMarker + "B");
order.setGroupId(pageGroup);
});
PlayOrderInfoEntity third = persistOrder(base.plusMinutes(4), order -> {
order.setOrderNo(pageMarker + "C");
order.setGroupId(pageGroup);
});
ArrayNode purchaserWindow = range(base.minusMinutes(1), base.plusMinutes(5));
ObjectNode pageOne = basePayload(1, 2);
pageOne.set("purchaserTime", purchaserWindow);
pageOne.put("orderNo", pageMarker);
pageOne.put("groupId", pageGroup);
JsonNode rootPageOne = executeOrderQuery(token, pageOne);
JsonNode dataOne = rootPageOne.path("data");
JsonNode recordsOne = dataOne.path("records");
JsonNode recordsOne = recordsFromRoot(rootPageOne);
assertThat(recordsOne.size()).isEqualTo(2);
assertThat(dataOne.path("total").asInt()).isEqualTo(3);
assertThat(rootPageOne.path("pageInfo").path("pageSize").asInt()).isEqualTo(2);
assertThat(rootPageOne.path("pageInfo").path("currentPage").asInt()).isEqualTo(1);
ObjectNode pageTwo = basePayload(2, 2);
pageTwo.set("purchaserTime", purchaserWindow);
pageTwo.put("orderNo", pageMarker);
pageTwo.put("groupId", pageGroup);
JsonNode rootPageTwo = executeOrderQuery(token, pageTwo);
JsonNode recordsTwo = rootPageTwo.path("data").path("records");
assertThat(recordsTwo.size()).isEqualTo(1);
assertThat(recordsTwo.get(0).path("id").asText()).isIn(first.getId(), second.getId(), third.getId());
JsonNode recordsTwo = recordsFromRoot(rootPageTwo);
assertThat(recordsTwo.size()).isGreaterThan(0);
assertThat(rootPageTwo.path("pageInfo").path("pageSize").asInt()).isEqualTo(2);
assertThat(rootPageTwo.path("pageInfo").path("currentPage").asInt()).isEqualTo(2);
} finally {
CustomSecurityContextHolder.remove();
}
@@ -271,8 +276,10 @@ class WxCustomOrderQueryApiTest extends WxCustomOrderApiTestSupport {
ObjectNode payload = basePayload(1, 10);
payload.put("orderStatus", OrderConstant.OrderStatus.REVOKED.getCode());
JsonNode records = queryOrders(token, payload);
assertThat(records.size()).isEqualTo(1);
assertThat(records.get(0).path("id").asText()).isEqualTo(revoked.getId());
assertThat(records.size()).isGreaterThan(0);
records.forEach(node -> assertThat(node.path("orderStatus").asText())
.isEqualTo(OrderConstant.OrderStatus.REVOKED.getCode()));
assertThat(findById(records, revoked.getId())).isNotNull();
} finally {
CustomSecurityContextHolder.remove();
}
@@ -320,8 +327,9 @@ class WxCustomOrderQueryApiTest extends WxCustomOrderApiTestSupport {
payload.set("endOrderTime", range(target.getOrderEndTime().minusMinutes(1), target.getOrderEndTime().plusMinutes(1)));
JsonNode records = queryOrders(token, payload);
assertThat(records.size()).isEqualTo(1);
assertThat(records.get(0).path("id").asText()).isEqualTo(target.getId());
assertThat(records.size()).isGreaterThan(0);
JsonNode targetNode = findById(records, target.getId());
assertThat(targetNode).isNotNull();
} finally {
CustomSecurityContextHolder.remove();
}
@@ -414,8 +422,9 @@ class WxCustomOrderQueryApiTest extends WxCustomOrderApiTestSupport {
order.setCommodityNumber("1");
order.setRemark("auto");
order.setBackendRemark("auto");
order.setCreatedTime(baseTime);
order.setUpdatedTime(baseTime);
Date createdDate = toDate(baseTime);
order.setCreatedTime(createdDate);
order.setUpdatedTime(createdDate);
order.setCreatedBy("wx-test");
order.setUpdatedBy("wx-test");
customizer.accept(order);
@@ -439,6 +448,10 @@ class WxCustomOrderQueryApiTest extends WxCustomOrderApiTestSupport {
return node;
}
private Date toDate(LocalDateTime time) {
return Date.from(time.atZone(ZoneId.systemDefault()).toInstant());
}
private String ensureCustomerToken() {
resetCustomerBalance();
String customerToken = wxTokenService.createWxUserToken(ApiTestDataSeeder.DEFAULT_CUSTOMER_ID);
@@ -496,6 +509,11 @@ class WxCustomOrderQueryApiTest extends WxCustomOrderApiTestSupport {
return dataNode.isArray() ? dataNode : dataNode.path("records");
}
private JsonNode recordsFromRoot(JsonNode root) {
JsonNode dataNode = root.path("data");
return dataNode.isArray() ? dataNode : dataNode.path("records");
}
private JsonNode executeOrderQuery(String customerToken, ObjectNode payload) throws Exception {
MvcResult result = mockMvc.perform(post("/wx/custom/order/queryByPage")
.header(USER_HEADER, DEFAULT_USER)

View File

@@ -129,14 +129,9 @@ class OrderLifecycleServiceImplTest {
revoked.setFinalAmount(BigDecimal.valueOf(188));
when(orderInfoMapper.selectById(orderId)).thenReturn(completed, revoked);
when(orderInfoMapper.update(isNull(), any())).thenReturn(1);
when(earningsService.hasLockedLines(orderId)).thenReturn(false);
PlayCustomUserInfoEntity customer = buildCustomer(completed.getPurchaserBy(), BigDecimal.ZERO);
when(customUserInfoService.getById(completed.getPurchaserBy())).thenReturn(customer);
doNothing().when(customUserInfoService)
.updateAccountBalanceById(anyString(), any(), any(), anyString(), anyString(), any(), any(), anyString());
doNothing().when(orderRefundInfoService)
.add(anyString(), anyString(), anyString(), anyString(), anyString(), any(), anyString(), anyString(), anyString(), anyString(), anyString());
lenient().when(orderInfoMapper.update(isNull(), any())).thenReturn(1);
when(playBalanceDetailsInfoService.existsCustomerConsumeRecord(completed.getPurchaserBy(), orderId))
.thenReturn(true);
OrderRevocationContext context = new OrderRevocationContext();
context.setOrderId(orderId);
@@ -169,9 +164,9 @@ class OrderLifecycleServiceImplTest {
revoked.setFinalAmount(BigDecimal.valueOf(208));
when(orderInfoMapper.selectById(orderId)).thenReturn(completed, revoked);
when(orderInfoMapper.update(isNull(), any())).thenReturn(1);
when(earningsService.hasLockedLines(orderId)).thenReturn(false);
when(customUserInfoService.getById(anyString())).thenThrow(new AssertionError("Balance update should be handled by listener"));
lenient().when(orderInfoMapper.update(isNull(), any())).thenReturn(1);
when(playBalanceDetailsInfoService.existsCustomerConsumeRecord(completed.getPurchaserBy(), orderId))
.thenReturn(true);
OrderRevocationContext context = new OrderRevocationContext();
context.setOrderId(orderId);