""" Unit тесты для моделей расписания. """ import pytest from django.utils import timezone from datetime import timedelta from apps.schedule.models import Subject, MentorSubject, Lesson, LessonTemplate, TimeSlot, Availability from apps.users.models import User, Client, Parent @pytest.mark.django_db @pytest.mark.unit class TestSubjectModel: """Тесты модели Subject.""" def test_create_subject(self): """Тест создания предмета.""" subject = Subject.objects.create(name='Математика') assert subject.name == 'Математика' assert subject.is_active is True assert str(subject) == 'Математика' def test_subject_unique_name(self): """Тест уникальности названия предмета.""" Subject.objects.create(name='Физика') with pytest.raises(Exception): # IntegrityError или ValidationError Subject.objects.create(name='Физика') @pytest.mark.django_db @pytest.mark.unit class TestMentorSubjectModel: """Тесты модели MentorSubject.""" def test_create_mentor_subject(self, mentor_user): """Тест создания кастомного предмета ментора.""" mentor_subject = MentorSubject.objects.create( mentor=mentor_user, name='Программирование на Python' ) assert mentor_subject.mentor == mentor_user assert mentor_subject.name == 'Программирование на Python' assert mentor_subject.usage_count == 0 @pytest.mark.django_db @pytest.mark.unit class TestLessonModel: """Тесты модели Lesson.""" def test_create_lesson(self, mentor_user, client_user): """Тест создания занятия.""" from apps.users.models import Client # Создаем профиль клиента client_profile = Client.objects.create( user=client_user, mentor=mentor_user ) subject = Subject.objects.create(name='Математика') lesson = Lesson.objects.create( mentor=mentor_user, client=client_profile, subject=subject, title='Урок алгебры', start_time=timezone.now() + timedelta(hours=1), duration_minutes=60, status='scheduled' ) assert lesson.mentor == mentor_user assert lesson.client == client_profile assert lesson.subject == subject assert lesson.title == 'Урок алгебры' assert lesson.status == 'scheduled' assert lesson.duration_minutes == 60 def test_lesson_end_time(self, mentor_user, client_user): """Тест вычисления времени окончания занятия.""" from apps.users.models import Client client_profile = Client.objects.create( user=client_user, mentor=mentor_user ) start_time = timezone.now() + timedelta(hours=1) lesson = Lesson.objects.create( mentor=mentor_user, client=client_profile, title='Тест', start_time=start_time, duration_minutes=90, status='scheduled' ) expected_end_time = start_time + timedelta(minutes=90) assert lesson.end_time == expected_end_time def test_lesson_complete(self, mentor_user, client_user): """Тест завершения занятия.""" from apps.users.models import Client client_profile = Client.objects.create( user=client_user, mentor=mentor_user ) lesson = Lesson.objects.create( mentor=mentor_user, client=client_profile, title='Тест', start_time=timezone.now() - timedelta(hours=1), duration_minutes=60, status='scheduled' ) lesson.complete(grade=5, notes='Отличная работа!') assert lesson.status == 'completed' assert lesson.mentor_grade == 5 assert lesson.notes == 'Отличная работа!' assert lesson.completed_at is not None @pytest.mark.django_db @pytest.mark.unit class TestLessonTemplateModel: """Тесты модели LessonTemplate.""" def test_create_template(self, mentor_user): """Тест создания шаблона занятия.""" subject = Subject.objects.create(name='Физика') template = LessonTemplate.objects.create( mentor=mentor_user, subject=subject, title='Еженедельный урок физики', duration_minutes=60, description='Регулярное занятие' ) assert template.mentor == mentor_user assert template.subject == subject assert template.title == 'Еженедельный урок физики' assert template.duration_minutes == 60