uchill/backend/apps/video/tests/test_sfu_integration.py

141 lines
5.0 KiB
Python
Raw Permalink 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.

"""
Тесты интеграции Django с sfu-server.
"""
from django.test import TestCase
from django.contrib.auth import get_user_model
from apps.video.services import get_sfu_client, SFUClientError
from apps.schedule.models import Lesson
from apps.video.models import VideoRoom
import uuid
User = get_user_model()
class SFUClientTestCase(TestCase):
"""Тесты SFU клиента."""
def setUp(self):
"""Настройка тестов."""
self.mentor = User.objects.create_user(
email='mentor@test.com',
password='testpass123',
role='mentor',
first_name='Test',
last_name='Mentor'
)
self.client_user = User.objects.create_user(
email='client@test.com',
password='testpass123',
role='client',
first_name='Test',
last_name='Client'
)
def test_health_check(self):
"""Тест проверки доступности sfu-server."""
client = get_sfu_client()
# В тестах может не быть запущенного sfu-server, поэтому просто проверяем что метод вызывается
try:
result = client.health_check()
self.assertIsInstance(result, bool)
except Exception as e:
# Если sfu-server не доступен, это нормально для тестов
pass
def test_create_room(self):
"""Тест создания комнаты в sfu-server."""
client = get_sfu_client()
room_id = str(uuid.uuid4())
try:
result = client.create_room(room_id)
self.assertIn('room_id', result)
self.assertEqual(result['room_id'], room_id)
self.assertEqual(result['status'], 'created')
except SFUClientError:
# Если sfu-server не доступен, пропускаем тест
self.skipTest("SFU server not available")
def test_get_room(self):
"""Тест получения информации о комнате."""
client = get_sfu_client()
room_id = str(uuid.uuid4())
try:
# Создаем комнату
client.create_room(room_id)
# Получаем информацию
result = client.get_room(room_id)
self.assertIn('room_id', result)
self.assertEqual(result['room_id'], room_id)
self.assertIn('peers_count', result)
except SFUClientError:
self.skipTest("SFU server not available")
def test_delete_room(self):
"""Тест удаления комнаты."""
client = get_sfu_client()
room_id = str(uuid.uuid4())
try:
# Создаем комнату
client.create_room(room_id)
# Удаляем комнату
result = client.delete_room(room_id)
self.assertIn('room_id', result)
self.assertEqual(result['status'], 'deleted')
except SFUClientError:
self.skipTest("SFU server not available")
class VideoRoomSFUIntegrationTestCase(TestCase):
"""Тесты интеграции VideoRoom с sfu-server."""
def setUp(self):
"""Настройка тестов."""
self.mentor = User.objects.create_user(
email='mentor@test.com',
password='testpass123',
role='mentor',
first_name='Test',
last_name='Mentor'
)
self.client_user = User.objects.create_user(
email='client@test.com',
password='testpass123',
role='client',
first_name='Test',
last_name='Client'
)
# Создаем занятие
self.lesson = Lesson.objects.create(
mentor=self.mentor,
client=self.client_user,
title='Test Lesson',
start_time='2025-12-10T10:00:00Z',
duration=60,
status='confirmed'
)
def test_video_room_creation_creates_sfu_room(self):
"""Тест что создание VideoRoom создает комнату в sfu-server."""
try:
video_room = VideoRoom.objects.create(
lesson=self.lesson,
mentor=self.mentor,
client=self.client_user
)
# Проверяем что комната создана в sfu-server
sfu_client = get_sfu_client()
sfu_room = sfu_client.get_room(str(video_room.room_id))
self.assertEqual(sfu_room['room_id'], str(video_room.room_id))
self.assertEqual(sfu_room['status'], 'active')
except SFUClientError:
self.skipTest("SFU server not available")