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.
 
 

113 lines
4.6 KiB

from django.core.files.uploadedfile import SimpleUploadedFile
from django.urls import reverse
from rest_framework.test import APITestCase
from apps.account.models import ProfessorUser
from apps.course.models import Course, CourseCategory, CourseLesson, Lesson
class TestProfessorAPI(APITestCase):
def setUp(self):
self.professor = ProfessorUser.objects.create(
email='professor@example.com',
fullname='استاد نمونه',
experience_years=7,
)
self.category = CourseCategory.objects.create(name='General', slug='general')
thumbnail = SimpleUploadedFile('thumb.jpg', b'filecontent', content_type='image/jpeg')
self.course = Course.objects.create(
title='Test Course',
slug='test-course',
category=self.category,
professor=self.professor,
thumbnail=thumbnail,
video_type=Course.VedioTypeChoices.YOUTUBE_LINK,
video_link='https://example.com/video',
is_online=True,
online_link='https://example.com/classroom',
level=Course.LevelChoices.BEGINNER,
duration=10,
lessons_count=1,
description='Sample description',
short_description='Short description',
status=Course.StatusChoices.ONGOING,
is_free=True,
)
lesson = Lesson.objects.create(
title='Lesson 1',
content_type=Lesson.ContentTypeChoices.VIDEO_FILE,
duration=5,
)
CourseLesson.objects.create(course=self.course, lesson=lesson, priority=1, is_active=True)
self.professor.refresh_from_db()
def test_professor_list_api(self):
url = reverse('course-professor-list')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['count'], 1)
item = response.data['results'][0]
self.assertEqual(item['slug'], self.professor.slug)
self.assertEqual(item['fullname'], self.professor.fullname)
self.assertEqual(item['experience_years'], 7)
self.assertEqual(item['course_count'], 1)
self.assertEqual(item['lesson_count'], 1)
def test_professor_detail_api(self):
url = reverse('course-professor-detail', kwargs={'slug': self.professor.slug})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
data = response.data
self.assertEqual(data['slug'], self.professor.slug)
self.assertEqual(data['fullname'], self.professor.fullname)
self.assertEqual(data['experience_years'], 7)
self.assertEqual(data['course_count'], 1)
self.assertEqual(data['lesson_count'], 1)
def test_professor_courses_api(self):
url = reverse('course-professor-course-list', kwargs={'slug': self.professor.slug})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['count'], 1)
course_data = response.data['results'][0]
self.assertEqual(course_data['id'], self.course.id)
self.assertEqual(course_data['title'], self.course.title)
def test_professor_slug_generated_without_fullname(self):
professor = ProfessorUser.objects.create(
email='slugless@example.com',
fullname='',
)
self.assertTrue(professor.slug)
def test_course_creation_promotes_professor_user(self):
professor = ProfessorUser.objects.create(
email='pending@example.com',
fullname='کاربر موقت',
)
professor.user_type = ProfessorUser.UserType.CLIENT
professor.slug = None
professor.save(update_fields=['user_type', 'slug'])
thumbnail = SimpleUploadedFile('thumb2.jpg', b'filecontent', content_type='image/jpeg')
Course.objects.create(
title='Auto Promote Course',
slug='auto-promote-course',
category=self.category,
professor=professor,
thumbnail=thumbnail,
video_type=Course.VedioTypeChoices.YOUTUBE_LINK,
video_link='https://example.com/video2',
is_online=False,
level=Course.LevelChoices.BEGINNER,
duration=5,
lessons_count=0,
description='Test',
short_description='Test',
status=Course.StatusChoices.REGISTERING,
is_free=True,
)
professor.refresh_from_db()
self.assertEqual(professor.user_type, ProfessorUser.UserType.PROFESSOR)
self.assertTrue(professor.slug)