Ejemplo n.º 1
0
    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')
Ejemplo n.º 2
0
    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')
Ejemplo n.º 3
0
    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')