Esempio n. 1
0
def test_cutoff_and_entrant_finished_waay_ahead(random_users):
    entrant = get_test_entrant(next(random_users),
                               status_value="finished",
                               finished_at=time_ago(minutes=20),
                               finish_time=timedelta(hours=1, microseconds=1),
                               place=2)
    second_place = get_test_entrant(next(random_users),
                                    status_value="finished",
                                    finished_at=time_ago(minutes=15),
                                    finish_time=timedelta(hours=1,
                                                          minutes=35,
                                                          microseconds=1),
                                    place=1)
    third_place = get_test_entrant(next(random_users),
                                   status_value="finished",
                                   finished_at=time_ago(minutes=10),
                                   finish_time=timedelta(hours=1,
                                                         minutes=40,
                                                         microseconds=1),
                                   place=3)
    entrants = get_test_entrants(random_users, entrant, second_place,
                                 third_place)
    race = get_test_race(entrants=entrants)
    qualifier = get_test_qualifier()
    qualifier.update_qualifier_text(race, entrant.user.full_name)
    # par is 95 minutes, entrant's time is 60 minutes. 2-(60/85) ~= 1.29
    # but max score is 1.05
    assert qualifier.entrant_score == "1.05"
    assert qualifier.par_text == "1:25:00.0"
Esempio n. 2
0
async def test_entrant_finished_first(random_users):
    event_loop = get_event_loop()
    event_loop.set_debug(True)

    play_media = Mock()
    media_player = MediaPlayer()
    media_file_path = "fake/path/test.mp3"
    media_player.play_media_callback = play_media
    media_player.add_trigger(media_file_path, 0)
    media_player.monitoring_type = 0
    await asyncio.sleep(0.1)

    assert len(media_player.triggers) == 1
    play_media.assert_not_called()

    entrant = get_test_entrant(status_value="in_progress",
                               user=next(random_users))
    entrants = get_test_entrants(random_users, entrant)
    race = get_test_race(entrants=entrants)
    media_player.race_updated(race, entrant.user.full_name)
    await asyncio.sleep(0.1)
    play_media.assert_not_called()

    entrant = race.get_entrant_by_name(entrant.user.full_name)
    await asyncio.sleep(0.1)
    entrant.place = 1
    entrant.status.value = "finished"
    entrant.finish_time = datetime.now(timezone.utc)
    media_player.race_updated(race, entrant.user.full_name)
    await asyncio.sleep(0.1)
    play_media.assert_called_once_with(media_file_path, 0)
Esempio n. 3
0
def test_cutoff_finished(random_users):
    entrant = get_test_entrant(next(random_users), status_value="in_progress")
    first_place = get_test_entrant(
        next(random_users),
        status_value="finished",
        finished_at=time_ago(minutes=20),
        finish_time=timedelta(hours=1, minutes=30, microseconds=1),
        place=1,
    )
    second_place = get_test_entrant(
        next(random_users),
        status_value="finished",
        finished_at=time_ago(minutes=15),
        finish_time=timedelta(hours=1, minutes=35, microseconds=1),
        place=2,
    )
    third_place = get_test_entrant(next(random_users),
                                   status_value="finished",
                                   finished_at=time_ago(minutes=10),
                                   finish_time=timedelta(hours=1,
                                                         minutes=40,
                                                         microseconds=1),
                                   place=3)
    entrants = get_test_entrants(random_users, first_place, second_place,
                                 third_place, entrant)
    race = get_test_race(entrants=entrants)
    qualifier = get_test_qualifier()
    qualifier.update_qualifier_text(race, entrant.user.full_name)
    assert qualifier.entrant_score == " "
    assert qualifier.par_text == "1:35:00.0"
