def test_simple_as_route_method(self): class WebsocketConsumer(websockets.WebsocketConsumer): def connect(self, message, **kwargs): self.message.reply_channel.send({'accept': True}) self.send(text=message.get('order')) routes = [ WebsocketConsumer.as_route(attrs={"strict_ordering": True}, path='^/path$'), WebsocketConsumer.as_route(path='^/path/2$'), ] self.assertIsNot(routes[0].consumer, WebsocketConsumer) self.assertIs(routes[1].consumer, WebsocketConsumer) with apply_routes(routes): client = WSClient() client.send('websocket.connect', {'path': '/path', 'order': 1}) client.send('websocket.connect', {'path': '/path', 'order': 0}) client.consume('websocket.connect', check_accept=False) client.consume('websocket.connect') self.assertEqual(client.receive(json=False), 0) client.consume('websocket.connect') self.assertEqual(client.receive(json=False), 1) client.send_and_consume('websocket.connect', { 'path': '/path/2', 'order': 'next' }) self.assertEqual(client.receive(json=False), 'next')
def test_room_ai(self): client = WSClient() client.login(username='******', password='******') client.send_and_consume('websocket.connect', path='/api/websocket/') client.receive() data = { 'room_id': 'test', } req = request('room-join', data, nonce='test') client.send_and_consume('websocket.receive', req, path='/api/websocket/') client.consume('room-join') client.receive() client.receive() nick = ['doge', 'bitcoin', 'ethereum', 'egger'] for i in range(4): req = request('room-ai-add', {}, nonce='test') client.send_and_consume('websocket.receive', req, path='/api/websocket/') client.consume('room-ai-add') client.receive() response = client.receive() self.assertEqual(response['event'], 'room-join') self.assertEqual(response['data']['player'], '*AI-' + nick[i]) client.receive() data = { 'ai_name': '*AI-ethereum', } req = request('room-ai-delete', data, nonce='test') client.send_and_consume('websocket.receive', req, path='/api/websocket/') client.consume('room-ai-delete') client.receive() response = client.receive() self.assertEqual(response['event'], 'room-leave') self.assertEqual(response['data']['player'], '*AI-ethereum')
def test_room_start(self): client1 = WSClient() client1.login(username='******', password='******') client1.send_and_consume('websocket.connect', path='/api/websocket/') client1.receive() client2 = WSClient() client2.login(username='******', password='******') client2.send_and_consume('websocket.connect', path='/api/websocket/') client2.receive() data = { 'room_id': 'room', } req = request('room-join', data, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) client1.receive() client1.receive() req = request('room-ready', {'ready': True}, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_ready_consumer(self.get_next_message('room-ready')) client1.receive() client1.receive() req = request('room-start', {}, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_start_consumer(self.get_next_message('room-start')) response = client1.receive() self.assertFalse(response['success']) self.assertEqual(response['error']['reason'], 'Not enough players') req = request('room-join', data, nonce='test') client2.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) client2.receive() client2.receive() client1.receive() req = request('room-ready', {'ready': True}, nonce='test') client2.send_and_consume('websocket.receive', req, path='/api/websocket/') room_ready_consumer(self.get_next_message('room-ready')) client2.receive() client2.receive() client1.receive() req = request('room-start', {}, nonce='test') client2.send_and_consume('websocket.receive', req, path='/api/websocket/') room_start_consumer(self.get_next_message('room-start')) response = client2.receive() self.assertFalse(response['success']) self.assertEqual(response['error']['reason'], 'You are not host') room_cache = cache.get('room:room') self.assertIs(room_cache['game']['state'], RoomState.NOT_PLAYING) req = request('room-start', {}, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_start_consumer(self.get_next_message('room-start')) response = client1.receive() self.assertTrue(response['success']) client1.consume('gameplay-start') response = client1.receive() self.assertEqual(response['event'], 'room-start') response = client2.receive() self.assertEqual(response['event'], 'room-start')