141 lines
5.0 KiB
Python
141 lines
5.0 KiB
Python
"""
|
||
Тесты интеграции 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")
|
||
|