a first working trivial test case which checks the basic test fixture, set-up and race retrieval with status update

Change-Id: I8de10018477bca6bd5b9a51003acc7bcfc5df285
This commit is contained in:
Axel Uhl committed 2016-04-22 00:04:51 +02:00
1 parent f3e9219804
commit 47ec06cffd
4 files changed
+214 -91

No files matched your search

@@ -1,114 +1,168 @@
package com.sap.sailing.domain.base.racegroup.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import com.sap.sailing.domain.base.SeriesBase;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.impl.BoatClassImpl;
import com.sap.sailing.domain.base.impl.FleetImpl;
import com.sap.sailing.domain.base.racegroup.CurrentRaceFilter;
import com.sap.sailing.domain.base.racegroup.IsRaceFragment;
import com.sap.sailing.domain.base.racegroup.IsFleetFragment;
import com.sap.sailing.domain.base.racegroup.RaceGroupFragment;
import com.sap.sailing.domain.base.racegroup.RaceCell;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
import com.sap.sailing.domain.base.racegroup.RaceGroupSeriesFleetRaceColumn;
import com.sap.sailing.domain.base.racegroup.RaceRow;
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
import com.sap.sailing.domain.common.BoatClassMasterdata;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
public class CurrentRaceFilterImplTest {
private CurrentRaceFilter fixture;
private CurrentRaceFilter<SimpleFilterableRace> fixture;
private RaceGroup _505;
private RaceGroup yes;
private RaceGroup isaf;
private RaceGroup league;
private Map<RaceGroupSeriesFleetRaceColumn, SimpleFilterableRace> races;
@Before
public void setUp() {
fixture = new CurrentRaceFilterImpl();
races = new HashMap<>();
// five regattas ("RaceGroup"s):
// - simple single-series, single fleet set-up (505 style)
// - single-series, two fleets (Yellow / Blue, as used by YES)
// - qualification with Yellow / Blue; final with Gold / Silver; Medal
// - league set-up with single series with three fleets Red/Green/Blue
_505 = create505Regatta();
races.putAll(getAllRaces(_505));
yes = createYesRegatta();
races.putAll(getAllRaces(yes));
isaf = createIsafRegatta();
races.putAll(getAllRaces(isaf));
league = createLeagueRegatta();
races.putAll(getAllRaces(league));
fixture = new CurrentRaceFilterImpl<>(races.values());
}
private RaceGroup create505Regatta() {
final List<SeriesWithRows> _505Series = new ArrayList<>();
final List<RaceRow> _505RaceRows = new ArrayList<>();
final RaceRow _505RaceRow = createRaceRow(/* firstRaceColumnNumber */ 1, /* numberOfRaces */ 9, /* raceColumnNamePrefix */ "R", /* fleetName */ "Default");
_505RaceRows.add(_505RaceRow);
_505Series.add(new SeriesWithRowsImpl("Default", /* isMedal */ false, _505RaceRows));
final RaceGroup _505 = new RaceGroupImpl("505", /* displayName */ null,
new BoatClassImpl(BoatClassMasterdata._5O5.getDisplayName(), BoatClassMasterdata._5O5),
/* courseArea */ null, _505Series, /* regattaConfiguration */ null);
return _505;
}
private RaceGroup createYesRegatta() {
final List<SeriesWithRows> yesSeries = new ArrayList<>();
final List<RaceRow> yesRaceRows = Arrays.asList(createRaceRow(1, 9, "R", "Yellow"), createRaceRow(1, 9, "R", "Blue"));
yesSeries.add(new SeriesWithRowsImpl("Default", /* isMedal */ false, yesRaceRows));
final RaceGroup yes = new RaceGroupImpl("YES", /* displayName */ null,
new BoatClassImpl(BoatClassMasterdata._470.getDisplayName(), BoatClassMasterdata._470),
/* courseArea */ null, yesSeries, /* regattaConfiguration */ null);
return yes;
}
private RaceGroup createIsafRegatta() {
final List<SeriesWithRows> isafSeries = new ArrayList<>();
final List<RaceRow> isafQualificationRaceRows = Arrays.asList(createRaceRow(1, 5, "Q", "Yellow"), createRaceRow(1, 5, "Q", "Blue"));
isafSeries.add(new SeriesWithRowsImpl("Qualification", /* isMedal */ false, isafQualificationRaceRows));
final List<RaceRow> isafFinalRaceRows = Arrays.asList(createRaceRow(6, 5, "F", "Gold"), createRaceRow(6, 5, "F", "Silver"));
isafSeries.add(new SeriesWithRowsImpl("Final", /* isMedal */ false, isafFinalRaceRows));
final List<RaceRow> isafMedalRaceRows = Arrays.asList(createRaceRow(1, 1, "M", "Medal"));
isafSeries.add(new SeriesWithRowsImpl("Medal", /* isMedal */ true, isafMedalRaceRows));
final RaceGroup isaf = new RaceGroupImpl("ISAF", /* displayName */ null,
new BoatClassImpl(BoatClassMasterdata._470.getDisplayName(), BoatClassMasterdata._470),
/* courseArea */ null, isafSeries, /* regattaConfiguration */ null);
return isaf;
}
private RaceGroup createLeagueRegatta() {
final List<SeriesWithRows> leagueSeries = new ArrayList<>();
final List<RaceRow> leagueRaceRows = Arrays.asList(createRaceRow(1, 15, "F", "Red"), createRaceRow(1, 15, "F", "Green"), createRaceRow(1, 15, "F", "Blue"));
leagueSeries.add(new SeriesWithRowsImpl("Default", /* isMedal */ false, leagueRaceRows));
final RaceGroup league = new RaceGroupImpl("League", /* displayName */ null,
new BoatClassImpl(BoatClassMasterdata.J70.getDisplayName(), BoatClassMasterdata.J70),
/* courseArea */ null, leagueSeries, /* regattaConfiguration */ null);
return league;
}
private Map<RaceGroupSeriesFleetRaceColumn, SimpleFilterableRace> getAllRaces(RaceGroup raceGroup) {
final Map<RaceGroupSeriesFleetRaceColumn, SimpleFilterableRace> result = new HashMap<>();
int zeroBasedSeriesIndex = 0;
for (SeriesWithRows series : raceGroup.getSeries()) {
for (final RaceRow raceRow : series.getRaceRows()) {
int zeroBasedIndexInFleet = 0;
for (final RaceCell raceCell : raceRow.getCells()) {
final SimpleFilterableRace race = new SimpleFilterableRace(raceGroup, series, raceRow.getFleet(), zeroBasedIndexInFleet, zeroBasedSeriesIndex, raceCell.getName());
result.put(new RaceGroupSeriesFleetRaceColumn(race), race);
zeroBasedIndexInFleet++;
}
}
zeroBasedSeriesIndex++;
}
return result;
}
@Test
public void easyRaceGroupTest() throws Exception {
SeriesBase seriesBase = Mockito.mock(SeriesBase.class);
List<RaceGroupFragment> values = new ArrayList<>();
SeriesFragment fristSeries = new SeriesFragment(seriesBase);
values.add(fristSeries);
RaceFragment firstRace = new RaceFragment(RaceLogRaceStatus.UNSCHEDULED);
values.add(firstRace);
List<RaceGroupFragment> result = fixture.getCurrentRaces();
Assert.assertThat(result.size(), Matchers.equalTo(2));
Assert.assertThat(result.get(0), Matchers.equalTo(fristSeries));
Assert.assertThat(result.get(1), Matchers.equalTo(firstRace));
public void testRaceAccess() {
SimpleFilterableRace isafQ4Yellow = get(isaf, "F7", "Gold");
assertNotNull(isafQ4Yellow);
assertEquals("F7", isafQ4Yellow.getRaceColumnName());
assertEquals("Gold", isafQ4Yellow.getFleet().getName());
assertEquals(1, isafQ4Yellow.getZeroBasedIndexInFleet());
assertEquals(1, isafQ4Yellow.getZeroBasedSeriesIndex());
assertEquals(RaceLogRaceStatus.UNSCHEDULED, isafQ4Yellow.getStatus());
isafQ4Yellow.setStatus(RaceLogRaceStatus.SCHEDULED);
assertEquals(RaceLogRaceStatus.SCHEDULED, isafQ4Yellow.getStatus());
}
private SimpleFilterableRace get(RaceGroup raceGroup, String raceColumnName, String fleetName) {
for (final SeriesWithRows series : raceGroup.getSeries()) {
final Fleet fleet = getFleet(series, fleetName);
if (fleet != null) {
final RaceRow raceRow = series.getRaceRow(fleet);
if (raceRow != null) {
for (final RaceCell raceCell : raceRow.getCells()) {
if (raceCell.getName().equals(raceColumnName)) {
return races.get(new RaceGroupSeriesFleetRaceColumn(raceGroup, series, fleet, raceColumnName));
}
}
}
}
}
return null;
}
@Test
public void raceGroupWithTwoSeries() throws Exception {
SeriesBase seriesBase1 = Mockito.mock(SeriesBase.class);
SeriesBase seriesBase2 = Mockito.mock(SeriesBase.class);
List<RaceGroupFragment> values = new ArrayList<>();
values.addAll(createRacesForSeries(3, seriesBase1));
values.addAll(createRacesForSeries(3, seriesBase2));
List<RaceGroupFragment> result = fixture.getCurrentRaces();
Assert.assertThat(result.size(), Matchers.equalTo(2));
Assert.assertThat(result.get(0), Matchers.equalTo(values.get(0)));
Assert.assertThat(result.get(1), Matchers.equalTo(values.get(1)));
((RaceFragment) values.get(5)).setCurrentStatus(RaceLogRaceStatus.PRESCHEDULED);
result = fixture.getCurrentRaces();
Assert.assertThat(result.size(), Matchers.equalTo(5));
Assert.assertThat(result.get(0), Matchers.equalTo(values.get(0)));
Assert.assertThat(result.get(1), Matchers.equalTo(values.get(1)));
Assert.assertThat(result.get(2), Matchers.equalTo(values.get(4)));
Assert.assertThat(result.get(3), Matchers.equalTo(values.get(5)));
Assert.assertThat(result.get(4), Matchers.equalTo(values.get(6)));
((RaceFragment) values.get(5)).setCurrentStatus(RaceLogRaceStatus.RUNNING);
result = fixture.getCurrentRaces();
Assert.assertThat(result.size(), Matchers.equalTo(3));
Assert.assertThat(result.get(0), Matchers.equalTo(values.get(4)));
Assert.assertThat(result.get(1), Matchers.equalTo(values.get(5)));
Assert.assertThat(result.get(2), Matchers.equalTo(values.get(6)));
private Fleet getFleet(SeriesWithRows series, String fleetName) {
for (final Fleet fleet : series.getFleets()) {
if (fleet.getName().equals(fleetName)) {
return fleet;
}
}
return null;
}
private Collection<? extends RaceGroupFragment> createRacesForSeries(int max, SeriesBase seriesBase) {
List<RaceGroupFragment> results = new ArrayList<>();
results.add(new SeriesFragment(seriesBase));
for (int i = 0; i < max; i++) {
results.add(new RaceFragment(RaceLogRaceStatus.UNSCHEDULED));
}
return results;
}
private class SeriesFragment implements IsFleetFragment {
private SeriesBase series;
public SeriesFragment(SeriesBase series) {
this.series = series;
}
@Override
public SeriesBase getSeries() {
return series;
}
}
private class RaceFragment implements IsRaceFragment {
private RaceLogRaceStatus currentStatus;
public RaceFragment(RaceLogRaceStatus currentStatus) {
this.currentStatus = currentStatus;
}
@Override
public RaceLogRaceStatus getCurrentStatus() {
return currentStatus;
}
public void setCurrentStatus(RaceLogRaceStatus newStatus) {
currentStatus = newStatus;
private RaceRow createRaceRow(final int firstRaceColumnNumber, final int numberOfRaces,
final String raceColumnNamePrefix, final String fleetName) {
final List<RaceCell> _505RaceCells = new ArrayList<>();
for (int i=0; i < numberOfRaces; i++) {
_505RaceCells.add(new RaceCellImpl(raceColumnNamePrefix+(i+firstRaceColumnNumber),
/* race log */ null, /* factor */ firstRaceColumnNumber, /* explicitFactor */ null,
/* zeroBasedIndexInFleet */ i));
}
final RaceRowImpl _505RaceRow = new RaceRowImpl(new FleetImpl(fleetName), _505RaceCells);
return _505RaceRow;
}
}
@@ -0,0 +1,69 @@
package com.sap.sailing.domain.base.racegroup.impl;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.SeriesBase;
import com.sap.sailing.domain.base.racegroup.FilterableRace;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
public class SimpleFilterableRace implements FilterableRace {
private final RaceGroup raceGroup;
private final SeriesBase series;
private final Fleet fleet;
private RaceLogRaceStatus status;
private final int zeroBasedIndexInFleet;
private final int zeroBasedSeriesIndex;
private final String raceColumnName;
public SimpleFilterableRace(RaceGroup raceGroup, SeriesBase series, Fleet fleet, int zeroBasedIndexInFleet,
int zeroBasedSeriesIndex, String raceColumnName) {
super();
this.raceGroup = raceGroup;
this.series = series;
this.fleet = fleet;
this.zeroBasedIndexInFleet = zeroBasedIndexInFleet;
this.zeroBasedSeriesIndex = zeroBasedSeriesIndex;
this.raceColumnName = raceColumnName;
this.status = RaceLogRaceStatus.UNSCHEDULED;
}
@Override
public RaceGroup getRaceGroup() {
return raceGroup;
}
@Override
public SeriesBase getSeries() {
return series;
}
@Override
public Fleet getFleet() {
return fleet;
}
@Override
public RaceLogRaceStatus getStatus() {
return status;
}
public void setStatus(RaceLogRaceStatus status) {
this.status = status;
}
@Override
public int getZeroBasedIndexInFleet() {
return zeroBasedIndexInFleet;
}
@Override
public int getZeroBasedSeriesIndex() {
return zeroBasedSeriesIndex;
}
@Override
public String getRaceColumnName() {
return raceColumnName;
}
}