This commit is contained in:
@@ -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<String> levelIdsToCleanup = new ArrayList<>();
|
||||
private final List<String> clerkIdsToCleanup = new ArrayList<>();
|
||||
private int scenarioSequence = 0;
|
||||
private static final Comparator<ClerkScenario> 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<String, ClerkScenario> 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<ClerkScenario> 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<String> 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<String, ClerkScenario> scenarioById = scenarios.stream()
|
||||
.collect(Collectors.toMap(ClerkScenario::getId, scenario -> scenario));
|
||||
|
||||
assertThat(orderedIds).containsExactlyElementsOf(expectedOrder);
|
||||
assertThat(orderedIds).containsExactlyInAnyOrderElementsOf(scenarioById.keySet());
|
||||
|
||||
List<ClerkScenario> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user