Esempio n. 4
0
def test_entrant_and_partner_and_opponent1_finished_race_over(random_users):
    entrant = get_test_entrant(next(random_users),
                               status_value="finished",
                               finished_at=datetime.now(timezone.utc),
                               finish_time=timedelta(hours=1, microseconds=1))
    partner = get_test_entrant(
        next(random_users),
        status_value="finished",
        finished_at=datetime.now(timezone.utc),
        finish_time=timedelta(hours=2, microseconds=1),
    )
    opponent1 = get_test_entrant(
        next(random_users),
        status_value="finished",
        finished_at=datetime.now(timezone.utc),
        finish_time=timedelta(hours=3, microseconds=2),
    )
    opponent2 = get_test_entrant(next(random_users),
                                 status_value="in_progress")

    race = get_test_race(entrants=[entrant, partner, opponent1, opponent2],
                         opened_by=next(random_users),
                         started_at=time_ago(hours=3, minutes=4))
    coop = Coop()
    coop.enabled = True
    coop.partner = partner.user.full_name
    coop.opponent1 = opponent1.user.full_name
    coop.opponent2 = opponent2.user.full_name
    coop.update_coop_text(race, entrant.user.full_name)
    assert (coop.opponent_time_text == "3:02:00.0")
    assert coop.our_time_text == "1:30:00.0"
Esempio n. 5
0
def test_opponents_and_entrant_finished_race_ongoing(random_users):
    entrant = get_test_entrant(next(random_users),
                               status_value="finished",
                               finished_at=datetime.now(timezone.utc),
                               finish_time=timedelta(hours=1, microseconds=1))
    partner = get_test_entrant(next(random_users), status_value="in_progress")
    opponent1 = get_test_entrant(
        next(random_users),
        status_value="finished",
        finished_at=datetime.now(timezone.utc),
        finish_time=timedelta(hours=2, microseconds=2),
    )
    opponent2 = get_test_entrant(
        next(random_users),
        status_value="finished",
        finished_at=datetime.now(timezone.utc),
        finish_time=timedelta(hours=2, microseconds=1),
    )

    race = get_test_race(entrants=[entrant, partner, opponent1, opponent2],
                         started_at=time_ago(hours=2, microseconds=3))
    coop = Coop()
    coop.enabled = True
    coop.partner = partner.user.full_name
    coop.opponent1 = opponent1.user.full_name
    coop.opponent2 = opponent2.user.full_name
    coop.update_coop_text(race, entrant.user.full_name)
    assert coop.opponent_time_text == "2:00:00.0"
    assert coop.our_time_text == "0:29:59.9"
    race.started_at = time_ago(hours=2, minutes=30, microseconds=3)
    coop.update_coop_text(race, entrant.user.full_name)
    assert coop.opponent_time_text == "2:00:00.0"
    assert coop.our_time_text == "0:14:59.9"
Esempio n. 6
0
def test_everyone_finished_opponents_won(random_users):
    entrant = get_test_entrant(next(random_users),
                               status_value="finished",
                               finished_at=datetime.now(timezone.utc),
                               finish_time=timedelta(hours=2, microseconds=1))
    partner = get_test_entrant(next(random_users),
                               status_value="finished",
                               finished_at=datetime.now(timezone.utc),
                               finish_time=timedelta(hours=2, microseconds=1))
    opponent1 = get_test_entrant(next(random_users),
                                 status_value="finished",
                                 finished_at=datetime.now(timezone.utc),
                                 finish_time=timedelta(hours=1,
                                                       microseconds=1))
    opponent2 = get_test_entrant(next(random_users),
                                 status_value="finished",
                                 finished_at=datetime.now(timezone.utc),
                                 finish_time=timedelta(hours=2,
                                                       microseconds=1))

    race = get_test_race(entrants=[entrant, partner, opponent1, opponent2],
                         opened_by=next(random_users),
                         started_at=time_ago(hours=2, minutes=1))
    coop = Coop()
    coop.enabled = True
    coop.partner = partner.user.full_name
    coop.opponent1 = opponent1.user.full_name
    coop.opponent2 = opponent2.user.full_name
    coop.update_coop_text(race, entrant.user.full_name)
    assert coop.opponent_time_text == "1:30:00.0"
    assert coop.opponent_time_color == coop.winner_color
    assert coop.our_time_text == "2:00:00.0"
    assert coop.our_time_color == coop.loser_color
