Issues (28)

tests/test_coop.py (10 issues)

1
from datetime import datetime, timedelta, timezone
2
3
from gadgets.coop import Coop
4
5
from races_for_testing import get_test_race, time_ago
6
from users_for_testing import get_test_entrant
7
8
9
def test_random_users(random_users):
10
    previous_user = next(random_users)
11
    for user in random_users:
12
        assert previous_user.id != user.id
13
14
15
def test_coop_no_one_finished(random_users):
16
    entrant = get_test_entrant(next(random_users), status_value="in_progress")
17
    partner = get_test_entrant(next(random_users), status_value="in_progress")
18
    opponent1 = get_test_entrant(
19
        next(random_users), status_value="in_progress")
20
    opponent2 = get_test_entrant(
21
        next(random_users), status_value="in_progress",)
22
23
    race = get_test_race(
24
        entrants=[
25
            entrant,
26
            partner,
27
            opponent1,
28
            opponent2
29
        ],
30
        opened_by=next(random_users),
31
        started_at=time_ago(hours=1)
32
    )
33
    coop = Coop()
34
    coop.enabled = True
35
    coop.partner = partner.user.full_name
36
    coop.opponent1 = opponent1.user.full_name
37
    coop.opponent2 = opponent2.user.full_name
38
    coop.update_coop_text(race, entrant.user.full_name)
39
    assert coop.opponent_time_text == " "
40
    assert coop.our_time_text == " "
41
    assert coop.our_time_color == coop.still_racing_color
42
    assert coop.opponent_time_color == coop.still_racing_color
43
44
45 View Code Duplication
def test_only_entrant_finished(random_users):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
46
    entrant = get_test_entrant(
47
        next(random_users),
48
        status_value="finished", finished_at=datetime.now(timezone.utc),
49
        finish_time=timedelta(hours=1, microseconds=1)
50
    )
51
    partner = get_test_entrant(next(random_users), status_value="in_progress")
52
    opponent1 = get_test_entrant(
53
        next(random_users), status_value="in_progress")
54
    opponent2 = get_test_entrant(
55
        next(random_users), status_value="in_progress")
56
57
    race = get_test_race(
58
        entrants=[entrant, partner, opponent1, opponent2],
59
        opened_by=next(random_users),
60
        started_at=time_ago(hours=1, minutes=15)
61
    )
62
    coop = Coop()
63
    coop.enabled = True
64
    coop.partner = partner.user.full_name
65
    coop.opponent1 = opponent1.user.full_name
66
    coop.opponent2 = opponent2.user.full_name
67
    coop.update_coop_text(race, entrant.user.full_name)
68
    assert coop.opponent_time_text == " "
69
    assert coop.our_time_text == " "
70
    assert coop.our_time_color == coop.still_racing_color
71
    assert coop.opponent_time_color == coop.still_racing_color
72
73
74 View Code Duplication
def test_only_partner_finished(random_users):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
75
    entrant = get_test_entrant(next(random_users), status_value="in_progress")
76
    partner = get_test_entrant(
77
        next(random_users),
78
        status_value="finished", finished_at=datetime.now(timezone.utc),
79
        finish_time=timedelta(hours=1, microseconds=1)
80
    )
81
    opponent1 = get_test_entrant(
82
        next(random_users), status_value="in_progress",
83
    )
84
    opponent2 = get_test_entrant(
85
        next(random_users), status_value="in_progress"
86
    )
87
88
    race = get_test_race(
89
        entrants=[entrant, partner, opponent1, opponent2],
90
        opened_by=next(random_users),
91
        started_at=time_ago(hours=1, minutes=15)
92
    )
93
    coop = Coop()
94
    coop.enabled = True
95
    coop.partner = partner.user.full_name
96
    coop.opponent1 = opponent1.user.full_name
97
    coop.opponent2 = opponent2.user.full_name
98
    coop.update_coop_text(race, entrant.user.full_name)
99
    assert coop.opponent_time_text == " "
100
    assert coop.our_time_text == " "
101
    assert coop.our_time_color == coop.still_racing_color
102
    assert coop.opponent_time_color == coop.still_racing_color
103
104
105 View Code Duplication
def test_only_opponent1_finished(random_users):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
106
    entrant = get_test_entrant(next(random_users), status_value="in_progress")
107
    partner = get_test_entrant(next(random_users), status_value="in_progress")
108
    opponent1 = get_test_entrant(
109
        next(random_users),
110
        status_value="finished", finished_at=datetime.now(timezone.utc),
111
        finish_time=timedelta(hours=1, microseconds=1)
112
    )
