async def my_coroutine(): gm = GameManager() future = asyncio.get_running_loop().create_future() player = Player(future, None) player.send_announcement = AsyncMock() # Do not set result on purpose so that we know that it's blocking on this. # future.set_result(None) # Indirectly I can be confident that it timed out waiting for future. with self.assertRaises(asyncio.TimeoutError): await asyncio.wait_for(gm.wait_until_game_complete(player), timeout=1) self.assertEqual(len(gm.waiting_players), 1, "Number of waiting players must be 1") player.send_announcement.assert_called_once() gm.waiting_players.clear() # Now let's see if it's not blocked. future = asyncio.get_running_loop().create_future() player = Player(future, None) future.set_result(None) player.send_announcement = AsyncMock() await asyncio.wait_for(gm.wait_until_game_complete(player), timeout=1) self.assertEqual(len(gm.waiting_players), 1, "Number of waiting players must be 1") player.send_announcement.assert_called_once()
def test_send_announcement(self): """Tests that Player.send_announcement() calls websocket send() """ websocket = MagicMock() send = AsyncMock() websocket.attach_mock(send, 'send') player = Player(None, websocket) asyncio.run(player.send_announcement("Breaking News!!!")) send.assert_called_once_with( '{"id": 1, "method": "announcement", "params": {"message": "Breaking News!!!"}}' )
async def my_coroutine(): gm = GameManager() for i in range(0, config.CONFIG_PLAYERS_PER_GAME): future = asyncio.get_running_loop().create_future() player = Player(future, None) future.set_result(None) player.send_announcement = AsyncMock() await asyncio.wait_for(gm.wait_until_game_complete(player), timeout=1) self.assertEqual(len(gm.waiting_players), 0, "Number of waiting players must be 0") run.assert_called_once()