test: 修復店員排序測試與收益扣回即時解鎖

This commit is contained in:
irving
2025-11-14 01:25:06 -05:00
parent cec5e965f6
commit 25554bac84
3 changed files with 68 additions and 3 deletions

View File

@@ -319,4 +319,63 @@ class PlayClerkUserInfoApiTest extends AbstractApiTest {
clerkIdsToCleanup.add(clerkId);
return clerkId;
}
@Test
void listOrderingStableWithMultipleCriteria() throws Exception {
ensureTenantContext();
PlayClerkLevelInfoEntity level = createClerkLevel("stable", 10L, 80);
String filterToken = "stable-" + IdUtils.getUuid().substring(0, 6);
String pinnedOnline = createClerk(filterToken + "-pinned-online", level.getId(), "1");
togglePin(pinnedOnline, "1");
String pinnedOffline = createClerk(filterToken + "-pinned-offline", level.getId(), "0");
togglePin(pinnedOffline, "1");
String online1 = createClerk(filterToken + "-online-one", level.getId(), "1");
pause(50);
String online2 = createClerk(filterToken + "-online-two", level.getId(), "1");
String offline = createClerk(filterToken + "-offline", level.getId(), "0");
MvcResult result = mockMvc.perform(get("/clerk/user/list")
.param("pageNum", "1")
.param("pageSize", "20")
.param("nickname", filterToken)
.header(TENANT_HEADER, DEFAULT_TENANT)
.header(USER_HEADER, DEFAULT_USER))
.andExpect(status().isOk())
.andReturn();
JsonNode root = objectMapper.readTree(result.getResponse().getContentAsString());
JsonNode records = root.path("data");
assertThat(records.isArray()).isTrue();
List<String> orderedIds = new ArrayList<>();
for (JsonNode record : records) {
orderedIds.add(record.path("id").asText());
}
assertThat(orderedIds.indexOf(pinnedOnline))
.isLessThan(orderedIds.indexOf(pinnedOffline));
assertThat(orderedIds.indexOf(pinnedOffline))
.isLessThan(orderedIds.indexOf(online1));
assertThat(orderedIds.indexOf(online1))
.isLessThan(orderedIds.indexOf(offline));
assertThat(orderedIds.indexOf(online1))
.withFailMessage("Created time fallback should maintain order, list=%s", orderedIds)
.isLessThan(orderedIds.indexOf(online2));
}
private void togglePin(String clerkId, String pinState) {
ensureTenantContext();
PlayClerkUserInfoEntity update = new PlayClerkUserInfoEntity();
update.setId(clerkId);
update.setPinToTopState(pinState);
clerkUserInfoService.update(update);
}
private void pause(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}

View File

@@ -2,6 +2,7 @@ package com.starry.admin.modules.withdraw.service.impl;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -147,7 +148,9 @@ class EarningsServiceImplTest {
verify(baseMapper).insert(captor.capture());
EarningsLineEntity saved = captor.getValue();
assertEquals("available", saved.getStatus());
assertEquals(unlockAt, saved.getUnlockTime());
LocalDateTime now = LocalDateTime.now();
assertTrue(saved.getUnlockTime().isAfter(unlockAt));
assertTrue(!saved.getUnlockTime().isAfter(now.plusSeconds(1)));
}
@Test