| 1 |  |  | import json | 
            
                                                                                                            
                            
            
                                    
            
            
                | 2 |  |  | from datetime import datetime, timedelta, timezone | 
            
                                                                                                            
                            
            
                                    
            
            
                | 3 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 4 |  |  | # ignore warning for these imports, they're included so i can | 
            
                                                                                                            
                            
            
                                    
            
            
                | 5 |  |  | # keep track of modules which don't have tests written yet | 
            
                                                                                                            
                            
            
                                    
            
            
                | 6 |  |  | from models.category import Category  # noqa: F401 | 
            
                                                                                                            
                            
            
                                    
            
            
                | 7 |  |  | from models.category_past_races import CategoryPastRaces  # noqa: F401 | 
            
                                                                                                            
                            
            
                                    
            
            
                | 8 |  |  | from models.leaderboards import Leaderboard, Leaderboards  # noqa: F401 | 
            
                                                                                                            
                            
            
                                    
            
            
                | 9 |  |  | from models.race import Entrant, Goal, Race, RaceCategory, Status | 
            
                                                                                                            
                            
            
                                    
            
            
                | 10 |  |  | from models.user import Stats, User | 
            
                                                                                                            
                            
            
                                    
            
            
                | 11 |  |  | from models.user_past_races import UserPastRaces  # noqa: F401 | 
            
                                                                                                            
                            
            
                                    
            
            
                | 12 |  |  | from models.user_search import UserSearch  # noqa: F401 | 
            
                                                                                                            
                            
            
                                    
            
            
                | 13 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 14 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 15 |  |  | def test_race1(): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 16 |  |  |     with open('tests/data/race1.txt') as f: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 17 |  |  |         race = Race.from_dict(json.load(f)) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 18 |  |  |         assert race.name == "alttpr/lazy-hookshot-7357" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 19 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 20 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 21 |  |  | def test_finished_race(): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 22 |  |  |     with open('tests/data/finished_race.txt') as f: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 23 |  |  |         race = Race.from_dict(json.load(f)) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 24 |  |  |         expected_status = Status( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 25 |  |  |             value="finished", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 26 |  |  |             verbose_value="Finished", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 27 |  |  |             help_text="This race has been completed" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 28 |  |  |         ) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 29 |  |  |         expected_catogeroy = RaceCategory( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 30 |  |  |             name="A Link to the Past Randomizer", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 31 |  |  |             short_name="ALttPR", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 32 |  |  |             slug="alttpr", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 33 |  |  |             url="/alttpr", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 34 |  |  |             data_url="/alttpr/data", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 35 |  |  |             image="https://racetime.gg/media/alttpr.png" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 36 |  |  |         ) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 37 |  |  |         expected_goal = Goal( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 38 |  |  |             name="casual xkeys", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 39 |  |  |             custom=True, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 40 |  |  |         ) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 41 |  |  |         expected_entrants = expected_entrants_finished_race1() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 42 |  |  |         expected_race = Race( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 43 |  |  |             version=73, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 44 |  |  |             name="alttpr/dazzling-oldman-0937", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 45 |  |  |             url="/alttpr/dazzling-oldman-0937", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 46 |  |  |             data_url="/alttpr/dazzling-oldman-0937/data", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 47 |  |  |             websocket_url="/ws/race/dazzling-oldman-0937", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 48 |  |  |             websocket_bot_url="/ws/o/bot/dazzling-oldman-0937", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 49 |  |  |             websocket_oauth_url="/ws/o/race/dazzling-oldman-0937", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 50 |  |  |             info=( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 51 |  |  |                 "crosskeys - https://alttpr.com/h/QJG8VkrjvB - " | 
            
                                                                                                            
                            
            
                                    
            
            
                | 52 |  |  |                 "(Flute/Pendant/Magic Powder/Heart/Cape) - Quickswap Enabled" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 53 |  |  |             ), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 54 |  |  |             entrants_count=10, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 55 |  |  |             entrants_count_finished=9, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 56 |  |  |             entrants_count_inactive=1, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 57 |  |  |             status=expected_status, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 58 |  |  |             category=expected_catogeroy, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 59 |  |  |             goal=expected_goal, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 60 |  |  |             entrants=expected_entrants, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 61 |  |  |             opened_at=datetime( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 62 |  |  |                 year=2020, month=12, day=14, hour=3, minute=16, second=59, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 63 |  |  |                 microsecond=822000, tzinfo=timezone.utc), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 64 |  |  |             time_limit=timedelta(days=1) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 65 |  |  |         ) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 66 |  |  |         # assert expected_race == race | 
            
                                                                                                            
                            
            
                                    
            
            
                | 67 |  |  |         assert len(expected_race.entrants) == len(race.entrants) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 68 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 69 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 70 |  |  | def expected_entrants_finished_race1(): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 71 |  |  |     expected_user1 = User( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 72 |  |  |         id="kzM65aWX7do1y8q0", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 73 |  |  |         full_name="SEJay#5897", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 74 |  |  |         name="SEJay", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 75 |  |  |         discriminator="5897", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 76 |  |  |         url="/user/kzM65aWX7do1y8q0", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 77 |  |  |         avatar=( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 78 |  |  |             "https://racetime.gg/media/lukeacevedo_beer_videogames-01_1x.png" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 79 |  |  |         ), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 80 |  |  |         pronouns="he/him", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 81 |  |  |         flair="", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 82 |  |  |         twitch_name="sejay_28", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 83 |  |  |         twitch_display_name="SEJay_28", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 84 |  |  |         twitch_channel="https://www.twitch.tv/sejay_28", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 85 |  |  |         can_moderate=False, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 86 |  |  |     ) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 87 |  |  |     expected_status_finished = Status( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 88 |  |  |         value="done", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 89 |  |  |         verbose_value="Finished", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 90 |  |  |         help_text="This race has been completed" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 91 |  |  |     ) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 92 |  |  |     expected_entrants = [ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 93 |  |  |         Entrant( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 94 |  |  |             user=expected_user1, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 95 |  |  |             status=expected_status_finished, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 96 |  |  |             finish_time=timedelta(hours=2, minutes=34, seconds=23.909043), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 97 |  |  |             finished_at=datetime(2020, 12, 14, 6, 8, 45, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 98 |  |  |                                  820000, tzinfo=timezone.utc), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 99 |  |  |             place=1, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 100 |  |  |             place_ordinal="1st", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 101 |  |  |             score=None, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 102 |  |  |             score_change=None, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 103 |  |  |             comment="191", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 104 |  |  |             has_comment=True, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 105 |  |  |             stream_live=False, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 106 |  |  |             stream_override=False, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 107 |  |  |             actions=[] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 108 |  |  |         ), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 109 |  |  |         Entrant( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 110 |  |  |             user=expected_user1, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 111 |  |  |             status=expected_status_finished, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 112 |  |  |             finish_time=timedelta(hours=2, minutes=43, seconds=51.353469), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 113 |  |  |             finished_at=datetime(2020, 12, 14, 6, 18, 13, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 114 |  |  |                                  265000, tzinfo=timezone.utc), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 115 |  |  |             place=2, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 116 |  |  |             place_ordinal="2nd", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 117 |  |  |             score=None, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 118 |  |  |             score_change=None, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 119 |  |  |             comment="190 woof", | 
            
                                                                                                            
                            
            
                                    
            
            
                | 120 |  |  |             has_comment=True, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 121 |  |  |             stream_live=False, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 122 |  |  |             stream_override=False, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 123 |  |  |             actions=[] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 124 |  |  |         ), None, None, None, None, None, None, None, None | 
            
                                                                                                            
                            
            
                                    
            
            
                | 125 |  |  |     ] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 126 |  |  |     return expected_entrants | 
            
                                                                                                            
                            
            
                                    
            
            
                | 127 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 128 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 129 |  |  | def test_none_race(): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 130 |  |  |     assert None is None | 
            
                                                                                                            
                            
            
                                    
            
            
                | 131 |  |  |  | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 132 |  |  |  | 
            
                                                        
            
                                    
            
            
                | 133 |  |  | def test_user(): | 
            
                                                        
            
                                    
            
            
                | 134 |  |  |     with open('tests/data/user1.txt') as f: | 
            
                                                        
            
                                    
            
            
                | 135 |  |  |         user = User.from_dict(json.load(f)) | 
            
                                                        
            
                                    
            
            
                | 136 |  |  |         expected_stats = Stats( | 
            
                                                        
            
                                    
            
            
                | 137 |  |  |             joined=21, | 
            
                                                        
            
                                    
            
            
                | 138 |  |  |             first=3, | 
            
                                                        
            
                                    
            
            
                | 139 |  |  |             second=5, | 
            
                                                        
            
                                    
            
            
                | 140 |  |  |             third=0, | 
            
                                                        
            
                                    
            
            
                | 141 |  |  |             forfeits=4, | 
            
                                                        
            
                                    
            
            
                | 142 |  |  |             dqs=0 | 
            
                                                        
            
                                    
            
            
                | 143 |  |  |         ) | 
            
                                                        
            
                                    
            
            
                | 144 |  |  |         expected_user = User( | 
            
                                                        
            
                                    
            
            
                | 145 |  |  |             id="b52QE8oN53lywqX4", | 
            
                                                        
            
                                    
            
            
                | 146 |  |  |             full_name="oro#3531", | 
            
                                                        
            
                                    
            
            
                | 147 |  |  |             name="oro", | 
            
                                                        
            
                                    
            
            
                | 148 |  |  |             discriminator="3531", | 
            
                                                        
            
                                    
            
            
                | 149 |  |  |             url="/user/b52QE8oN53lywqX4", | 
            
                                                        
            
                                    
            
            
                | 150 |  |  |             avatar="https://racetime.gg/media/oro_icon_100x100.png", | 
            
                                                        
            
                                    
            
            
                | 151 |  |  |             pronouns="they/them", | 
            
                                                        
            
                                    
            
            
                | 152 |  |  |             flair="", | 
            
                                                        
            
                                    
            
            
                | 153 |  |  |             twitch_name="ssbmoro", | 
            
                                                        
            
                                    
            
            
                | 154 |  |  |             twitch_display_name="SsbmOro", | 
            
                                                        
            
                                    
            
            
                | 155 |  |  |             twitch_channel="https://www.twitch.tv/ssbmoro", | 
            
                                                        
            
                                    
            
            
                | 156 |  |  |             can_moderate=False, | 
            
                                                        
            
                                    
            
            
                | 157 |  |  |             stats=expected_stats | 
            
                                                        
            
                                    
            
            
                | 158 |  |  |         ) | 
            
                                                        
            
                                    
            
            
                | 159 |  |  |         assert user == expected_user | 
            
                                                        
            
                                    
            
            
                | 160 |  |  |  |