94 lines
3.3 KiB
Python
94 lines
3.3 KiB
Python
"""
|
|
API тесты для расписания.
|
|
"""
|
|
import pytest
|
|
from django.utils import timezone
|
|
from datetime import timedelta
|
|
from rest_framework import status
|
|
from apps.schedule.models import Lesson, Subject
|
|
from apps.users.models import Client
|
|
|
|
|
|
@pytest.mark.django_db
|
|
@pytest.mark.api
|
|
class TestLessonAPI:
|
|
"""Тесты API занятий."""
|
|
|
|
def test_list_lessons(self, authenticated_client, mentor_user, client_user):
|
|
"""Тест получения списка занятий."""
|
|
client_profile = Client.objects.create(
|
|
user=client_user,
|
|
mentor=mentor_user
|
|
)
|
|
|
|
subject = Subject.objects.create(name='Математика')
|
|
|
|
Lesson.objects.create(
|
|
mentor=mentor_user,
|
|
client=client_profile,
|
|
subject=subject,
|
|
title='Урок 1',
|
|
start_time=timezone.now() + timedelta(hours=1),
|
|
duration_minutes=60,
|
|
status='scheduled'
|
|
)
|
|
|
|
response = authenticated_client.get('/api/schedule/lessons/')
|
|
|
|
assert response.status_code == status.HTTP_200_OK
|
|
assert len(response.data['results']) > 0
|
|
|
|
def test_create_lesson(self, authenticated_client, mentor_user, client_user):
|
|
"""Тест создания занятия."""
|
|
client_profile = Client.objects.create(
|
|
user=client_user,
|
|
mentor=mentor_user
|
|
)
|
|
|
|
subject = Subject.objects.create(name='Физика')
|
|
|
|
data = {
|
|
'client': client_profile.id,
|
|
'subject': subject.id,
|
|
'title': 'Новый урок',
|
|
'start_time': (timezone.now() + timedelta(hours=1)).isoformat(),
|
|
'duration_minutes': 60
|
|
}
|
|
|
|
response = authenticated_client.post('/api/schedule/lessons/', data)
|
|
|
|
assert response.status_code == status.HTTP_201_CREATED
|
|
assert response.data['title'] == 'Новый урок'
|
|
|
|
def test_unauthorized_access(self, api_client):
|
|
"""Тест доступа без аутентификации."""
|
|
response = api_client.get('/api/schedule/lessons/')
|
|
|
|
assert response.status_code == status.HTTP_401_UNAUTHORIZED
|
|
|
|
def test_update_lesson(self, authenticated_client, mentor_user, client_user):
|
|
"""Тест обновления занятия."""
|
|
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'
|
|
)
|
|
|
|
data = {'title': 'Новое название'}
|
|
response = authenticated_client.patch(f'/api/schedule/lessons/{lesson.id}/', data)
|
|
|
|
assert response.status_code == status.HTTP_200_OK
|
|
assert response.data['title'] == 'Новое название'
|
|
|