136 lines
4.5 KiB
Python
136 lines
4.5 KiB
Python
"""
|
||
Интеграционные тесты полных сценариев.
|
||
"""
|
||
import pytest
|
||
from django.utils import timezone
|
||
from datetime import timedelta
|
||
from apps.schedule.models import Lesson, Subject
|
||
from apps.homework.models import Homework, HomeworkSubmission
|
||
from apps.subscriptions.models import SubscriptionPlan, Subscription
|
||
from apps.users.models import Client
|
||
|
||
|
||
@pytest.mark.django_db
|
||
@pytest.mark.integration
|
||
class TestMentorWorkflow:
|
||
"""Тест полного workflow ментора."""
|
||
|
||
def test_mentor_complete_workflow(self, mentor_user, client_user):
|
||
"""Тест полного цикла работы ментора."""
|
||
# 1. Создание клиента
|
||
client_profile = Client.objects.create(
|
||
user=client_user,
|
||
mentor=mentor_user
|
||
)
|
||
|
||
# 2. Создание подписки
|
||
plan = SubscriptionPlan.objects.create(
|
||
name='Базовый',
|
||
slug='basic',
|
||
price=1000.00,
|
||
duration_days=30
|
||
)
|
||
|
||
subscription = Subscription.objects.create(
|
||
user=mentor_user,
|
||
plan=plan,
|
||
status='active'
|
||
)
|
||
|
||
assert subscription.is_active() is True
|
||
|
||
# 3. Создание занятия
|
||
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.status == 'scheduled'
|
||
|
||
# 4. Создание домашнего задания
|
||
homework = Homework.objects.create(
|
||
mentor=mentor_user,
|
||
lesson=lesson,
|
||
title='Решить задачи',
|
||
description='Учебник, стр. 45',
|
||
status='published'
|
||
)
|
||
|
||
assert homework.status == 'published'
|
||
|
||
# 5. Получение решения
|
||
submission = HomeworkSubmission.objects.create(
|
||
homework=homework,
|
||
student=client_user,
|
||
text='Мое решение',
|
||
status='pending'
|
||
)
|
||
|
||
assert submission.status == 'pending'
|
||
|
||
# 6. Оценивание решения
|
||
submission.grade(score=85, feedback='Хорошая работа!')
|
||
|
||
assert submission.status == 'graded'
|
||
assert submission.score == 85
|
||
|
||
# 7. Завершение занятия
|
||
lesson.complete(grade=5, notes='Отличная работа!')
|
||
|
||
assert lesson.status == 'completed'
|
||
|
||
|
||
@pytest.mark.django_db
|
||
@pytest.mark.integration
|
||
class TestClientWorkflow:
|
||
"""Тест полного workflow клиента."""
|
||
|
||
def test_client_complete_workflow(self, mentor_user, client_user):
|
||
"""Тест полного цикла работы клиента."""
|
||
# 1. Клиент видит свои занятия
|
||
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'
|
||
)
|
||
|
||
# 2. Клиент видит назначенные задания
|
||
homework = Homework.objects.create(
|
||
mentor=mentor_user,
|
||
lesson=lesson,
|
||
title='Задание',
|
||
description='Описание',
|
||
status='published'
|
||
)
|
||
homework.assigned_to.add(client_user)
|
||
|
||
# 3. Клиент отправляет решение
|
||
submission = HomeworkSubmission.objects.create(
|
||
homework=homework,
|
||
student=client_user,
|
||
text='Решение',
|
||
status='pending'
|
||
)
|
||
|
||
assert submission.student == client_user
|
||
assert submission.status == 'pending'
|
||
|