successful leaderboard score correction persistence test; fixed again discarded result sorting in leaderboard

This commit is contained in:
Axel Uhl committed 2011-08-24 14:54:59 +02:00
1 parent 0b262e20cd
commit 92c371a38e
5 files changed
+37 -8

No files matched your search

@@ -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;
}
};
}
@@ -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"),
@@ -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()));
}
@@ -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();
@@ -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());
}