mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-23 22:19:13 +00:00
bug5877: interims commit, using distinct medal *series* for quarter/semi/grand final
This commit is contained in:
+110
-12
@@ -1,39 +1,137 @@
|
||||
package com.sap.sailing.domain.test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.RaceColumnInSeries;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.leaderboard.impl.LowPointWithEliminatingMedalSeriesPromotingOneToFinalAndTwoToSemifinal;
|
||||
|
||||
public class LowPointWithEliminatingMedalSeriesPromotingOneToFinalAndTwoToSemifinalTest {
|
||||
private Regatta regatta;
|
||||
private LowPointWithEliminatingMedalSeriesPromotingOneToFinalAndTwoToSemifinal scoringScheme;
|
||||
private RaceColumnInSeries quarterFinal;
|
||||
private Series quarterFinalSeries;
|
||||
private RaceColumnInSeries semiFinal;
|
||||
private Series semiFinalSeries;
|
||||
private RaceColumnInSeries grandFinal;
|
||||
private Series grandFinalSeries;
|
||||
private HashMap<Competitor, Integer> competitorsRankedByOpeningSeries;
|
||||
private Competitor c1, c2, c3, c4, c5;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
regatta = mock(Regatta.class);
|
||||
scoringScheme = new LowPointWithEliminatingMedalSeriesPromotingOneToFinalAndTwoToSemifinal();
|
||||
quarterFinal = mock(RaceColumnInSeries.class);
|
||||
quarterFinalSeries = mockMedalSeries(regatta, quarterFinal);
|
||||
semiFinal = mock(RaceColumnInSeries.class);
|
||||
semiFinalSeries = mockMedalSeries(regatta, semiFinal);
|
||||
grandFinal = mock(RaceColumnInSeries.class);
|
||||
grandFinalSeries = mockMedalSeries(regatta, grandFinal);
|
||||
when(regatta.getSeries()).thenAnswer(new Answer<Iterable<Series>>() {
|
||||
@Override
|
||||
public Iterable<Series> answer(InvocationOnMock invocation) throws Throwable {
|
||||
return Arrays.asList(quarterFinalSeries, semiFinalSeries, grandFinalSeries);
|
||||
}
|
||||
});
|
||||
when(quarterFinal.getSeries()).thenReturn(quarterFinalSeries);
|
||||
when(semiFinal.getSeries()).thenReturn(semiFinalSeries);
|
||||
when(grandFinal.getSeries()).thenReturn(grandFinalSeries);
|
||||
c1 = mock(Competitor.class);
|
||||
c2 = mock(Competitor.class);
|
||||
c3 = mock(Competitor.class);
|
||||
c4 = mock(Competitor.class);
|
||||
c5 = mock(Competitor.class);
|
||||
competitorsRankedByOpeningSeries = new HashMap<>();
|
||||
competitorsRankedByOpeningSeries.put(c1, 1);
|
||||
competitorsRankedByOpeningSeries.put(c2, 2);
|
||||
competitorsRankedByOpeningSeries.put(c3, 3);
|
||||
competitorsRankedByOpeningSeries.put(c4, 4);
|
||||
competitorsRankedByOpeningSeries.put(c5, 5);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCountingPromotedCompetitors() {
|
||||
final LowPointWithEliminatingMedalSeriesPromotingOneToFinalAndTwoToSemifinal scoringScheme = new LowPointWithEliminatingMedalSeriesPromotingOneToFinalAndTwoToSemifinal();
|
||||
final RaceColumnInSeries quarterFinal = mock(RaceColumnInSeries.class);
|
||||
final RaceColumnInSeries semiFinal = mock(RaceColumnInSeries.class);
|
||||
final RaceColumnInSeries grandFinal = mock(RaceColumnInSeries.class);
|
||||
public void testCountingCompetitorsBetterThanThoseSailingInSeries() {
|
||||
assertEquals(0, scoringScheme.getNumberOfCompetitorsBetterThanThoseSailingInSeries(grandFinalSeries));
|
||||
assertEquals(1, scoringScheme.getNumberOfCompetitorsBetterThanThoseSailingInSeries(semiFinalSeries));
|
||||
assertEquals(3, scoringScheme.getNumberOfCompetitorsBetterThanThoseSailingInSeries(quarterFinalSeries));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCountingCompetitorsAdvancingFromOpeningSeries() {
|
||||
assertEquals(1, scoringScheme.getNumberOfCompetitorsAdvancingFromOpeningSeriesToOrThroughSeries(grandFinalSeries));
|
||||
assertEquals(3, scoringScheme.getNumberOfCompetitorsAdvancingFromOpeningSeriesToOrThroughSeries(semiFinalSeries));
|
||||
assertEquals(3, scoringScheme.getNumberOfCompetitorsAdvancingFromOpeningSeriesToOrThroughSeries(quarterFinalSeries));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQuarterFinalParticipationForPromotedCompetitors() {
|
||||
assertTrue(scoringScheme.isParticipatingInMedalRace(c1, /* competitorMedalRaceScore */ null, quarterFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertTrue(scoringScheme.isParticipatingInMedalRace(c2, /* competitorMedalRaceScore */ null, quarterFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertTrue(scoringScheme.isParticipatingInMedalRace(c3, /* competitorMedalRaceScore */ null, quarterFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertFalse(scoringScheme.isParticipatingInMedalRace(c4, /* competitorMedalRaceScore */ null, quarterFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertFalse(scoringScheme.isParticipatingInMedalRace(c5, /* competitorMedalRaceScore */ null, quarterFinal, ()->competitorsRankedByOpeningSeries));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSemiFinalParticipationForPromotedCompetitors() {
|
||||
assertTrue(scoringScheme.isParticipatingInMedalRace(c1, /* competitorMedalRaceScore */ null, semiFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertTrue(scoringScheme.isParticipatingInMedalRace(c2, /* competitorMedalRaceScore */ null, semiFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertTrue(scoringScheme.isParticipatingInMedalRace(c3, /* competitorMedalRaceScore */ null, semiFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertFalse(scoringScheme.isParticipatingInMedalRace(c4, /* competitorMedalRaceScore */ null, semiFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertFalse(scoringScheme.isParticipatingInMedalRace(c5, /* competitorMedalRaceScore */ null, semiFinal, ()->competitorsRankedByOpeningSeries));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGrandFinalParticipationForPromotedCompetitors() {
|
||||
assertTrue(scoringScheme.isParticipatingInMedalRace(c1, /* competitorMedalRaceScore */ null, grandFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertFalse(scoringScheme.isParticipatingInMedalRace(c2, /* competitorMedalRaceScore */ null, grandFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertFalse(scoringScheme.isParticipatingInMedalRace(c3, /* competitorMedalRaceScore */ null, grandFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertFalse(scoringScheme.isParticipatingInMedalRace(c4, /* competitorMedalRaceScore */ null, grandFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertFalse(scoringScheme.isParticipatingInMedalRace(c5, /* competitorMedalRaceScore */ null, grandFinal, ()->competitorsRankedByOpeningSeries));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGrandFinalParticipationForScoringCompetitors() {
|
||||
assertTrue(scoringScheme.isParticipatingInMedalRace(c1, /* competitorMedalRaceScore */ 3.0, grandFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertFalse(scoringScheme.isParticipatingInMedalRace(c2, /* competitorMedalRaceScore */ null, grandFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertTrue(scoringScheme.isParticipatingInMedalRace(c3, /* competitorMedalRaceScore */ 1.0, grandFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertTrue(scoringScheme.isParticipatingInMedalRace(c4, /* competitorMedalRaceScore */ 2.0, grandFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertFalse(scoringScheme.isParticipatingInMedalRace(c5, /* competitorMedalRaceScore */ null, grandFinal, ()->competitorsRankedByOpeningSeries));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMedalRaceParticipationForScoringCompetitors() {
|
||||
assertTrue(scoringScheme.isParticipatingInMedalRace(c1, /* competitorMedalRaceScore */ 4.0, quarterFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertTrue(scoringScheme.isParticipatingInMedalRace(c4, /* competitorMedalRaceScore */ 2.0, quarterFinal, ()->competitorsRankedByOpeningSeries));
|
||||
assertTrue(scoringScheme.isParticipatingInMedalRace(c5, /* competitorMedalRaceScore */ 3.0, quarterFinal, ()->competitorsRankedByOpeningSeries));
|
||||
}
|
||||
|
||||
private Series mockMedalSeries(Regatta regatta, RaceColumnInSeries... raceColumns) {
|
||||
final Iterable<RaceColumnInSeries> medalSeriesColumns = Arrays.asList(raceColumns);
|
||||
final Series medalSeries = mock(Series.class);
|
||||
final Iterable<RaceColumnInSeries> medalSeriesColumns = Arrays.asList(quarterFinal, semiFinal, grandFinal);
|
||||
when(medalSeries.getRegatta()).thenReturn(regatta);
|
||||
when(medalSeries.isMedal()).thenReturn(true);
|
||||
when(medalSeries.getRaceColumns()).thenAnswer(new Answer<Iterable<RaceColumnInSeries>>() {
|
||||
@Override
|
||||
public Iterable<RaceColumnInSeries> answer(InvocationOnMock invocation) throws Throwable {
|
||||
return medalSeriesColumns;
|
||||
}
|
||||
});
|
||||
when(quarterFinal.getSeries()).thenReturn(medalSeries);
|
||||
when(semiFinal.getSeries()).thenReturn(medalSeries);
|
||||
when(grandFinal.getSeries()).thenReturn(medalSeries);
|
||||
assertEquals(0, scoringScheme.getNumberOfCompetitorsBetterThanThoseSailingInRace(grandFinal));
|
||||
assertEquals(1, scoringScheme.getNumberOfCompetitorsBetterThanThoseSailingInRace(semiFinal));
|
||||
assertEquals(3, scoringScheme.getNumberOfCompetitorsBetterThanThoseSailingInRace(quarterFinal));
|
||||
return medalSeries;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user