mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-03-10 05:39:19 +01:00
Tests for join address case preservation
- Fixed one issue where player page showed out of date join address
This commit is contained in:
parent
af24672063
commit
4c2bf7bd52
@ -114,18 +114,4 @@ public class PerServerMutator {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public Optional<String> latestJoinAddress() {
|
||||
long latest = Long.MIN_VALUE;
|
||||
String latestJoinAddress = null;
|
||||
for (DataContainer value : data.values()) {
|
||||
long registerDate = value.getValue(PerServerKeys.REGISTERED).orElse(Long.MIN_VALUE);
|
||||
Optional<String> joinAddress = value.getValue(PerServerKeys.JOIN_ADDRESS);
|
||||
if (registerDate > latest && joinAddress.isPresent()) {
|
||||
latest = registerDate;
|
||||
latestJoinAddress = joinAddress.get();
|
||||
}
|
||||
}
|
||||
return Optional.ofNullable(latestJoinAddress);
|
||||
}
|
||||
}
|
@ -32,6 +32,7 @@ import com.djrapitops.plan.gathering.cache.SessionCache;
|
||||
import com.djrapitops.plan.gathering.domain.GeoInfo;
|
||||
import com.djrapitops.plan.gathering.domain.PlayerKill;
|
||||
import com.djrapitops.plan.gathering.domain.WorldTimes;
|
||||
import com.djrapitops.plan.gathering.domain.event.JoinAddress;
|
||||
import com.djrapitops.plan.identification.Server;
|
||||
import com.djrapitops.plan.identification.ServerUUID;
|
||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||
@ -211,7 +212,10 @@ public class PlayerJSONCreator {
|
||||
info.put("activity_index", decimals.apply(activityIndex.getValue()));
|
||||
info.put("activity_index_group", activityIndex.getGroup());
|
||||
info.put("favorite_server", perServer.favoriteServer().map(favoriteServer -> serverNames.getOrDefault(favoriteServer, favoriteServer.toString())).orElse(locale.getString(GenericLang.UNKNOWN)));
|
||||
info.put("latest_join_address", perServer.latestJoinAddress().orElse("-"));
|
||||
info.put("latest_join_address", sessions.latestSession()
|
||||
.flatMap(session -> session.getExtraData(JoinAddress.class))
|
||||
.map(JoinAddress::getAddress)
|
||||
.orElse("-"));
|
||||
double averagePing = ping.average();
|
||||
int worstPing = ping.max();
|
||||
int bestPing = ping.min();
|
||||
|
@ -318,7 +318,6 @@ public class LargeStoreQueries {
|
||||
.filter(Optional::isPresent)
|
||||
.map(Optional::get)
|
||||
.map(JoinAddress::getAddress)
|
||||
// .map(String::toLowerCase)
|
||||
.filter(address -> !existingJoinAddresses.contains(address))
|
||||
.distinct()
|
||||
.forEach(address -> {
|
||||
|
@ -32,11 +32,13 @@ import com.djrapitops.plan.settings.config.paths.DataGatheringSettings;
|
||||
import com.djrapitops.plan.settings.config.paths.ExportSettings;
|
||||
import com.djrapitops.plan.storage.database.Database;
|
||||
import com.djrapitops.plan.storage.database.SQLDB;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.JoinAddressQueries;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.SessionQueries;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.UserInfoQueries;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.JoinAddressTable;
|
||||
import com.djrapitops.plan.storage.database.transactions.StoreServerInformationTransaction;
|
||||
import com.djrapitops.plan.storage.database.transactions.commands.RemoveEverythingTransaction;
|
||||
import com.djrapitops.plan.storage.database.transactions.events.StoreJoinAddressTransaction;
|
||||
import com.djrapitops.plan.storage.database.transactions.events.StoreServerPlayerTransaction;
|
||||
import com.djrapitops.plan.storage.database.transactions.events.StoreWorldNameTransaction;
|
||||
import extension.FullSystemExtension;
|
||||
@ -90,6 +92,7 @@ class PlayerLeaveEventConsumerTest {
|
||||
|
||||
config.set(ExportSettings.PLAYER_PAGES, false);
|
||||
config.set(ExportSettings.EXPORT_ON_ONLINE_STATUS_CHANGE, false);
|
||||
config.set(DataGatheringSettings.PRESERVE_JOIN_ADDRESS_CASE, false);
|
||||
|
||||
database.executeTransaction(new RemoveEverythingTransaction());
|
||||
database.executeTransaction(new StoreServerInformationTransaction(new Server(serverUUID, TestConstants.SERVER_NAME, "", TestConstants.VERSION)));
|
||||
@ -238,4 +241,36 @@ class PlayerLeaveEventConsumerTest {
|
||||
ExtensionService.getInstance().unregister(extension);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void joinAddressCaseIsPreserved(PlanSystem system, PlanConfig config, Database database, ServerUUID serverUUID) {
|
||||
config.set(DataGatheringSettings.PRESERVE_JOIN_ADDRESS_CASE, true);
|
||||
|
||||
SessionCache sessionCache = system.getCacheSystem().getSessionCache();
|
||||
long sessionStart = System.currentTimeMillis();
|
||||
ActiveSession activeSession = new ActiveSession(TestConstants.PLAYER_ONE_UUID, serverUUID, sessionStart, "World", GMTimes.SURVIVAL);
|
||||
activeSession.getExtraData().put(JoinAddress.class, new JoinAddress("PLAY.UPPERCASE.COM"));
|
||||
sessionCache.cacheSession(TestConstants.PLAYER_ONE_UUID, activeSession);
|
||||
|
||||
database.executeTransaction(new StoreJoinAddressTransaction("play.uppercase.com")); // The wrong address
|
||||
database.executeTransaction(new StoreWorldNameTransaction(serverUUID, "World"));
|
||||
|
||||
PlayerLeave leave = createPlayerLeave(createTestPlayer()
|
||||
.setJoinAddress("PLAY.UPPERCASE.COM"));
|
||||
|
||||
underTest.onLeaveGameServer(leave);
|
||||
waitUntilDatabaseIsDone(database);
|
||||
|
||||
List<String> expected = List.of("PLAY.UPPERCASE.COM", "play.uppercase.com", JoinAddressTable.DEFAULT_VALUE_FOR_LOOKUP);
|
||||
List<String> result = database.query(JoinAddressQueries.allJoinAddresses());
|
||||
assertEquals(expected, result);
|
||||
|
||||
Map<String, Integer> expectedMap = Map.of("PLAY.UPPERCASE.COM", 1);
|
||||
Map<String, Integer> resultMap = database.query(JoinAddressQueries.latestJoinAddresses(serverUUID));
|
||||
assertEquals(expectedMap, resultMap);
|
||||
|
||||
expectedMap = Map.of("PLAY.UPPERCASE.COM", 1);
|
||||
resultMap = database.query(JoinAddressQueries.latestJoinAddresses());
|
||||
assertEquals(expectedMap, resultMap);
|
||||
}
|
||||
}
|
@ -18,6 +18,7 @@ package com.djrapitops.plan.storage.database.queries;
|
||||
|
||||
import com.djrapitops.plan.gathering.domain.FinishedSession;
|
||||
import com.djrapitops.plan.gathering.domain.event.JoinAddress;
|
||||
import com.djrapitops.plan.settings.config.paths.DataGatheringSettings;
|
||||
import com.djrapitops.plan.storage.database.DatabaseTestPreparer;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.BaseUserQueries;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.JoinAddressQueries;
|
||||
@ -97,6 +98,26 @@ public interface JoinAddressQueriesTest extends DatabaseTestPreparer {
|
||||
assertEquals(expected, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
default void joinAddressPreservesCase() {
|
||||
joinAddressCanBeUnknown();
|
||||
config().set(DataGatheringSettings.PRESERVE_JOIN_ADDRESS_CASE, true);
|
||||
|
||||
try {
|
||||
FinishedSession session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID);
|
||||
String expectedAddress = "PLAY.UPPERCASE.COM";
|
||||
session.getExtraData().put(JoinAddress.class, new JoinAddress(expectedAddress));
|
||||
db().executeTransaction(new StoreSessionTransaction(session));
|
||||
|
||||
Map<String, Integer> expected = Map.of(expectedAddress, 1);
|
||||
Map<String, Integer> result = db().query(JoinAddressQueries.latestJoinAddresses());
|
||||
|
||||
assertEquals(expected, result);
|
||||
} finally {
|
||||
config().set(DataGatheringSettings.PRESERVE_JOIN_ADDRESS_CASE, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
default void joinAddressUpdateIsUniquePerServer() {
|
||||
joinAddressCanBeUnknown();
|
||||
|
Loading…
Reference in New Issue
Block a user