Beispiel #1
0
    def test_websockets_http_session_and_channel_session(self):

        class WebsocketConsumer(websockets.WebsocketConsumer):
            http_user_and_session = True

        user_model = get_user_model()
        user = user_model.objects.create_user(username='******', email='*****@*****.**', password='******')

        client = HttpClient()
        client.force_login(user)
        with apply_routes([route_class(WebsocketConsumer, path='/path')]):
            connect = client.send_and_consume('websocket.connect', {'path': '/path'})
            receive = client.send_and_consume('websocket.receive', {'path': '/path'}, text={'key': 'value'})
            disconnect = client.send_and_consume('websocket.disconnect', {'path': '/path'})
        self.assertEqual(
            connect.message.http_session.session_key,
            receive.message.http_session.session_key
        )
        self.assertEqual(
            connect.message.http_session.session_key,
            disconnect.message.http_session.session_key
        )
Beispiel #2
0
class WebSocketTests(ChannelTestCase):
    def setUp(self):
        self.client = HttpClient()

    def test_creating_new_todo_items_in_public_todo_list_send_notification(
            self):
        todo_list = TodoList.objects.create(title="Products")

        self.client.send_and_consume(
            'websocket.connect',
            path='/api/ws/',
            content={'query_string': 'todo_list={}'.format(str(todo_list.id))},
        )

        TodoItem.objects.create(title="test_item", todo_list=todo_list)

        received = self.client.receive()

        self.assertNotEquals(received, None)

    def test_can_subscribe_to_read_only_todo_list(self):
        todo_list = TodoList.objects.create(title="Products",
                                            mode=TodoList.ALLOW_READ)

        self.client.send_and_consume(
            'websocket.connect',
            path='/api/ws/',
            content={'query_string': 'todo_list={}'.format(str(todo_list.id))},
        )

        TodoItem.objects.create(title="test_item", todo_list=todo_list)

        received = self.client.receive()
        self.assertNotEquals(received, None)

    def test_cant_subscribe_to_private_todo_list(self):
        todo_list = TodoList.objects.create(title="Products",
                                            mode=TodoList.PRIVATE)

        self.client.send_and_consume(
            'websocket.connect',
            path='/api/ws/',
            content={'query_string': 'todo_list={}'.format(str(todo_list.id))},
        )

        TodoItem.objects.create(title="test_item", todo_list=todo_list)

        received = self.client.receive()
        self.assertEquals(received, None)

    def test_cant_add_new_todo_item_by_ws(self):
        todo_list = TodoList.objects.create(title="Products")
        self.client.join_group(str(todo_list.id))

        payload = {
            'stream': 'todo_item',
            'payload': {
                'data': {
                    'title': 'test_item',
                    'todo_list': str(todo_list.id)
                },
                'action': 'create',
            }
        }

        self.client.send_and_consume('websocket.receive',
                                     path='/api/ws/',
                                     text=payload)

        self.assertEqual(TodoItem.objects.count(), 0)

    def test_todo_lists_have_separated_notifications(self):
        todo_list1 = TodoList.objects.create(title="Homework")
        todo_list2 = TodoList.objects.create(title="Products")

        # connect to todo_list1
        self.client.join_group(str(todo_list1.id))
        TodoItem.objects.create(title="brush teeth", todo_list=todo_list1)

        # get messages from todo_list1
        received = self.client.receive()
        self.assertNotEquals(received, None)

        # not get messages from todo_list2
        TodoItem.objects.create(title="milk", todo_list=todo_list2)
        received = self.client.receive()
        self.assertEquals(received, None)

    def test_if_not_connected_to_todo_list_not_get_notifications(self):
        todo_list = TodoList.objects.create(title="Products")

        self.client.send_and_consume('websocket.connect', path='/api/ws/')
        TodoItem.objects.create(title="test_item", todo_list=todo_list)

        received = self.client.receive()
        self.assertEquals(received, None)

    def test_get_notification_from_watched_not_private_todo_lists_and_own_private(
            self):
        user = UserModel.objects.create(username='******')
        todo_list_private_own = TodoList.objects.create(title="Private own",
                                                        mode=TodoList.PRIVATE,
                                                        owner=user)
        todo_list_private = TodoList.objects.create(title="Private",
                                                    mode=TodoList.PRIVATE)
        todo_list_read_only = TodoList.objects.create(title="Read only",
                                                      mode=TodoList.ALLOW_READ)
        todo_list_public = TodoList.objects.create(
            title="Public", mode=TodoList.ALLOW_FULL_ACCESS)

        [
            Watch.objects.create(user=user, todo_list=todo_list)
            for todo_list in TodoList.objects.all()
        ]

        self.client.force_login(user)
        self.client.send_and_consume('websocket.connect', path='/api/ws/')

        TodoItem.objects.create(title="test_item1",
                                todo_list=todo_list_private_own)
        received = self.client.receive()
        self.assertNotEquals(received, None)

        TodoItem.objects.create(title="test_item2",
                                todo_list=todo_list_private)
        received = self.client.receive()
        self.assertEquals(received, None)

        TodoItem.objects.create(title="test_item3",
                                todo_list=todo_list_read_only)
        received = self.client.receive()
        self.assertNotEquals(received, None)

        TodoItem.objects.create(title="test_item4", todo_list=todo_list_public)
        received = self.client.receive()
        self.assertNotEquals(received, None)