async def test_send_message(url, client): user = baker.make(models.USER_MODEL) client.force_login(user) request = client.get(url).wsgi_request session = request.session communicator = WebsocketCommunicator(ChatConsumer.as_asgi(), url) communicator.scope['session'] = session chat = baker.make(models.CHAT_MODEL) # Setup data = { 'type': 'setup_channel_layer', 'chat': chat.pk, 'session_key': session.session_key, } await communicator.send_json_to(data) word = fake.word() data = { 'type': 'send_message', 'chat': chat.pk, 'message': word, } await communicator.send_json_to(data) response = await communicator.receive_json_from() message = response['message'] assert word == message['message'] assert chat.pk == message['chat'] assert ChatMessage.objects.get(pk=message['id']) # Disconnect await communicator.disconnect()
async def test_setup_channel_layer(url): communicator = WebsocketCommunicator(ChatConsumer.as_asgi(), url) chat = baker.make(models.CHAT_MODEL) data = { 'type': 'setup_channel_layer', 'chat': chat.pk, } await communicator.send_json_to(data) # Disconnect communicator await communicator.disconnect()
async def test_send_message_without_setup(url, client): user = baker.make(models.USER_MODEL) client.force_login(user) request = client.get(url).wsgi_request communicator = WebsocketCommunicator(ChatConsumer.as_asgi(), url) communicator.scope['session'] = request.session chat = baker.make(models.CHAT_MODEL) data = { 'type': 'send_message', 'chat': chat.pk, 'message': fake.word(), } await communicator.send_json_to(data) response = await communicator.receive_json_from() assert 'error' in response # Disconnect await communicator.disconnect()
# chat/routing.py from django.urls import re_path from chat.consumers import ChatConsumer websocket_urlpatterns = [ re_path(r'ws/chat/(?P<room_name>\w+)/$', ChatConsumer.as_asgi()), ]
from channels.auth import AuthMiddlewareStack from channels.routing import ProtocolTypeRouter, URLRouter from django.urls import path from chat.consumers import ChatConsumer application = ProtocolTypeRouter({ 'websocket': AuthMiddlewareStack( URLRouter([ path('ws/chat/<slug:chatname>/', ChatConsumer.as_asgi()), ]) ), })
from django.urls import path from channels.routing import ProtocolTypeRouter, URLRouter from channels.auth import AuthMiddlewareStack from chat.consumers import ChatConsumer application = ProtocolTypeRouter({ 'websocket': AuthMiddlewareStack( URLRouter({ path('ws/chat/', ChatConsumer.as_asgi(), name='chat'), }), ), })
from channels.routing import ProtocolTypeRouter, URLRouter from channels.auth import AuthMiddlewareStack from django.urls import path, include, re_path from django.conf.urls import url from chat.consumers import ChatConsumer ws_urlpatterns = [ re_path(r'^ws/(?P<room_id>\w+)/$', ChatConsumer.as_asgi()), ] application = ProtocolTypeRouter({ 'websocket': AuthMiddlewareStack( URLRouter( ws_urlpatterns ) ) })
from django.urls import path from chat.consumers import ChatConsumer websocket_urlpatterns = [ # path(r'^ws/chat/(?P<room_name>[^/]+)/(?P<auth>[^/]+)/$', ChatConsumer) path('ws/chat/<int:sender_id>/<int:receiver_id>/', ChatConsumer.as_asgi()) ]