113
    opponent2 = get_test_entrant(
114
        next(random_users), status_value="in_progress"
115
    )
116
117
    race = get_test_race(
118
        entrants=[entrant, partner, opponent1, opponent2],
119
        opened_by=next(random_users),
120
        started_at=time_ago(hours=1, minutes=15)
121
    )
122
    coop = Coop()
123
    coop.enabled = True
124
    coop.partner = partner.user.full_name
125
    coop.opponent1 = opponent1.user.full_name
126
    coop.opponent2 = opponent2.user.full_name
127
    coop.update_coop_text(race, entrant.user.full_name)
128
    assert coop.opponent_time_text == " "
129
    assert coop.our_time_text == " "
130
    assert coop.our_time_color == coop.still_racing_color
131
    assert coop.opponent_time_color == coop.still_racing_color
132
133
134 View Code Duplication
def test_only_opponent2_finished(random_users):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
135
    entrant = get_test_entrant(next(random_users), status_value="in_progress")
136
    partner = get_test_entrant(next(random_users), status_value="in_progress")
137
    opponent1 = get_test_entrant(
138
        next(random_users), status_value="in_progress"
139
    )
140
    opponent2 = get_test_entrant(
141
        next(random_users), status_value="finished",
142
        finished_at=datetime.now(timezone.utc),
143
        finish_time=timedelta(hours=1, microseconds=1),
144
    )
145
146
    race = get_test_race(
147
        entrants=[entrant, partner, opponent1, opponent2],
148
        opened_by=next(random_users),
149
        started_at=time_ago(hours=1, minutes=15)
150
    )
151
    coop = Coop()
152
    coop.enabled = True
153
    coop.partner = partner.user.full_name
154
    coop.opponent1 = opponent1.user.full_name
155
    coop.opponent2 = opponent2.user.full_name
156
    coop.update_coop_text(race, entrant.user.full_name)
157
    assert coop.opponent_time_text == " "
158
    assert coop.our_time_text == " "
159
    assert coop.our_time_color == coop.still_racing_color
160
    assert coop.opponent_time_color == coop.still_racing_color
161
162
163 View Code Duplication
def test_entrant_and_partner_finished(random_users):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
164
    entrant = get_test_entrant(
165
        next(random_users),
166
        status_value="finished", finished_at=datetime.now(timezone.utc),
167
        finish_time=timedelta(hours=1, microseconds=1)
168
    )
169
    partner = get_test_entrant(
170
        next(random_users), status_value="finished",
171
        finished_at=datetime.now(timezone.utc),
172
        finish_time=timedelta(hours=2, microseconds=1),
173
    )
174
    opponent1 = get_test_entrant(
175
        next(random_users), status_value="in_progress"
176
    )
177
    opponent2 = get_test_entrant(
178
        next(random_users), status_value="in_progress",
179
    )
180
181
    race = get_test_race(
182
        entrants=[entrant, partner, opponent1, opponent2],
183
        opened_by=next(random_users),
184
        started_at=time_ago(hours=2, minutes=15)
185
    )
186
    coop = Coop()
187
    coop.enabled = True
188
    coop.partner = partner.user.full_name
189
    coop.opponent1 = opponent1.user.full_name
190
    coop.opponent2 = opponent2.user.full_name
191
    coop.update_coop_text(race, entrant.user.full_name)
192
    assert coop.opponent_time_text == "2:15:00.0"
193
    assert coop.our_time_text == "1:30:00.0"
194
    assert coop.our_time_color == coop.winner_color
195
    assert coop.opponent_time_color == coop.loser_color
196
197
198 View Code Duplication
def test_opponents_finished(random_users):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
199
    entrant = get_test_entrant(next(random_users), status_value="in_progress")
200
    partner = get_test_entrant(next(random_users), status_value="in_progress")
201
    opponent1 = get_test_entrant(
202
        next(random_users),
203
        status_value="finished", finished_at=datetime.now(timezone.utc),
204
        finish_time=timedelta(hours=1, microseconds=1),
205
    )
206
    opponent2 = get_test_entrant(
207
        next(random_users),
208
        status_value="finished", finished_at=datetime.now(timezone.utc),
209
        finish_time=timedelta(hours=2, microseconds=1)
210
    )
211
212
    race = get_test_race(
213
        entrants=[entrant, partner, opponent1, opponent2],
214
        opened_by=next(random_users),
215
        started_at=time_ago(hours=2, minutes=15)
216
    )
