mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-08 05:11:04 +00:00
successful leaderboard score correction persistence test; fixed again discarded result sorting in leaderboard
This commit is contained in:
1 parent
0b262e20cd
commit
92c371a38e
5 files changed
+37
-8
No files matched your search
+1
-1
@@ -127,7 +127,7 @@ public class LeaderboardPanel extends FormPanel {
|
||||
return new Comparator<LeaderboardRowDAO>() {
|
||||
@Override
|
||||
public int compare(LeaderboardRowDAO o1, LeaderboardRowDAO o2) {
|
||||
return o1.fieldsByRaceName.get(raceName).totalPoints - o2.fieldsByRaceName.get(raceName).totalPoints;
|
||||
return o1.fieldsByRaceName.get(raceName).netPoints - o2.fieldsByRaceName.get(raceName).netPoints;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
+28
@@ -1,6 +1,7 @@
|
||||
package com.sap.sailing.mongodb.test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.Arrays;
|
||||
@@ -16,6 +17,7 @@ import com.sap.sailing.domain.base.impl.NationalityImpl;
|
||||
import com.sap.sailing.domain.base.impl.PersonImpl;
|
||||
import com.sap.sailing.domain.base.impl.TeamImpl;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.RaceInLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.impl.LeaderboardImpl;
|
||||
import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl;
|
||||
import com.sap.sailing.domain.leaderboard.impl.ScoreCorrectionImpl;
|
||||
@@ -63,6 +65,32 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest {
|
||||
assertEquals(carriedPointsForWolfgangHunger, loadedLeaderboard.getCarriedPoints(competitor));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStoreAndRetrieveLeaderboardWithScoreCorrections() {
|
||||
final String leaderboardName = "TestLeaderboard";
|
||||
final String raceColumnName1 = "My First Race 1";
|
||||
final String raceColumnName2 = "My First Race 2";
|
||||
final int correctedPoints = 2;
|
||||
final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 };
|
||||
LeaderboardImpl leaderboard = new LeaderboardImpl(leaderboardName, new ScoreCorrectionImpl(),
|
||||
new ResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces));
|
||||
Competitor competitor = createCompetitor();
|
||||
TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 1, /* started */ true);
|
||||
TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ correctedPoints, /* started */ true);
|
||||
leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false);
|
||||
leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true);
|
||||
leaderboard.getScoreCorrection().correctScore(competitor, leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints);
|
||||
new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard);
|
||||
Leaderboard loadedLeaderboard = new DomainObjectFactoryImpl(db).loadLeaderboard(leaderboardName);
|
||||
// attach tracked race to leaderboard to ensure that competitor object is assigned properly
|
||||
RaceInLeaderboard loadedColumn1 = loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false);
|
||||
RaceInLeaderboard loadedColumn2 = loadedLeaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false);
|
||||
assertEquals(leaderboardName, loadedLeaderboard.getName());
|
||||
assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor, loadedColumn1));
|
||||
assertEquals(correctedPoints, (int) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitor, loadedColumn1));
|
||||
assertFalse(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor, loadedColumn2));
|
||||
}
|
||||
|
||||
private Competitor createCompetitor() {
|
||||
Competitor competitor = new CompetitorImpl(123, "Wolfgang Hunger", new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl("Wolfgang Hunger", new NationalityImpl("Germany", "GER"),
|
||||
|
||||
+6
-5
@@ -163,16 +163,17 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
}
|
||||
}
|
||||
DBObject dbScoreCorrection = (DBObject) o.get(FieldNames.LEADERBOARD_SCORE_CORRECTIONS.name());
|
||||
for (String competitorName : dbScoreCorrection.keySet()) {
|
||||
DBObject dbScoreCorrectionForCompetitor = (DBObject) dbScoreCorrection.get(competitorName);
|
||||
for (String raceName : dbScoreCorrectionForCompetitor.keySet()) {
|
||||
for (String raceName : dbScoreCorrection.keySet()) {
|
||||
DBObject dbScoreCorrectionForRace = (DBObject) dbScoreCorrection.get(raceName);
|
||||
for (String competitorName : dbScoreCorrectionForRace.keySet()) {
|
||||
RaceInLeaderboard raceColumn = result.getRaceColumnByName(raceName);
|
||||
DBObject dbScoreCorrectionForCompetitorInRace = (DBObject) dbScoreCorrectionForCompetitor.get(raceName);
|
||||
DBObject dbScoreCorrectionForCompetitorInRace = (DBObject) dbScoreCorrectionForRace.get(competitorName);
|
||||
if (dbScoreCorrectionForCompetitorInRace.containsField(FieldNames.LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON.name())) {
|
||||
result.setMaxPointsReason(competitorName, raceColumn, MaxPointsReason
|
||||
.valueOf((String) dbScoreCorrectionForCompetitorInRace
|
||||
.get(FieldNames.LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON.name())));
|
||||
} else if (dbScoreCorrectionForCompetitorInRace.containsField(FieldNames.LEADERBOARD_CORRECTED_SCORE.name())) {
|
||||
}
|
||||
if (dbScoreCorrectionForCompetitorInRace.containsField(FieldNames.LEADERBOARD_CORRECTED_SCORE.name())) {
|
||||
result.correctScore(competitorName, raceColumn, (Integer) dbScoreCorrectionForCompetitorInRace
|
||||
.get(FieldNames.LEADERBOARD_CORRECTED_SCORE.name()));
|
||||
}
|
||||
|
||||
+1
-1
@@ -105,7 +105,7 @@ public class LeaderboardImplWithDelayedCarriedPoints extends LeaderboardImpl {
|
||||
java.util.Map.Entry<String, Map<RaceInLeaderboard, Integer>> correctedScoresEntries = correctedScoresEntryIter.next();
|
||||
if (competitorsByName.containsKey(correctedScoresEntries.getKey())) {
|
||||
for (java.util.Map.Entry<RaceInLeaderboard, Integer> correctedScoreEntry : correctedScoresEntries.getValue().entrySet()) {
|
||||
getScoreCorrection().correctScore(competitorsByName.get(correctedScoreEntry.getKey()),
|
||||
getScoreCorrection().correctScore(competitorsByName.get(correctedScoresEntries.getKey()),
|
||||
correctedScoreEntry.getKey(), correctedScoreEntry.getValue());
|
||||
}
|
||||
correctedScoresEntryIter.remove();
|
||||
|
||||
+1
-1
@@ -146,7 +146,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
if (raceColumn.getTrackedRace() != null && scoreCorrection.isScoreCorrected(competitor, raceColumn)) {
|
||||
BasicDBObject dbCorrectionForCompetitor = new BasicDBObject();
|
||||
MaxPointsReason maxPointsReason = scoreCorrection.getMaxPointsReason(competitor, raceColumn);
|
||||
if (maxPointsReason != null) {
|
||||
if (maxPointsReason != MaxPointsReason.NONE) {
|
||||
dbCorrectionForCompetitor.put(FieldNames.LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON.name(),
|
||||
maxPointsReason.name());
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user