Esempio n. 7
0
def test_cutoff_and_entrant_finished_in_top(random_users):
    entrant = get_test_entrant(next(random_users),
                               status_value="finished",
                               finished_at=time_ago(minutes=15),
                               finish_time=timedelta(hours=1,
                                                     minutes=35,
                                                     microseconds=1),
                               place=2)
    first_place = get_test_entrant(
        next(random_users),
        status_value="finished",
        finished_at=time_ago(minutes=20),
        finish_time=timedelta(hours=1, minutes=30, microseconds=1),
        place=1,
    )
    third_place = get_test_entrant(
        next(random_users),
        status_value="finished",
        finished_at=time_ago(minutes=10),
        finish_time=timedelta(hours=1, minutes=40, microseconds=1),
        place=3,
    )
    entrants = get_test_entrants(random_users, first_place, third_place,
                                 entrant)
    race = get_test_race(entrants=entrants)
    qualifier = get_test_qualifier()
    qualifier.update_qualifier_text(race, entrant.user.full_name)
    # par is 95 minutes, entrant's time is 95 minutes. 2-(95/95) = 1.00
    assert qualifier.entrant_score == "1.00"
    assert qualifier.par_text == "1:35:00.0"
Esempio n. 8
0
def test_only_partner_finished(random_users):
    entrant = get_test_entrant(next(random_users), status_value="in_progress")
    partner = get_test_entrant(next(random_users),
                               status_value="finished",
                               finished_at=datetime.now(timezone.utc),
                               finish_time=timedelta(hours=1, microseconds=1))
    opponent1 = get_test_entrant(
        next(random_users),
        status_value="in_progress",
    )
    opponent2 = get_test_entrant(next(random_users),
                                 status_value="in_progress")

    race = get_test_race(entrants=[entrant, partner, opponent1, opponent2],
                         opened_by=next(random_users),
                         started_at=time_ago(hours=1, minutes=15))
    coop = Coop()
    coop.enabled = True
    coop.partner = partner.user.full_name
    coop.opponent1 = opponent1.user.full_name
    coop.opponent2 = opponent2.user.full_name
    coop.update_coop_text(race, entrant.user.full_name)
    assert coop.opponent_time_text == " "
    assert coop.our_time_text == " "
    assert coop.our_time_color == coop.still_racing_color
    assert coop.opponent_time_color == coop.still_racing_color
Esempio n. 9
0
def test_no_one_finished(random_users):
    entrant = get_test_entrant(next(random_users), status_value="in_progress")
    entrants = [entrant]
    for i in range(0, 20):
        entrants.append(get_test_entrant(next(random_users)))
    race = get_test_race(entrants=entrants)
    qualifier = get_test_qualifier()
    qualifier.update_qualifier_text(race, entrant.user.full_name)
    assert qualifier.entrant_score == " "
    assert qualifier.par_text == " "
Esempio n. 10
0
def test_timer_user_dqed(random_users):
    entrant = get_test_entrant(next(random_users), status_value="dq")
    entrants = get_test_entrants(random_users, entrant)
    race = get_test_race(entrants=entrants)
    timer = get_test_timer()
    color, text = timer.get_timer_text(race, entrant.user.full_name)
    assert color is None
    assert text == "--:--:--.-"
    timer.use_podium_colors = True
    color, text = timer.get_timer_text(race, entrant.user.full_name)
    assert color == timer.cancel_dq_color
Esempio n. 11
0
def test_timer_midrace_w_user_not_in_race(random_users):
    started_at = (datetime.now(timezone.utc) -
                  timedelta(hours=1, minutes=42, seconds=42.0))
    race = get_test_race(version=17,
                         entrants=get_test_entrants(random_users),
                         started_at=started_at)
    timer = get_test_timer()
    color, text = timer.get_timer_text(race, "user_not_in_race#6969")
    assert color is None
    assert text == "1:42:42.0"
    timer.use_podium_colors = True
    color, text = timer.get_timer_text(race, "user_not_in_race#6969")
    assert color == timer.racing_color
Esempio n. 12
0
def test_timer_race_cancelled(random_users):
    race = get_test_race(status_value="cancelled",
                         entrants=get_test_entrants(random_users),
                         cancelled_at=datetime.now(timezone.utc) +
                         timedelta(minutes=20))
    timer = get_test_timer()
    color, text = timer.get_timer_text(race, "")
    assert color is None
    assert text == "--:--:--.-"
    timer.use_podium_colors = True
    color, text = timer.get_timer_text(race, "")
    # currently, the timer is always red for canceled or dq races
    assert color is timer.cancel_dq_color
