87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
# tests/realtime/conftest.py
|
||
"""
|
||
Pytest fixtures для тестирования WebSocket consumers.
|
||
"""
|
||
|
||
import pytest
|
||
from channels.testing import WebsocketCommunicator
|
||
from django.contrib.auth import get_user_model
|
||
from django.contrib.auth.models import AnonymousUser
|
||
|
||
from communications.models import Chat, ChatMembership
|
||
from realtime.consumers import UserConsumer
|
||
|
||
User = get_user_model()
|
||
|
||
|
||
@pytest.fixture
|
||
def user(db):
|
||
"""Создает тестового пользователя."""
|
||
return User.objects.create_user(
|
||
email="testuser@example.com",
|
||
password="testpass123",
|
||
phone_number="+79991234567",
|
||
first_name="Test",
|
||
last_name="User",
|
||
)
|
||
|
||
|
||
@pytest.fixture
|
||
def user2(db):
|
||
"""Создает второго тестового пользователя."""
|
||
return User.objects.create_user(
|
||
email="testuser2@example.com",
|
||
password="testpass123",
|
||
phone_number="+79991234568",
|
||
first_name="Test2",
|
||
last_name="User2",
|
||
)
|
||
|
||
|
||
@pytest.fixture
|
||
def ws_communicator():
|
||
"""
|
||
Фабрика для создания WebSocket communicator.
|
||
|
||
Использование:
|
||
communicator = await ws_communicator(user=test_user)
|
||
connected, _ = await communicator.connect()
|
||
"""
|
||
|
||
async def _create_communicator(user=None, path="/ws/"):
|
||
"""Создает WebsocketCommunicator с указанным пользователем."""
|
||
application = UserConsumer.as_asgi()
|
||
|
||
# Создаем scope с пользователем
|
||
scope = {
|
||
"type": "websocket",
|
||
"path": path,
|
||
"headers": [],
|
||
"query_string": b"",
|
||
"user": user if user else AnonymousUser(),
|
||
}
|
||
|
||
communicator = WebsocketCommunicator(application, path)
|
||
communicator.scope.update(scope)
|
||
|
||
return communicator
|
||
|
||
return _create_communicator
|
||
|
||
|
||
@pytest.fixture
|
||
def test_chat(db, user):
|
||
"""Создает тестовый чат с пользователем."""
|
||
chat = Chat.objects.create(name="Test Chat", type="group")
|
||
ChatMembership.objects.create(chat=chat, user=user, role="member")
|
||
return chat
|
||
|
||
|
||
@pytest.fixture
|
||
def test_chat_with_users(db, user, user2):
|
||
"""Создает чат с двумя пользователями."""
|
||
chat = Chat.objects.create(name="Multi User Chat", type="group")
|
||
ChatMembership.objects.create(chat=chat, user=user, role="admin")
|
||
ChatMembership.objects.create(chat=chat, user=user2, role="member")
|
||
return chat
|