217
    coop = Coop()
218
    coop.enabled = True
219
    coop.partner = partner.user.full_name
220
    coop.opponent1 = opponent1.user.full_name
221
    coop.opponent2 = opponent2.user.full_name
222
    coop.update_coop_text(race, entrant.user.full_name)
223
    assert coop.opponent_time_text == "1:30:00.0"
224
    assert coop.our_time_text == "2:15:00.0"
225
    assert coop.our_time_color == coop.loser_color
226
    assert coop.opponent_time_color == coop.winner_color
227
228
229 View Code Duplication
def test_entrant_and_opponent1_finished(random_users):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
230
    entrant = get_test_entrant(
231
        next(random_users),
232
        status_value="finished", finished_at=datetime.now(timezone.utc),
233
        finish_time=timedelta(hours=2, microseconds=1)
234
    )
235
    partner = get_test_entrant(next(random_users), status_value="in_progress")
236
    opponent1 = get_test_entrant(
237
        next(random_users),
238
        status_value="finished", finished_at=datetime.now(timezone.utc),
239
        finish_time=timedelta(hours=1, microseconds=1)
240
    )
241
    opponent2 = get_test_entrant(
242
        next(random_users), status_value="in_progress",
243
    )
244
245
    race = get_test_race(
246
        entrants=[entrant, partner, opponent1, opponent2],
247
        opened_by=next(random_users),
248
        started_at=time_ago(hours=2, minutes=15)
249
    )
250
    coop = Coop()
251
    coop.enabled = True
252
    coop.partner = partner.user.full_name
253
    coop.opponent1 = opponent1.user.full_name
254
    coop.opponent2 = opponent2.user.full_name
255
    coop.update_coop_text(race, entrant.user.full_name)
256
    assert coop.opponent_time_text == " "
257
    assert coop.our_time_text == " "
258
    assert coop.our_time_color == coop.still_racing_color
259
    assert coop.opponent_time_color == coop.still_racing_color
260
261
262 View Code Duplication
def test_partner_and_opponent1_finished(random_users):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
263
    entrant = get_test_entrant(next(random_users), status_value="in_progress")
264
    partner = get_test_entrant(
265
        next(random_users),
266
        status_value="finished", finished_at=datetime.now(timezone.utc),
267
        finish_time=timedelta(hours=2, microseconds=1),
268
    )
269
    opponent1 = get_test_entrant(
270
        next(random_users),
271
        status_value="finished", finished_at=datetime.now(timezone.utc),
272
        finish_time=timedelta(hours=1, microseconds=1),
273
    )
274
    opponent2 = get_test_entrant(
275
        next(random_users), status_value="in_progress",
276
    )
277
278
    race = get_test_race(
279
        entrants=[entrant, partner, opponent1, opponent2],
280
        opened_by=next(random_users),
281
        started_at=time_ago(hours=2, minutes=15)
282
    )
283
    coop = Coop()
284
    coop.enabled = True
285
    coop.partner = partner.user.full_name
286
    coop.opponent1 = opponent1.user.full_name
287
    coop.opponent2 = opponent2.user.full_name
288
    coop.update_coop_text(race, entrant.user.full_name)
289
    assert coop.opponent_time_text == " "
290
    assert coop.our_time_text == " "
291
    assert coop.our_time_color == coop.still_racing_color
292
    assert coop.opponent_time_color == coop.still_racing_color
293
294
295
def test_entrant_and_partner_and_opponent1_finished_race_ongoing(random_users):
296
    entrant = get_test_entrant(
297
        next(random_users),
298
        status_value="finished", finished_at=datetime.now(timezone.utc),
299
        finish_time=timedelta(hours=2, microseconds=1)
300
    )
301
    partner = get_test_entrant(
302
        next(random_users),
303
        status_value="finished", finished_at=datetime.now(timezone.utc),
304
        finish_time=timedelta(hours=2, microseconds=1)
305
    )
306
    opponent1 = get_test_entrant(
307
        next(random_users),
308
        status_value="finished", finished_at=datetime.now(timezone.utc),
309
        finish_time=timedelta(hours=1, microseconds=1)
310
    )
311
    opponent2 = get_test_entrant(
312
        next(random_users), status_value="in_progress"
313
    )
314
315
    race = get_test_race(
316
        entrants=[entrant, partner, opponent1, opponent2],
317
        opened_by=next(random_users),
318
        started_at=time_ago(hours=2, minutes=12)
319
    )