Esempio n. 13
0
def test_timer_counting_down(random_users):
    timer = get_test_timer()
    race = get_test_race(status_value="pending",
                         version=13,
                         started_at=time_ago(seconds=-5.01),
                         start_delay=timedelta(seconds=15.0),
                         entrants=get_test_entrants(random_users))
    color, text = timer.get_timer_text(race, "")
    assert color is None
    assert text == "-0:00:05.0"

    timer.use_podium_colors = True
    color, text = timer.get_timer_text(race, "")
    assert color is timer.pre_color
Esempio n. 14
0
def test_timer_midrace_no_entrant(random_users):
    timer = get_test_timer()
    race = get_test_race(status_value="in_progress",
                         version=15,
                         entrants_count=2,
                         started_at=datetime.now(timezone.utc) -
                         timedelta(hours=1, minutes=20),
                         entrants=get_test_entrants(random_users))
    color, text = timer.get_timer_text(race, "")
    assert color is None
    # hope this always runs in less than 0.1 seconds XD
    assert text == "1:20:00.0"
    timer.use_podium_colors = True
    color, text = timer.get_timer_text(race, "")
    assert color is timer.racing_color
Esempio n. 15
0
def test_timer_prerace(random_users):
    timer = get_test_timer()
    race = get_test_race(status_value="open",
                         version=12,
                         started_at=None,
                         start_delay=timedelta(seconds=15, microseconds=1),
                         entrants=get_test_entrants(random_users))
    color, text = timer.get_timer_text(race, "")
    assert color is None
    assert text == "-0:00:15.0"

    timer.use_podium_colors = True
    color, text = timer.get_timer_text(race, "")
    assert color is timer.pre_color
    assert text == "-0:00:15.0"
Esempio n. 16
0
def test_timer_midrace_w_entrant(random_users):
    entrant = get_test_entrant(next(random_users),
                               status_value="finished",
                               finished_at=datetime.now(timezone.utc),
                               finish_time=timedelta(hours=1,
                                                     minutes=42,
                                                     seconds=6.9))
    entrants = get_test_entrants(random_users, entrant)
    race = get_test_race(version=16, entrants=entrants)
    timer = get_test_timer()
    color, text = timer.get_timer_text(race, entrant.user.full_name)
    assert color is None
    assert text == "1:42:06.9"
    timer.use_podium_colors = True
    color, text = timer.get_timer_text(race, entrant.user.full_name)
    assert color == timer.racing_color
Esempio n. 17
0
def test_user_finished_other(random_users):
    entrant = get_test_entrant(next(random_users),
                               status_value="finished",
                               finished_at=datetime.now(timezone.utc),
                               place=5,
                               finish_time=timedelta(hours=1,
                                                     minutes=9,
                                                     seconds=42,
                                                     microseconds=1))
    entrants = get_test_entrants(random_users, entrant)
    race = get_test_race(started_at=datetime.now(timezone.utc) -
                         entrant.finish_time,
                         entrants_count=5,
                         entrants=entrants)
    timer = get_test_timer()
    color, text = timer.get_timer_text(race, entrant.user.full_name)
    assert color is None
    assert text == "1:09:42.0"
    timer.use_podium_colors = True
    color, text = timer.get_timer_text(race, entrant.user.full_name)
    assert color == timer.finished_color
Esempio n. 18
0
def test_coop_no_one_finished(random_users):
    entrant = get_test_entrant(next(random_users), status_value="in_progress")
    partner = get_test_entrant(next(random_users), status_value="in_progress")
    opponent1 = get_test_entrant(next(random_users),
                                 status_value="in_progress")
    opponent2 = get_test_entrant(
        next(random_users),
        status_value="in_progress",
    )

    race = get_test_race(entrants=[entrant, partner, opponent1, opponent2],
                         opened_by=next(random_users),
                         started_at=time_ago(hours=1))
    coop = Coop()
    coop.enabled = True
    coop.partner = partner.user.full_name
    coop.opponent1 = opponent1.user.full_name
    coop.opponent2 = opponent2.user.full_name
    coop.update_coop_text(race, entrant.user.full_name)
    assert coop.opponent_time_text == " "
    assert coop.our_time_text == " "
    assert coop.our_time_color == coop.still_racing_color
    assert coop.opponent_time_color == coop.still_racing_color