@Test
  public void testCalculateCandidateScope1() {
    assertThat(
        LeaderboardService.calculateCandidateScopeForWorseScore( //
            score(1, 1, 1, 1), //
            score(2, 12, 12, 12)), //
        equalTo(Range.Month.scope));

    assertThat(
        LeaderboardService.calculateCandidateScopeForWorseScore( //
            score(1, 1, 1, 1), //
            score(1, 1, 1, 2)), //
        equalTo(Range.Day.scope));

    assertThat(
        LeaderboardService.calculateCandidateScopeForWorseScore( //
            score(1, 1, 1, 1), //
            score(1, 1, 2, 8)), //
        equalTo(Range.Week.scope));

    assertThat(
        LeaderboardService.calculateCandidateScopeForWorseScore( //
            score(1, 1, 1, 1), //
            score(1, 2, 4, 32)), //
        equalTo(Range.Month.scope));
  }
 @Test
 public void shouldNotBeConsideredIfNotBetterThanPreviousForSameDate() {
   Score[] scores = new Score[] {score(1, 1, 1, 1, 1, 500)};
   Score score = score(1, 1, 1, 1, 1, 250);
   Result result = LeaderboardService.calculateScoreScopeAndStuff(score, scores);
   assertThat(result.replacedScores, equalTo(-1));
 }
 @Test
 public void shouldBeBestIfBetterThanPreviousBest() {
   Score[] scores = new Score[] {score(1, 1, 1, 1, 1, 250)};
   Score score = score(1, 1, 1, 1, 1, 500);
   Result result = LeaderboardService.calculateScoreScopeAndStuff(score, scores);
   assertThat(score.scope, equalTo(1));
   assertThat(result.replacedScores, equalTo(0));
 }
 @Test
 public void shouldBeBestScoreIfNoOtherScore() {
   Score[] scores = new Score[] {};
   Score score = score(1, 1, 1, 1, 1, 500);
   Result result = LeaderboardService.calculateScoreScopeAndStuff(score, scores);
   assertThat(result.todayScoreExists, equalTo(false));
   assertThat(score.scope, equalTo(1));
   assertThat(result.replacedScores, equalTo(-1));
 }
 @Test
 public void testBestScoreFromAnotherYear() {
   Score[] scores = new Score[] {score(1, 1, 1, 1, 1, 250)};
   Score score = score(2, 1, 1, 1, 1, 500);
   Result result = LeaderboardService.calculateScoreScopeAndStuff(score, scores);
   assertThat(result.todayScoreExists, equalTo(false));
   assertThat(score.scope, equalTo(1));
   assertThat(result.replacedScores, equalTo(0));
 }
 @Test
 public void shouldNotBeConsideredAsBestOfMonth() {
   Score[] scores =
       new Score[] { //
         score(1, 1, 1, 1, 1, 500), //
         score(1, 2, 5, 80, 2, 450), //
       };
   Score score = score(1, 2, 5, 80, 1, 350);
   Result result = LeaderboardService.calculateScoreScopeAndStuff(score, scores);
   assertThat(result.todayScoreExists, equalTo(true));
   assertThat(result.replacedScores, equalTo(-1));
 }
 @Test
 public void shouldBeConsideredForBestOfMonth() {
   Score[] scores =
       new Score[] { //
         score(1, 1, 1, 1, 1, 500), //
         score(1, 2, 5, 80, 2, 250), //
       };
   Score score = score(1, 2, 6, 81, 1, 350);
   Result result = LeaderboardService.calculateScoreScopeAndStuff(score, scores);
   assertThat(score.scope, equalTo(2));
   assertThat(result.replacedScores, equalTo(1));
 }
 @Test
 public void testCaseSameWeekSameDayLessScore() {
   Score[] scores =
       new Score[] { //
         score(1, 1, 1, 1, 1, 500), //
         score(1, 1, 2, 8, 3, 400), //
       };
   Score score = score(1, 1, 2, 8, 1, 350);
   Result result = LeaderboardService.calculateScoreScopeAndStuff(score, scores);
   assertThat(result.todayScoreExists, equalTo(true));
   assertThat(result.replacedScores, equalTo(-1));
 }
 @Test
 public void shouldBeBestOfMonthWhenSameDateThanAll() {
   Score[] scores =
       new Score[] { //
         score(1, 1, 1, 1, 1, 500), //
       };
   Score score = score(1, 2, 5, 50, 1, 400);
   Result result = LeaderboardService.calculateScoreScopeAndStuff(score, scores);
   assertThat(result.todayScoreExists, equalTo(false));
   assertThat(score.scope, equalTo(Range.Month.scope));
   assertThat(result.replacedScores, equalTo(-1));
 }
 @Test
 public void shouldReplaceBestOfSecondWeek() {
   Score[] scores =
       new Score[] { //
         score(1, 1, 1, 1, 1, 500), //
         score(1, 1, 2, 8, 3, 400), //
       };
   Score score = score(1, 1, 2, 8, 1, 450);
   Result result = LeaderboardService.calculateScoreScopeAndStuff(score, scores);
   assertThat(result.todayScoreExists, equalTo(true));
   assertThat(score.scope, equalTo(3));
   assertThat(result.replacedScores, equalTo(1));
 }
 @Test
 public void shouldBeBestOfTodayButNotYesterday() {
   Score[] scores =
       new Score[] {
         score(1, 1, 1, 1, 1, 500), //
         score(1, 1, 1, 2, 4, 450), //
         score(1, 1, 1, 3, 4, 350), //
         score(1, 1, 1, 4, 4, 250), //
       };
   Score score = score(1, 1, 1, 5, 1, 150);
   Result result = LeaderboardService.calculateScoreScopeAndStuff(score, scores);
   assertThat(result.todayScoreExists, equalTo(false));
   assertThat(score.scope, equalTo(4));
   assertThat(result.replacedScores, equalTo(-1));
 }