320
    coop = Coop()
321
    coop.enabled = True
322
    coop.partner = partner.user.full_name
323
    coop.opponent1 = opponent1.user.full_name
324
    coop.opponent2 = opponent2.user.full_name
325
    coop.update_coop_text(race, entrant.user.full_name)
326
    assert coop.opponent_time_text == "0:47:59.9"
327
    assert coop.our_time_text == "2:00:00.0"
328
    assert coop.our_time_color == coop.still_racing_color
329
    assert coop.opponent_time_color == coop.still_racing_color
330
    race.started_at = time_ago(hours=2, minutes=52)
331
    coop.update_coop_text(race, entrant.user.full_name)
332
    assert coop.opponent_time_text == "0:07:59.9"
333
334
335
def test_entrant_and_partner_and_opponent1_finished_race_over(random_users):
336
    entrant = get_test_entrant(
337
        next(random_users),
338
        status_value="finished", finished_at=datetime.now(timezone.utc),
339
        finish_time=timedelta(hours=1, microseconds=1)
340
    )
341
    partner = get_test_entrant(
342
        next(random_users),
343
        status_value="finished", finished_at=datetime.now(timezone.utc),
344
        finish_time=timedelta(hours=2, microseconds=1),
345
    )
346
    opponent1 = get_test_entrant(
347
        next(random_users),
348
        status_value="finished", finished_at=datetime.now(timezone.utc),
349
        finish_time=timedelta(hours=3, microseconds=2),
350
    )
351
    opponent2 = get_test_entrant(
352
        next(random_users), status_value="in_progress"
353
    )
354
355
    race = get_test_race(
356
        entrants=[entrant, partner, opponent1, opponent2],
357
        opened_by=next(random_users),
358
        started_at=time_ago(hours=3, minutes=4)
359
    )
360
    coop = Coop()
361
    coop.enabled = True
362
    coop.partner = partner.user.full_name
363
    coop.opponent1 = opponent1.user.full_name
364
    coop.opponent2 = opponent2.user.full_name
365
    coop.update_coop_text(race, entrant.user.full_name)
366
    assert (
367
        coop.opponent_time_text == "3:02:00.0"
368
    )
369
    assert coop.our_time_text == "1:30:00.0"
370
371
372 View Code Duplication
def test_opponents_and_entrant_finished_race_ongoing(random_users):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
373
    entrant = get_test_entrant(
374
        next(random_users),
375
        status_value="finished", finished_at=datetime.now(timezone.utc),
376
        finish_time=timedelta(hours=1, microseconds=1)
377
    )
378
    partner = get_test_entrant(
379
        next(random_users), status_value="in_progress"
380
    )
381
    opponent1 = get_test_entrant(
382
        next(random_users),
383
        status_value="finished", finished_at=datetime.now(timezone.utc),
384
        finish_time=timedelta(hours=2, microseconds=2),
385
    )
386
    opponent2 = get_test_entrant(
387
        next(random_users),
388
        status_value="finished", finished_at=datetime.now(timezone.utc),
389
        finish_time=timedelta(hours=2, microseconds=1),
390
    )
391
392
    race = get_test_race(
393
        entrants=[entrant, partner, opponent1, opponent2],
394
        started_at=time_ago(hours=2, microseconds=3)
395
    )
396
    coop = Coop()
397
    coop.enabled = True
398
    coop.partner = partner.user.full_name
399
    coop.opponent1 = opponent1.user.full_name
400
    coop.opponent2 = opponent2.user.full_name
401
    coop.update_coop_text(race, entrant.user.full_name)
402
    assert coop.opponent_time_text == "2:00:00.0"
403
    assert coop.our_time_text == "0:59:59.9"
404
    race.started_at = time_ago(hours=2, minutes=30, microseconds=3)
405
    coop.update_coop_text(race, entrant.user.full_name)
406
    assert coop.opponent_time_text == "2:00:00.0"
407
    assert coop.our_time_text == "0:29:59.9"
408
409
410 View Code Duplication
def test_opponents_and_partner_finished_race_over(random_users):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
411
    entrant = get_test_entrant(next(random_users), status_value="in_progress")
412
    partner = get_test_entrant(
413
        next(random_users),
414
        status_value="finished", finished_at=datetime.now(timezone.utc),
415
        finish_time=timedelta(hours=3, microseconds=5),
416
    )
