You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
5.0 KiB
133 lines
5.0 KiB
import tempfile
|
|
from unittest import mock
|
|
|
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
|
from django.test import override_settings
|
|
from django.urls import reverse
|
|
from django.utils import timezone
|
|
from dj_language.models import Language
|
|
from rest_framework import status
|
|
from rest_framework.test import APITestCase
|
|
|
|
from apps.account.models import ProfessorUser
|
|
from apps.course.models import Course, CourseCategory, CourseLiveSession
|
|
from apps.course.views.course import get_course_slug_value
|
|
|
|
|
|
@override_settings(
|
|
PLUGNMEET_SERVER_URL='https://meet.example.com',
|
|
PLUGNMEET_API_KEY='test-key',
|
|
PLUGNMEET_API_SECRET='test-secret',
|
|
MEDIA_ROOT=tempfile.gettempdir(),
|
|
ONLINE_CLASS_FRONTEND_DOMAIN='http://testserver',
|
|
)
|
|
class CourseLiveSessionSubjectTests(APITestCase):
|
|
def setUp(self):
|
|
Language.objects.update_or_create(
|
|
id=69,
|
|
defaults={
|
|
'code': 'en',
|
|
'name': 'English',
|
|
'status': True,
|
|
'countries': [],
|
|
},
|
|
)
|
|
self.professor = ProfessorUser.objects.create(
|
|
email='subject-prof@example.com',
|
|
fullname='Subject Professor',
|
|
experience_years=5,
|
|
)
|
|
self.category = CourseCategory.objects.create(name='Category', slug='category')
|
|
thumbnail = SimpleUploadedFile('thumb.jpg', b'filecontent', content_type='image/jpeg')
|
|
self.course = Course.objects.create(
|
|
title=[{'title': 'Sample Course', 'language_code': 'en'}],
|
|
slug=[{'title': 'sample-course', 'language_code': 'en'}],
|
|
category=self.category,
|
|
thumbnail=thumbnail,
|
|
video_type=Course.VedioTypeChoices.YOUTUBE_LINK,
|
|
video_link='https://example.com/video',
|
|
is_online=True,
|
|
online_link='https://example.com/live',
|
|
level=[{'title': 'beginner', 'language_code': 'en'}],
|
|
duration=10,
|
|
lessons_count=2,
|
|
description=[{'title': 'Description', 'language_code': 'en'}],
|
|
short_description=[{'title': 'Short', 'language_code': 'en'}],
|
|
status=[{'title': 'ongoing', 'language_code': 'en'}],
|
|
is_free=True,
|
|
)
|
|
self.course.professors.add(self.professor)
|
|
|
|
@mock.patch('apps.course.views.live_session.PlugNMeetClient')
|
|
def test_room_create_uses_incremental_subject(self, mock_client_cls):
|
|
mock_client_cls.return_value.create_room.return_value = {'status': 'success'}
|
|
CourseLiveSession.objects.create(
|
|
course=self.course,
|
|
room_id='room-old',
|
|
subject='Live Session 1',
|
|
started_at=timezone.now(),
|
|
ended_at=timezone.now(),
|
|
)
|
|
|
|
self.client.force_authenticate(user=self.professor)
|
|
url = reverse(
|
|
'course-live-session-room-create',
|
|
kwargs={'slug': get_course_slug_value(self.course)},
|
|
)
|
|
response = self.client.post(url, {}, format='json')
|
|
|
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
|
session = CourseLiveSession.objects.filter(
|
|
course=self.course,
|
|
ended_at__isnull=True,
|
|
).latest('id')
|
|
self.assertEqual(session.subject, 'Live Session 2')
|
|
|
|
@mock.patch('apps.course.views.course.PlugNMeetClient')
|
|
def test_validate_professor_create_uses_incremental_subject(self, mock_client_cls):
|
|
mock_client = mock_client_cls.return_value
|
|
mock_client.create_room.return_value = {'status': 'success'}
|
|
mock_client.get_join_token.return_value = {'token': 'teacher-access-token'}
|
|
CourseLiveSession.objects.create(
|
|
course=self.course,
|
|
room_id='room-old',
|
|
subject='Live Session 1',
|
|
started_at=timezone.now(),
|
|
ended_at=timezone.now(),
|
|
)
|
|
|
|
self.client.force_authenticate(user=self.professor)
|
|
url = reverse(
|
|
'course-online-validate',
|
|
kwargs={'slug': get_course_slug_value(self.course)},
|
|
)
|
|
response = self.client.get(url)
|
|
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
session = CourseLiveSession.objects.filter(
|
|
course=self.course,
|
|
ended_at__isnull=True,
|
|
).latest('id')
|
|
self.assertEqual(session.subject, 'Live Session 2')
|
|
|
|
def test_set_recording_title_updates_session_subject(self):
|
|
session = CourseLiveSession.objects.create(
|
|
course=self.course,
|
|
room_id='room-active',
|
|
subject='Live Session 1',
|
|
started_at=timezone.now(),
|
|
)
|
|
|
|
response = self.client.post(
|
|
reverse('course-live-session-set-recording-title'),
|
|
{
|
|
'room_id': session.room_id,
|
|
'title': 'machine learning',
|
|
},
|
|
format='json',
|
|
)
|
|
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
session.refresh_from_db()
|
|
self.assertEqual(session.recording_title, 'machine learning')
|
|
self.assertEqual(session.subject, 'machine learning')
|