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

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')