Corp/backend/tests/realtime/conftest.py
2026-09-07 19:43:48 +03:00

87 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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