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