uchill/backend/apps/integration_tests/test_full_scenarios.py

136 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Интеграционные тесты полных сценариев.
"""
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'