def test_consumer(self): client = Client() with apply_routes([MyConsumer.as_route()]): spy.reset_mock() client.send_and_consume(u'websocket.connect', {'path': '/'}) client.send_and_consume( u'websocket.receive', { 'path': '/', 'text': json.dumps({ 'type': 'INCREMENT_COUNTER', 'payload': 2, }), }) self.assertEqual(spy.call_count, 1) self.assertEqual( client.receive(), { 'text': json.dumps({ 'type': 'INCREMENTED_COUNTER', 'payload': 2, }), })
def test_simple_as_route_method(self): class WebsocketConsumer(websockets.WebsocketConsumer): def connect(self, message, **kwargs): self.send(text=message.get('order')) routes = [ WebsocketConsumer.as_route(attrs={'slight_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 = Client() client.send('websocket.connect', {'path': '/path', 'order': 1}) client.send('websocket.connect', {'path': '/path', 'order': 0}) client.consume('websocket.connect') client.consume('websocket.connect') client.consume('websocket.connect') self.assertEqual(client.receive(), {'text': 0}) self.assertEqual(client.receive(), {'text': 1}) client.send_and_consume('websocket.connect', { 'path': '/path/2', 'order': 'next' }) self.assertEqual(client.receive(), {'text': 'next'})
def test_websockets_consumers_handlers(self): class WebsocketConsumer(websockets.WebsocketConsumer): def connect(self, message, **kwargs): self.called = 'connect' self.id = kwargs['id'] def disconnect(self, message, **kwargs): self.called = 'disconnect' def receive(self, text=None, bytes=None, **kwargs): self.text = text with apply_routes( [route_class(WebsocketConsumer, path='/path/(?P<id>\d+)')]): client = Client() consumer = client.send_and_consume('websocket.connect', {'path': '/path/1'}) self.assertEqual(consumer.called, 'connect') self.assertEqual(consumer.id, '1') consumer = client.send_and_consume('websocket.receive', { 'path': '/path/1', 'text': 'text' }) self.assertEqual(consumer.text, 'text') consumer = client.send_and_consume('websocket.disconnect', {'path': '/path/1'}) self.assertEqual(consumer.called, 'disconnect')
def test_base_consumer(self): class Consumers(BaseConsumer): method_mapping = { 'test.create': 'create', 'test.test': 'test', } def create(self, message, **kwargs): self.called = 'create' def test(self, message, **kwargs): self.called = 'test' with apply_routes([route_class(Consumers)]): client = Client() # check that methods for certain channels routes successfully self.assertEqual( client.send_and_consume('test.create').called, 'create') self.assertEqual( client.send_and_consume('test.test').called, 'test') # send to the channels without routes client.send('test.wrong') message = self.get_next_message('test.wrong') self.assertEqual(client.channel_layer.router.match(message), None) client.send('test') message = self.get_next_message('test') self.assertEqual(client.channel_layer.router.match(message), None)
def test_websocket_demultiplexer_send(self): class MyWebsocketConsumer(websockets.JsonWebsocketConsumer): def receive(self, content, multiplexer=None, **kwargs): import pdb pdb.set_trace() # breakpoint 69f2473b // self.send(content) class Demultiplexer(websockets.WebsocketDemultiplexer): consumers = {"mystream": MyWebsocketConsumer} with apply_routes([ route_class(Demultiplexer, path='/path/(?P<id>\d+)'), route_class(MyWebsocketConsumer), ]): client = Client() with self.assertRaises(SendNotAvailableOnDemultiplexer): client.send_and_consume( 'websocket.receive', { 'path': '/path/1', 'text': json.dumps({ "stream": "mystream", "payload": { "text_field": "mytext" } }) }) client.receive()
def test_websockets_decorators(self): class WebsocketConsumer(websockets.WebsocketConsumer): slight_ordering = True def connect(self, message, **kwargs): self.order = message['order'] with apply_routes([route_class(WebsocketConsumer, path='/path')]): client = Client() client.send('websocket.connect', {'path': '/path', 'order': 1}) client.send('websocket.connect', {'path': '/path', 'order': 0}) client.consume('websocket.connect') self.assertEqual(client.consume('websocket.connect').order, 0) self.assertEqual(client.consume('websocket.connect').order, 1)
def test_as_route_method(self): class WebsocketConsumer(BaseConsumer): trigger = 'new' def test(self, message, **kwargs): self.message.reply_channel.send({'trigger': self.trigger}) method_mapping = {'mychannel': 'test'} with apply_routes([ WebsocketConsumer.as_route( { 'method_mapping': method_mapping, 'trigger': 'from_as_route' }, name='filter') ]): client = Client() client.send_and_consume('mychannel', {'name': 'filter'}) self.assertEqual(client.receive(), {'trigger': 'from_as_route'})
def setUp(self): super(ResourceBindingTestCase, self).setUp() self.client = Client()
def setUp(self): super().setUp() self.client = Client()
def setUp(self): super(TestStreamConsumerReceive, self).setUp() self.client = Client()
def test_websockets_demultiplexer(self): class MyWebsocketConsumer(websockets.JsonWebsocketConsumer): def connect(self, message, multiplexer=None, **kwargs): multiplexer.send(kwargs) def disconnect(self, message, multiplexer=None, **kwargs): multiplexer.send(kwargs) def receive(self, content, multiplexer=None, **kwargs): multiplexer.send(content) class Demultiplexer(websockets.WebsocketDemultiplexer): consumers = {"mystream": MyWebsocketConsumer} with apply_routes([ route_class(Demultiplexer, path='/path/(?P<id>\d+)'), route_class(MyWebsocketConsumer), ]): client = Client() client.send_and_consume('websocket.connect', {'path': '/path/1'}) self.assertEqual( client.receive(), { "text": json.dumps({ "stream": "mystream", "payload": { "id": "1" }, }) }) client.send_and_consume( 'websocket.receive', { 'path': '/path/1', 'text': json.dumps({ "stream": "mystream", "payload": { "text_field": "mytext" } }) }) self.assertEqual( client.receive(), { "text": json.dumps({ "stream": "mystream", "payload": { "text_field": "mytext" }, }) }) client.send_and_consume('websocket.disconnect', {'path': '/path/1'}) self.assertEqual( client.receive(), { "text": json.dumps({ "stream": "mystream", "payload": { "id": "1" }, }) })