major refacoring and cleanup of RaceLog and RegattaLog events needed for the new way of registering boats and competitors as separate entities -> UI is still not ready for it.

This commit is contained in:
Frank Mittag
2017-08-25 17:09:00 +02:00
parent 20bc27a3da
commit 48162c73be
98 changed files with 1898 additions and 1315 deletions
@@ -2,10 +2,12 @@ package com.sap.sailing.mongodb.test;
import static org.junit.Assert.assertEquals;
import java.io.Serializable;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
import java.util.Collection;
import java.util.Collections;
import java.util.UUID;
import org.junit.Before;
@@ -15,20 +17,51 @@ import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoException;
import com.mongodb.WriteConcern;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorWithBoat;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.impl.BoatClassImpl;
import com.sap.sailing.domain.base.impl.BoatImpl;
import com.sap.sailing.domain.base.impl.CompetitorImpl;
import com.sap.sailing.domain.base.impl.CompetitorWithBoatImpl;
import com.sap.sailing.domain.base.impl.DomainFactoryImpl;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicCompetitor;
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.persistence.DomainObjectFactory;
import com.sap.sailing.domain.persistence.MongoObjectFactory;
import com.sap.sailing.domain.persistence.PersistenceFactory;
import com.sap.sailing.domain.persistence.impl.CollectionNames;
import com.sap.sailing.domain.test.AbstractLeaderboardTest;
import com.sap.sse.common.Color;
import com.sap.sse.common.Util;
public class StoreAndLoadCompetitorsTest extends AbstractMongoDBTest {
private DomainFactory domainFactory;
private final static BoatClass boatClass = new BoatClassImpl("505", /* typicallyStartsUpwind */ true);
public static Competitor createCompetitor(String competitorName) {
return createCompetitor(competitorName, competitorName);
}
public static Competitor createCompetitor(String competitorName, Serializable id) {
return new CompetitorImpl(id, competitorName, "KYC", Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl(competitorName, new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous "+competitorName)),
new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
/* dateOfBirth */null, "This is Rigo, the coach")),
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
}
public static CompetitorWithBoat createCompetitorWithBoat(String competitorName) {
Competitor c = createCompetitor(competitorName);
DynamicBoat b = new BoatImpl("id12345", competitorName + "'s boat", boatClass, /* sailID */ null);
return new CompetitorWithBoatImpl(c, b);
}
public StoreAndLoadCompetitorsTest() throws UnknownHostException, MongoException {
super();
}
@@ -59,12 +92,12 @@ public class StoreAndLoadCompetitorsTest extends AbstractMongoDBTest {
DomainObjectFactory domainObjectFactory = PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), domainFactory);
dropCompetitorCollection();
DynamicCompetitor c = (DynamicCompetitor) AbstractLeaderboardTest.createCompetitorAndBoat(competitorName1).getCompetitor();
DynamicCompetitor c = (DynamicCompetitor) createCompetitor(competitorName1);
c.setShortName(competitorShortName1);
c.setFlagImage(flagImageURI1);
mongoObjectFactory.storeCompetitor(c);
Collection<CompetitorWithBoat> allCompetitors = domainObjectFactory.loadAllCompetitors();
Collection<Competitor> allCompetitors = domainObjectFactory.loadAllCompetitors();
assertEquals(1, Util.size(allCompetitors));
DynamicCompetitor loadedCompetitor = (DynamicCompetitor) allCompetitors.iterator().next();
assertEquals(flagImageURI1, loadedCompetitor.getFlagImage());
@@ -90,7 +123,7 @@ public class StoreAndLoadCompetitorsTest extends AbstractMongoDBTest {
DomainObjectFactory domainObjectFactory = PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), domainFactory);
dropCompetitorCollection();
DynamicCompetitor c = (DynamicCompetitor) AbstractLeaderboardTest.createCompetitorAndBoat("Hasso", UUID.randomUUID()).getCompetitor();
DynamicCompetitor c = (DynamicCompetitor) createCompetitor("Hasso", UUID.randomUUID());
mongoObjectFactory.storeCompetitor(c);
assertEquals(1, Util.size(domainObjectFactory.loadAllCompetitors()));
c.setName("Hasso Plattner");
@@ -104,7 +137,7 @@ public class StoreAndLoadCompetitorsTest extends AbstractMongoDBTest {
DomainObjectFactory domainObjectFactory = PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), domainFactory);
dropCompetitorCollection();
DynamicCompetitor c = (DynamicCompetitor) AbstractLeaderboardTest.createCompetitorAndBoat("Hasso").getCompetitor();
DynamicCompetitor c = (DynamicCompetitor) createCompetitor("Hasso");
mongoObjectFactory.storeCompetitor(c);
assertEquals(1, Util.size(domainObjectFactory.loadAllCompetitors()));
@@ -118,7 +151,7 @@ public class StoreAndLoadCompetitorsTest extends AbstractMongoDBTest {
DomainObjectFactory domainObjectFactory = PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), domainFactory);
dropCompetitorCollection();
DynamicCompetitor c = (DynamicCompetitor) AbstractLeaderboardTest.createCompetitorAndBoat("Hasso", UUID.randomUUID()).getCompetitor();
DynamicCompetitor c = (DynamicCompetitor) createCompetitor("Hasso", UUID.randomUUID());
mongoObjectFactory.storeCompetitor(c);
assertEquals(1, Util.size(domainObjectFactory.loadAllCompetitors()));
@@ -34,12 +34,13 @@ import com.sap.sailing.domain.abstractlog.race.impl.RaceLogRaceStatusEventImpl;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogRevokeEventImpl;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartTimeEventImpl;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogRegisterCompetitorEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogRegisterCompetitorAndBoatEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDenoteForTrackingEventImpl;
import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogRegisterCompetitorEventImpl;
import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogRegisterCompetitorAndBoatEventImpl;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.impl.BoatClassImpl;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.persistence.PersistenceFactory;
@@ -53,6 +54,7 @@ import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class StoreAndLoadRaceLogEventsTest extends AbstractMongoDBTest {
private final static BoatClass boatClass = new BoatClassImpl("505", /* typicallyStartsUpwind */ true);
protected MongoObjectFactoryImpl mongoFactory = (MongoObjectFactoryImpl) PersistenceFactory.INSTANCE
.getMongoObjectFactory(getMongoService(), new MockSmartphoneImeiServiceFinderFactory());
@@ -84,7 +86,7 @@ public class StoreAndLoadRaceLogEventsTest extends AbstractMongoDBTest {
assertEquals(expectedEvent.getCreatedAt(), actualEvent.getCreatedAt());
assertEquals(expectedEvent.getLogicalTimePoint(), actualEvent.getLogicalTimePoint());
assertEquals(expectedEvent.getId(), actualEvent.getId());
assertEquals(expectedEvent.getInvolvedBoats().size(), Util.size(actualEvent.getInvolvedBoats()));
assertEquals(expectedEvent.getInvolvedCompetitors().size(), Util.size(actualEvent.getInvolvedCompetitors()));
assertEquals(expectedEvent.getPassId(), actualEvent.getPassId());
}
@@ -209,14 +211,15 @@ public class StoreAndLoadRaceLogEventsTest extends AbstractMongoDBTest {
}
@Test
public void testStoreAndLoadRegisterCompetitorEvent() {
RaceLogRegisterCompetitorEvent expectedEvent = new RaceLogRegisterCompetitorEventImpl(expectedEventTime,
public void testStoreAndLoadRegisterCompetitorAndBoatEvent() {
RaceLogRegisterCompetitorAndBoatEvent expectedEvent = new RaceLogRegisterCompetitorAndBoatEventImpl(expectedEventTime,
expectedEventTime, author, expectedId, expectedPassId, DomainFactory.INSTANCE.getOrCreateCompetitor(
"comp", "comp", "c", null, null, null, null,
/* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null));
/* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null),
DomainFactory.INSTANCE.getOrCreateBoat("boat", "b", boatClass, null, null));
DBObject dbObject = mongoFactory.storeRaceLogEntry(logIdentifier, expectedEvent);
RaceLogRegisterCompetitorEvent actualEvent = loadEvent(dbObject);
RaceLogRegisterCompetitorAndBoatEvent actualEvent = loadEvent(dbObject);
assertBaseFields(expectedEvent, actualEvent);
assertEquals(expectedEvent.getCompetitor(), actualEvent.getCompetitor());
@@ -27,9 +27,9 @@ import java.util.logging.Logger;
import org.junit.Test;
import com.mongodb.MongoException;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl;
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterEntryEventImpl;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorAndBoat;
@@ -418,18 +418,18 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
"123", regattaProxy.getSeries(), regattaProxy.isPersistent(), DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT),
/* defaultCourseAreaId */ null, /*buoyZoneRadiusInHullLengths*/ 2.0, /* useStartTimeInference */ true,
/* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new);
CompetitorAndBoat competitorAndBoat1 = AbstractLeaderboardTest.createCompetitorAndBoat("Humba1");
CompetitorAndBoat competitorAndBoat2 = AbstractLeaderboardTest.createCompetitorAndBoat("Humba2");
res.getCompetitorStore().addCompetitors(Arrays.asList(competitorAndBoat1.getCompetitor(), competitorAndBoat2.getCompetitor()));
regatta.getRegattaLog().add(new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), new LogEventAuthorImpl("Axel", 0), competitorAndBoat1.getCompetitor()));
regatta.getRegattaLog().add(new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), new LogEventAuthorImpl("Axel", 0), competitorAndBoat2.getCompetitor()));
assertTrue(Util.contains(regatta.getAllCompetitors(), competitorAndBoat1));
assertTrue(Util.contains(regatta.getAllCompetitors(), competitorAndBoat2));
Competitor competitor1 = AbstractLeaderboardTest.createCompetitor("Humba1");
Competitor competitor2 = AbstractLeaderboardTest.createCompetitor("Humba2");
res.getCompetitorStore().addCompetitors(Arrays.asList(competitor1, competitor2));
regatta.getRegattaLog().add(new RegattaLogRegisterEntryEventImpl(MillisecondsTimePoint.now(), new LogEventAuthorImpl("Axel", 0), competitor1));
regatta.getRegattaLog().add(new RegattaLogRegisterEntryEventImpl(MillisecondsTimePoint.now(), new LogEventAuthorImpl("Axel", 0), competitor2));
assertTrue(Util.contains(regatta.getAllCompetitors(), competitor1));
assertTrue(Util.contains(regatta.getAllCompetitors(), competitor2));
addRaceColumns(numberOfQualifyingRaces, numberOfFinalRaces, regatta);
RegattaLeaderboard fullLeaderboard = res.addRegattaLeaderboard(regatta.getRegattaIdentifier(), null, new int[] { 3, 5 });
// use the set-up and add a regatta leaderboard with eliminations that wraps the regatta leaderboard
RegattaLeaderboardWithEliminations withEliminations = res.addRegattaLeaderboardWithEliminations("U16", /* leaderboardDisplayName */ "Display Name", fullLeaderboard);
res.apply(new UpdateEliminatedCompetitorsInLeaderboard(withEliminations.getName(), Collections.singleton(competitorAndBoat1.getCompetitor())));
res.apply(new UpdateEliminatedCompetitorsInLeaderboard(withEliminations.getName(), Collections.singleton(competitor1)));
DomainObjectFactory dof = PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), DomainFactory.INSTANCE);
Regatta loadedRegatta = dof.loadRegatta(regatta.getName(), /* trackedRegattaRegistry */ null);
@@ -451,8 +451,8 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
assertTrue(loadedLeaderboardWithEliminations instanceof RegattaLeaderboardWithEliminations);
assertEquals("Display Name", loadedLeaderboardWithEliminations.getDisplayName());
assertEquals(withEliminations.getAllCompetitors(), loadedLeaderboardWithEliminations.getAllCompetitors());
assertTrue(((RegattaLeaderboardWithEliminations) loadedLeaderboardWithEliminations).isEliminated(competitorAndBoat1.getCompetitor()));
assertFalse(((RegattaLeaderboardWithEliminations) loadedLeaderboardWithEliminations).isEliminated(competitorAndBoat2.getCompetitor()));
assertTrue(((RegattaLeaderboardWithEliminations) loadedLeaderboardWithEliminations).isEliminated(competitor1));
assertFalse(((RegattaLeaderboardWithEliminations) loadedLeaderboardWithEliminations).isEliminated(competitor2));
}
@Test
@@ -369,7 +369,7 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD
RaceLogFinishPositioningConfirmedEvent loadedConfirmedEvent = (RaceLogFinishPositioningConfirmedEvent) loadedEvent;
assertEquals(now, loadedConfirmedEvent.getLogicalTimePoint());
assertEquals(0, loadedConfirmedEvent.getPassId());
assertEquals(0, loadedConfirmedEvent.getInvolvedBoats().size());
assertEquals(0, loadedConfirmedEvent.getInvolvedCompetitors().size());
assertNull(event.getPositionedCompetitorsIDsNamesMaxPointsReasons());
assertNull(loadedConfirmedEvent.getPositionedCompetitorsIDsNamesMaxPointsReasons());
assertEquals(1, Util.size(loadedRaceLog.getFixes()));
@@ -419,7 +419,7 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD
assertEquals(event.getLogicalTimePoint(), loadedPositioningEvent.getLogicalTimePoint());
assertEquals(event.getPassId(), loadedPositioningEvent.getPassId());
assertEquals(event.getId(), loadedPositioningEvent.getId());
assertEquals(event.getInvolvedBoats().size(), loadedPositioningEvent.getInvolvedBoats().size());
assertEquals(event.getInvolvedCompetitors().size(), loadedPositioningEvent.getInvolvedCompetitors().size());
final CompetitorResults expectedCompetiorResults = event.getPositionedCompetitorsIDsNamesMaxPointsReasons();
final CompetitorResults loadedCompetitorResults = loadedPositioningEvent.getPositionedCompetitorsIDsNamesMaxPointsReasons();
assertCompetitorResultsEqual(expectedCompetiorResults, loadedCompetitorResults);
@@ -221,7 +221,7 @@ public class TestStoringAndRetrievingRaceLogInRegatta extends AbstractTestStorin
assertEquals(event.getLogicalTimePoint(), loadedPositioningEvent.getLogicalTimePoint());
assertEquals(event.getPassId(), loadedPositioningEvent.getPassId());
assertEquals(event.getId(), loadedPositioningEvent.getId());
assertEquals(event.getInvolvedBoats().size(), loadedPositioningEvent.getInvolvedBoats().size());
assertEquals(event.getInvolvedCompetitors().size(), loadedPositioningEvent.getInvolvedCompetitors().size());
assertCompetitorResultsEqual(event.getPositionedCompetitorsIDsNamesMaxPointsReasons(), loadedPositioningEvent.getPositionedCompetitorsIDsNamesMaxPointsReasons());
assertEquals(1, Util.size(loadedRaceLog.getFixes()));
} finally {
@@ -245,7 +245,7 @@ public class TestStoringAndRetrievingRaceLogInRegatta extends AbstractTestStorin
assertEquals(event.getLogicalTimePoint(), loadedConfirmedEvent.getLogicalTimePoint());
assertEquals(event.getPassId(), loadedConfirmedEvent.getPassId());
assertEquals(event.getId(), loadedConfirmedEvent.getId());
assertEquals(event.getInvolvedBoats().size(), loadedConfirmedEvent.getInvolvedBoats().size());
assertEquals(event.getInvolvedCompetitors().size(), loadedConfirmedEvent.getInvolvedCompetitors().size());
assertCompetitorResultsEqual(event.getPositionedCompetitorsIDsNamesMaxPointsReasons(), loadedConfirmedEvent.getPositionedCompetitorsIDsNamesMaxPointsReasons());
assertEquals(1, Util.size(loadedRaceLog.getFixes()));
} finally {
@@ -267,7 +267,7 @@ public class TestStoringAndRetrievingRaceLogInRegatta extends AbstractTestStorin
RaceLogFinishPositioningConfirmedEvent loadedConfirmedEvent = (RaceLogFinishPositioningConfirmedEvent) loadedEvent;
assertEquals(now, loadedConfirmedEvent.getLogicalTimePoint());
assertEquals(0, loadedConfirmedEvent.getPassId());
assertEquals(0, loadedConfirmedEvent.getInvolvedBoats().size());
assertEquals(0, loadedConfirmedEvent.getInvolvedCompetitors().size());
assertNull(event.getPositionedCompetitorsIDsNamesMaxPointsReasons());
assertNull(loadedConfirmedEvent.getPositionedCompetitorsIDsNamesMaxPointsReasons());
assertEquals(1, Util.size(loadedRaceLog.getFixes()));