Issues (28)

tests/test_qualifier.py (3 issues)

1
from datetime import timedelta
2
from gadgets.qualifier import Qualifier
3
from users_for_testing import get_test_entrant, get_test_entrants
4
from races_for_testing import get_test_race, time_ago
5
6
7
def get_test_qualifier():
8
    qualifier = Qualifier()
9
    qualifier.enabled = True
10
    qualifier.qualifier_cutoff = 3
11
    qualifier.par_source = "par source"
12
    qualifier.score_source = "score source"
13
    return qualifier
14
15
16
def test_no_one_finished(random_users):
17
    entrant = get_test_entrant(next(random_users), status_value="in_progress")
18
    entrants = [entrant]
19
    for i in range(0, 20):
20
        entrants.append(get_test_entrant(next(random_users)))
21
    race = get_test_race(entrants=entrants)
22
    qualifier = get_test_qualifier()
23
    qualifier.update_qualifier_text(race, entrant.user.full_name)
24
    assert qualifier.entrant_score == " "
25
    assert qualifier.par_text == " "
26
27
28
def test_some_finished(random_users):
29
    entrant = get_test_entrant(next(random_users), status_value="in_progress")
30
    first_place = get_test_entrant(
31
        next(random_users), status_value="finished",
32
        finished_at=time_ago(minutes=20),
33
        finish_time=timedelta(hours=1, minutes=30, microseconds=1), place=1,
34
    )
35
    second_place = get_test_entrant(
36
        next(random_users), status_value="finished",
37
        finished_at=time_ago(minutes=15),
38
        finish_time=timedelta(hours=1, minutes=35, microseconds=1), place=2,
39
    )
40
    entrants = (
41
        get_test_entrants(random_users, first_place, second_place)
42
    )
43
    race = get_test_race(entrants=entrants)
44
    qualifier = get_test_qualifier()
45
    qualifier.update_qualifier_text(race, entrant.user.full_name)
46
    assert qualifier.entrant_score == " "
47
    assert qualifier.par_text == " "
48
49
50
def test_cutoff_finished(random_users):
51
    entrant = get_test_entrant(next(random_users), status_value="in_progress")
52
    first_place = get_test_entrant(
53
        next(random_users), status_value="finished",
54
        finished_at=time_ago(minutes=20),
55
        finish_time=timedelta(hours=1, minutes=30, microseconds=1), place=1,
56
    )
57
    second_place = get_test_entrant(
58
        next(random_users), status_value="finished",
59
        finished_at=time_ago(minutes=15),
60
        finish_time=timedelta(hours=1, minutes=35, microseconds=1), place=2,
61
    )
62
    third_place = get_test_entrant(
63
        next(random_users), status_value="finished",
64
        finished_at=time_ago(minutes=10),
65
        finish_time=timedelta(hours=1, minutes=40, microseconds=1), place=3
66
    )
67
    entrants = get_test_entrants(
68
        random_users, first_place, second_place, third_place, entrant)
69
    race = get_test_race(entrants=entrants)
70
    qualifier = get_test_qualifier()
71
    qualifier.update_qualifier_text(race, entrant.user.full_name)
72
    assert qualifier.entrant_score == " "
73
    assert qualifier.par_text == "1:35:00.0"
74
75
76
def test_cutoff_and_entrant_finished(random_users):
77
    entrant = get_test_entrant(
78
        next(random_users), status_value="finished",
79
        finished_at=time_ago(minutes=5),
80
        finish_time=timedelta(hours=1, minutes=45, microseconds=1)
81
    )
82
    first_place = get_test_entrant(
83
        next(random_users), status_value="finished",
84
        finished_at=time_ago(minutes=20),
85
        finish_time=timedelta(hours=1, minutes=30, microseconds=1), place=1
86
    )
87
    second_place = get_test_entrant(
88
        next(random_users), status_value="finished",
89
        finished_at=time_ago(minutes=15),
90
        finish_time=timedelta(hours=1, minutes=35, microseconds=1), place=2
91
    )
92
    third_place = get_test_entrant(
93
        next(random_users), status_value="finished",
94
        finished_at=time_ago(minutes=10),
95
        finish_time=timedelta(hours=1, minutes=40, microseconds=1), place=3,
96
    )
97
    entrants = get_test_entrants(
98
        random_users, first_place, second_place, third_place, entrant)
