From 69909a3b830406eb08a7ca00b08bb2e5b92b1403 Mon Sep 17 00:00:00 2001 From: irving Date: Fri, 14 Nov 2025 19:37:14 -0500 Subject: [PATCH] =?UTF-8?q?test:=20=E4=BE=9D=E7=B7=9A=E4=B8=8A=E5=84=AA?= =?UTF-8?q?=E5=85=88=E8=A6=8F=E5=89=87=E8=AA=BF=E6=95=B4=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E9=A9=97=E8=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/api/PlayClerkUserInfoApiTest.java | 68 +++++++++++++------ 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/play-admin/src/test/java/com/starry/admin/api/PlayClerkUserInfoApiTest.java b/play-admin/src/test/java/com/starry/admin/api/PlayClerkUserInfoApiTest.java index b674d45..50e044b 100644 --- a/play-admin/src/test/java/com/starry/admin/api/PlayClerkUserInfoApiTest.java +++ b/play-admin/src/test/java/com/starry/admin/api/PlayClerkUserInfoApiTest.java @@ -18,7 +18,9 @@ import com.starry.common.utils.IdUtils; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Comparator; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ThreadLocalRandom; import java.util.stream.Collectors; import org.junit.jupiter.api.AfterEach; @@ -40,6 +42,12 @@ class PlayClerkUserInfoApiTest extends AbstractApiTest { private final List levelIdsToCleanup = new ArrayList<>(); private final List clerkIdsToCleanup = new ArrayList<>(); private int scenarioSequence = 0; + private static final Comparator BACKEND_ORDERING = Comparator + .comparing(ClerkScenario::isOnline).reversed() + .thenComparing(ClerkScenario::isPinned).reversed() + .thenComparingLong(ClerkScenario::getLevelOrder) + .thenComparingInt(ClerkScenario::getSequence) + .thenComparing(ClerkScenario::getId); @AfterEach void tearDown() { @@ -86,9 +94,10 @@ class PlayClerkUserInfoApiTest extends AbstractApiTest { } assertThat(orderedIds).contains(lowOrderClerkId, highOrderClerkId); - assertThat(orderedIds.indexOf(lowOrderClerkId)) - .withFailMessage("Unexpected order for token %s: %s", filterToken, orderedIds) - .isLessThan(orderedIds.indexOf(highOrderClerkId)); + assertThat(orderedIds.indexOf(highOrderClerkId)) + .withFailMessage("Online clerk should appear before offline regardless of level. token=%s list=%s", + filterToken, orderedIds) + .isLessThan(orderedIds.indexOf(lowOrderClerkId)); } @Test @@ -354,15 +363,27 @@ class PlayClerkUserInfoApiTest extends AbstractApiTest { orderedIds.add(record.path("id").asText()); } - assertThat(orderedIds.indexOf(pinnedOnline)) - .isLessThan(orderedIds.indexOf(online1)); - assertThat(orderedIds.indexOf(online1)) - .withFailMessage("Online entries should stay ahead, list=%s", orderedIds) - .isLessThan(orderedIds.indexOf(online2)); - assertThat(orderedIds.indexOf(online2)) - .isLessThan(orderedIds.indexOf(pinnedOffline)); - assertThat(orderedIds.indexOf(pinnedOffline)) - .isLessThan(orderedIds.indexOf(offline)); + Map expectedScenarios = new HashMap<>(); + expectedScenarios.put(pinnedOnline, new ClerkScenario(pinnedOnline, 1L, true, true, 0)); + expectedScenarios.put(online1, new ClerkScenario(online1, 1L, true, false, 1)); + expectedScenarios.put(online2, new ClerkScenario(online2, 1L, true, false, 2)); + expectedScenarios.put(pinnedOffline, new ClerkScenario(pinnedOffline, 1L, false, true, 3)); + expectedScenarios.put(offline, new ClerkScenario(offline, 1L, false, false, 4)); + + List actualScenarios = orderedIds.stream() + .map(expectedScenarios::get) + .collect(Collectors.toList()); + + for (int i = 1; i < actualScenarios.size(); i++) { + ClerkScenario previous = actualScenarios.get(i - 1); + ClerkScenario current = actualScenarios.get(i); + assertThat(previous).isNotNull(); + assertThat(current).isNotNull(); + assertThat(BACKEND_ORDERING.compare(previous, current)) + .withFailMessage("Ordering violation between %s and %s, list=%s", previous.getId(), current.getId(), + orderedIds) + .isLessThanOrEqualTo(0); + } } @Test @@ -403,15 +424,22 @@ class PlayClerkUserInfoApiTest extends AbstractApiTest { orderedIds.add(record.path("id").asText()); } - List expectedOrder = scenarios.stream() - .sorted(Comparator.comparing(ClerkScenario::isOnline).reversed() - .thenComparing(ClerkScenario::isPinned).reversed() - .thenComparingLong(ClerkScenario::getLevelOrder) - .thenComparingInt(ClerkScenario::getSequence)) - .map(ClerkScenario::getId) - .collect(Collectors.toList()); + Map scenarioById = scenarios.stream() + .collect(Collectors.toMap(ClerkScenario::getId, scenario -> scenario)); - assertThat(orderedIds).containsExactlyElementsOf(expectedOrder); + assertThat(orderedIds).containsExactlyInAnyOrderElementsOf(scenarioById.keySet()); + + List orderedScenarios = orderedIds.stream() + .map(scenarioById::get) + .collect(Collectors.toList()); + for (int i = 1; i < orderedScenarios.size(); i++) { + ClerkScenario previous = orderedScenarios.get(i - 1); + ClerkScenario current = orderedScenarios.get(i); + assertThat(BACKEND_ORDERING.compare(previous, current)) + .withFailMessage("Ordering violation between %s and %s, list=%s", + previous.getId(), current.getId(), orderedIds) + .isLessThanOrEqualTo(0); + } }