| 1 |  |  | import asyncio | 
            
                                                                                                            
                            
            
                                    
            
            
                | 2 |  |  | from asyncio.events import get_event_loop | 
            
                                                                                                            
                            
            
                                    
            
            
                | 3 |  |  | from datetime import datetime, timezone | 
            
                                                                                                            
                            
            
                                    
            
            
                | 4 |  |  | import pytest | 
            
                                                                                                            
                            
            
                                    
            
            
                | 5 |  |  | from unittest.mock import Mock | 
            
                                                                                                            
                            
            
                                    
            
            
                | 6 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 7 |  |  | from models.chat_message import ChatMessage | 
            
                                                                                                            
                            
            
                                    
            
            
                | 8 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 9 |  |  | from gadgets.media_player import MediaPlayer | 
            
                                                                                                            
                            
            
                                    
            
            
                | 10 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 11 |  |  | from races_for_testing import get_test_race | 
            
                                                                                                            
                            
            
                                    
            
            
                | 12 |  |  | from users_for_testing import get_test_entrant, get_test_entrants | 
            
                                                                                                            
                            
            
                                    
            
            
                | 13 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 14 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 15 |  |  | @pytest.mark.asyncio | 
            
                                                                                                            
                            
            
                                    
            
            
                | 16 |  |  | async def test_entrant_finished_first(random_users): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 17 |  |  |     event_loop = get_event_loop() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 18 |  |  |     event_loop.set_debug(True) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 19 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 20 |  |  |     play_media = Mock() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 21 |  |  |     media_player = MediaPlayer() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 22 |  |  |     media_file_path = "fake/path/test.mp3" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 23 |  |  |     media_player.play_media_callback = play_media | 
            
                                                                                                            
                            
            
                                    
            
            
                | 24 |  |  |     media_player.add_trigger( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 25 |  |  |         media_file_path, 0) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 26 |  |  |     media_player.monitoring_type = 0 | 
            
                                                                                                            
                            
            
                                    
            
            
                | 27 |  |  |     await asyncio.sleep(0.1) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 28 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 29 |  |  |     assert len(media_player.triggers) == 1 | 
            
                                                                                                            
                            
            
                                    
            
            
                | 30 |  |  |     play_media.assert_not_called() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 31 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 32 |  |  |     entrant = get_test_entrant( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 33 |  |  |         status_value="in_progress", user=next(random_users)) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 34 |  |  |     entrants = get_test_entrants(random_users, entrant) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 35 |  |  |     race = get_test_race(entrants=entrants) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 36 |  |  |     media_player.race_updated(race, entrant.user.full_name) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 37 |  |  |     await asyncio.sleep(0.1) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 38 |  |  |     play_media.assert_not_called() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 39 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 40 |  |  |     entrant = race.get_entrant_by_name(entrant.user.full_name) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 41 |  |  |     await asyncio.sleep(0.1) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 42 |  |  |     entrant.place = 1 | 
            
                                                                                                            
                            
            
                                    
            
            
                | 43 |  |  |     entrant.status.value = "finished" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 44 |  |  |     entrant.finish_time = datetime.now(timezone.utc) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 45 |  |  |     media_player.race_updated(race, entrant.user.full_name) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 46 |  |  |     await asyncio.sleep(0.1) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 47 |  |  |     play_media.assert_called_once_with( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 48 |  |  |         media_file_path, 0) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 49 |  |  |  | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 50 |  |  |  | 
            
                                                        
            
                                    
            
            
                | 51 |  |  | @pytest.mark.asyncio | 
            
                                                        
            
                                    
            
            
                | 52 |  |  | async def test_bot_chat_message(): | 
            
                                                        
            
                                    
            
            
                | 53 |  |  |     event_loop = get_event_loop() | 
            
                                                        
            
                                    
            
            
                | 54 |  |  |     event_loop.set_debug(True) | 
            
                                                        
            
                                    
            
            
                | 55 |  |  |     play_media = Mock() | 
            
                                                        
            
                                    
            
            
                | 56 |  |  |     media_player = MediaPlayer() | 
            
                                                        
            
                                    
            
            
                | 57 |  |  |     media_file_path = "fake/path/test.mp3" | 
            
                                                        
            
                                    
            
            
                | 58 |  |  |     media_player.play_media_callback = play_media | 
            
                                                        
            
                                    
            
            
                | 59 |  |  |     media_player.add_chat_trigger(media_file_path, False, True) | 
            
                                                        
            
                                    
            
            
                | 60 |  |  |     media_player.monitoring_type = 0 | 
            
                                                        
            
                                    
            
            
                | 61 |  |  |     await asyncio.sleep(0.1) | 
            
                                                        
            
                                    
            
            
                | 62 |  |  |     assert len(media_player.chat_triggers) == 1 | 
            
                                                        
            
                                    
            
            
                | 63 |  |  |  | 
            
                                                        
            
                                    
            
            
                | 64 |  |  |     c = ChatMessage( | 
            
                                                        
            
                                    
            
            
                | 65 |  |  |         "123456", None, None, datetime.now(timezone.utc), " ", " ", | 
            
                                                        
            
                                    
            
            
                | 66 |  |  |         False, False, False | 
            
                                                        
            
                                    
            
            
                | 67 |  |  |     ) | 
            
                                                        
            
                                    
            
            
                | 68 |  |  |  | 
            
                                                        
            
                                    
            
            
                | 69 |  |  |     media_player.chat_updated(c) | 
            
                                                        
            
                                    
            
            
                | 70 |  |  |  |