99
    race = get_test_race(entrants=entrants)
100
    qualifier = get_test_qualifier()
101
    qualifier.update_qualifier_text(race, entrant.user.full_name)
102
    # par is 95 minutes, entrant's time is 105 minutes. 2-(105/95) ~= 0.89
103
    assert qualifier.entrant_score == "0.89"
104
    assert qualifier.par_text == "1:35:00.0"
105
106
107 View Code Duplication
def test_cutoff_and_entrant_finished_in_top(random_users):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
108
    entrant = get_test_entrant(
109
        next(random_users), status_value="finished",
110
        finished_at=time_ago(minutes=15),
111
        finish_time=timedelta(hours=1, minutes=35, microseconds=1), place=2
112
    )
113
    first_place = get_test_entrant(
114
        next(random_users), status_value="finished",
115
        finished_at=time_ago(minutes=20),
116
        finish_time=timedelta(hours=1, minutes=30, microseconds=1), place=1,
117
    )
118
    third_place = get_test_entrant(
119
        next(random_users), status_value="finished",
120
        finished_at=time_ago(minutes=10),
121
        finish_time=timedelta(hours=1, minutes=40, microseconds=1), place=3,
122
    )
123
    entrants = get_test_entrants(
124
        random_users, first_place, third_place, entrant)
125
    race = get_test_race(entrants=entrants)
126
    qualifier = get_test_qualifier()
127
    qualifier.update_qualifier_text(race, entrant.user.full_name)
128
    # par is 95 minutes, entrant's time is 95 minutes. 2-(95/95) = 1.00
129
    assert qualifier.entrant_score == "1.00"
130
    assert qualifier.par_text == "1:35:00.0"
131
132
133 View Code Duplication
def test_cutoff_and_entrant_finished_in_first(random_users):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
134
    entrant = get_test_entrant(
135
        next(random_users), status_value="finished",
136
        finished_at=time_ago(minutes=20),
137
        finish_time=timedelta(hours=1, minutes=30, microseconds=1), place=2
138
    )
139
    second_place = get_test_entrant(
140
        next(random_users), status_value="finished",
141
        finished_at=time_ago(minutes=15),
142
        finish_time=timedelta(hours=1, minutes=35, microseconds=1), place=1
143
    )
144
    third_place = get_test_entrant(
145
        next(random_users), status_value="finished",
146
        finished_at=time_ago(minutes=10),
147
        finish_time=timedelta(hours=1, minutes=40, microseconds=1), place=3
148
    )
149
    entrants = get_test_entrants(
150
        random_users, entrant, second_place, third_place)
151
    race = get_test_race(entrants=entrants)
152
    qualifier = get_test_qualifier()
153
    qualifier.update_qualifier_text(race, entrant.user.full_name)
154
    # par is 95 minutes, entrant's time is 90 minutes. 2-(90/95) ~= 1.05
155
    assert qualifier.entrant_score == "1.05"
156
    assert qualifier.par_text == "1:35:00.0"
157
158
159 View Code Duplication
def test_cutoff_and_entrant_finished_waay_ahead(random_users):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
160
    entrant = get_test_entrant(
161
        next(random_users), status_value="finished",
162
        finished_at=time_ago(minutes=20),
163
        finish_time=timedelta(hours=1, microseconds=1), place=2
164
    )
165
    second_place = get_test_entrant(
166
        next(random_users), status_value="finished",
167
        finished_at=time_ago(minutes=15),
168
        finish_time=timedelta(hours=1, minutes=35, microseconds=1), place=1
169
    )
170
    third_place = get_test_entrant(
171
        next(random_users), status_value="finished",
172
        finished_at=time_ago(minutes=10),
173
        finish_time=timedelta(hours=1, minutes=40, microseconds=1), place=3
174
    )
175
    entrants = get_test_entrants(
176
        random_users, entrant, second_place, third_place)
177
    race = get_test_race(entrants=entrants)
178
    qualifier = get_test_qualifier()
179
    qualifier.update_qualifier_text(race, entrant.user.full_name)
180
    # par is 95 minutes, entrant's time is 60 minutes. 2-(60/85) ~= 1.29
181
    # but max score is 1.05
182
    assert qualifier.entrant_score == "1.05"
183
    assert qualifier.par_text == "1:25:00.0"
184