417
    opponent1 = get_test_entrant(
418
        next(random_users),
419
        status_value="finished", finished_at=datetime.now(timezone.utc),
420
        finish_time=timedelta(hours=1, microseconds=1),
421
    )
422
    opponent2 = get_test_entrant(
423
        next(random_users),
424
        status_value="finished", finished_at=datetime.now(timezone.utc),
425
        finish_time=timedelta(hours=2, microseconds=1)
426
    )
427
428
    race = get_test_race(
429
        entrants=[entrant, partner, opponent1, opponent2],
430
        opened_by=next(random_users),
431
        started_at=time_ago(hours=3, minutes=1)
432
    )
433
    coop = Coop()
434
    coop.enabled = True
435
    coop.partner = partner.user.full_name
436
    coop.opponent1 = opponent1.user.full_name
437
    coop.opponent2 = opponent2.user.full_name
438
    coop.update_coop_text(race, entrant.user.full_name)
439
440
    assert coop.opponent_time_text == "1:30:00.0"
441
    assert coop.opponent_time_color == coop.winner_color
442
    assert coop.our_time_text == "3:00:30.0"
443
    assert coop.our_time_color == coop.loser_color
444
445
446
def test_everyone_finished_we_won(random_users):
447
    entrant = get_test_entrant(
448
        next(random_users),
449
        status_value="finished", finished_at=datetime.now(timezone.utc),
450
        finish_time=timedelta(hours=1, microseconds=1)
451
    )
452
    partner = get_test_entrant(
453
        next(random_users),
454
        status_value="finished", finished_at=datetime.now(timezone.utc),
455
        finish_time=timedelta(hours=2, microseconds=1)
456
    )
457
    opponent1 = get_test_entrant(
458
        next(random_users),
459
        status_value="finished", finished_at=datetime.now(timezone.utc),
460
        finish_time=timedelta(hours=2, microseconds=1)
461
    )
462
    opponent2 = get_test_entrant(
463
        next(random_users),
464
        status_value="finished", finished_at=datetime.now(timezone.utc),
465
        finish_time=timedelta(hours=2, microseconds=1)
466
    )
467
468
    race = get_test_race(
469
        entrants=[entrant, partner, opponent1, opponent2],
470
        opened_by=next(random_users),
471
        started_at=time_ago(hours=2, minutes=1)
472
    )
473
    coop = Coop()
474
    coop.enabled = True
475
    coop.partner = partner.user.full_name
476
    coop.opponent1 = opponent1.user.full_name
477
    coop.opponent2 = opponent2.user.full_name
478
    coop.update_coop_text(race, entrant.user.full_name)
479
    assert coop.opponent_time_text == "2:00:00.0"
480
    assert coop.opponent_time_color == coop.loser_color
481
    assert coop.our_time_text == "1:30:00.0"
482
    assert coop.our_time_color == coop.winner_color
483
484
485
def test_everyone_finished_opponents_won(random_users):
486
    entrant = get_test_entrant(
487
        next(random_users),
488
        status_value="finished", finished_at=datetime.now(timezone.utc),
489
        finish_time=timedelta(hours=2, microseconds=1)
490
    )
491
    partner = get_test_entrant(
492
        next(random_users),
493
        status_value="finished", finished_at=datetime.now(timezone.utc),
494
        finish_time=timedelta(hours=2, microseconds=1)
495
    )
496
    opponent1 = get_test_entrant(
497
        next(random_users),
498
        status_value="finished", finished_at=datetime.now(timezone.utc),
499
        finish_time=timedelta(hours=1, microseconds=1)
500
    )
501
    opponent2 = get_test_entrant(
502
        next(random_users),
503
        status_value="finished", finished_at=datetime.now(timezone.utc),
504
        finish_time=timedelta(hours=2, microseconds=1)
505
    )
506
507
    race = get_test_race(
508
        entrants=[entrant, partner, opponent1, opponent2],
509
        opened_by=next(random_users),
510
        started_at=time_ago(hours=2, minutes=1)
511
    )
512
    coop = Coop()
513
    coop.enabled = True
514
    coop.partner = partner.user.full_name
515
    coop.opponent1 = opponent1.user.full_name
516
    coop.opponent2 = opponent2.user.full_name
517
    coop.update_coop_text(race, entrant.user.full_name)
518
    assert coop.opponent_time_text == "1:30:00.0"
519
    assert coop.opponent_time_color == coop.winner_color
520
    assert coop.our_time_text == "2:00:00.0"
521
    assert coop.our_time_color == coop.loser_color
522