Corp/backend/tests/realtime/conftest.py
igor_nadein da7bf54c6c feat: Реализация полной функциональности опросов в чатах
- Исправлен PollSerializer для создания опросов с опциями
- Добавлено поле read_only_fields для корректной валидации
- Реализована отправка WebSocket уведомлений при создании опроса
- Исправлен импорт serialize_message из communications.serialization
- Добавлен обработчик poll_update в UserConsumer для WebSocket событий
- Исправлен эндпоинт /results/ для возврата user_voted_option_ids
- Добавлено поле voters в PollOptionSerializer для списка проголосовавших
- Реализована инициализация poll виджетов после рендера сообщений
- Добавлено игнорирование poll_update в notification-manager
- Исправлены стили для request list badges (height, word-break, flex)
- Восстановлены стили team-wheel (.wheel-focus, .scroll-arc) из git истории
- Реализовано отображение forwarded message info в messageRendererV2
- Множественные улучшения UI и UX для опросов

Fixes: создание опросов, голосование, отображение результатов, список проголосовавших
2026-01-22 01:33:42 +03:00

95 lines
2.6 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