Corp/backend/scripts/manual_tests/test_pagination.py
Игорь Надеин ee6e840252 Реорганизация документации и скриптов проекта
- Создана структура docs/ с категориями: completed, guides, architecture, diagnostic, in-progress, reports
- Перемещено 47+ MD файлов из корня проекта в docs/
- Удалено 6 устаревших/дублирующихся файлов
- Создана структура backend/scripts/ для тестов и утилит
- Перемещено 35 Python скриптов в backend/scripts/
- Создана структура backend/docs/ для технической документации
- Перемещено 12 MD файлов backend в backend/docs/
- Перемещены LDAP тестовые данные в backend/tests/fixtures/
- Добавлены README файлы для навигации
- Добавлены правила в .github/copilot-instructions.md для размещения документации

Результат:
- Корень проекта: только README.md
- Корень backend/: только manage.py и Django приложения
- Вся документация организована в структурированные папки
2025-12-26 13:49:51 +03:00

107 lines
3.7 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.

#!/usr/bin/env python
"""
Скрипт для тестирования пагинации в API эндпоинтах.
Запуск: python backend/test_pagination.py
"""
import os
import sys
import django
# Настройка Django
sys.path.insert(0, os.path.dirname(__file__))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'eusrr_backend.settings')
django.setup()
from django.contrib.auth import get_user_model
from api.client import get_api_client
from django.test import RequestFactory
User = get_user_model()
def test_pagination():
"""Тестирует пагинацию для всех основных эндпоинтов."""
# Создаём fake request для get_api_client
factory = RequestFactory()
# Берём первого суперпользователя
admin = User.objects.filter(is_superuser=True).first()
if not admin:
print("❌ Нет суперпользователя в БД")
return
print(f"✅ Используем пользователя: {admin.email}\n")
# Создаём fake HTTP request
fake_request = factory.get('/')
fake_request.user = admin
# Получаем API client
api = get_api_client(fake_request)
endpoints = [
('Отделы', 'v1/departments/'),
('Сотрудники', 'v1/employees/'),
('Документы', 'v1/documents/'),
('Заявления', 'v1/requests/'),
('Новости', 'v1/posts/'),
]
print("=" * 70)
print("ПРОВЕРКА ПАГИНАЦИИ API")
print("=" * 70 + "\n")
for name, endpoint in endpoints:
print(f"📍 {name} ({endpoint})")
print("-" * 70)
# Запрос без параметров
resp = api.get(endpoint)
if not resp.ok:
print(f" ❌ Ошибка: HTTP {resp.status}")
print()
continue
data = resp.json
# Проверяем формат ответа
if isinstance(data, dict):
if 'results' in data:
print(f" ✅ Пагинация ВКЛЮЧЕНА")
print(f" 📊 Всего: {data.get('count', '?')}")
print(f" 📄 На странице: {len(data.get('results', []))}")
print(f" ⏭️ Следующая: {'Да' if data.get('next') else 'Нет'}")
print(f" ⏮️ Предыдущая: {'Да' if data.get('previous') else 'Нет'}")
else:
print(f" ⚠️ Словарь БЕЗ 'results' (возможно другой формат)")
print(f" 📄 Ключи: {list(data.keys())[:5]}")
elif isinstance(data, list):
print(f" ❌ Пагинация ОТКЛЮЧЕНА (возвращается список)")
print(f" 📄 Элементов: {len(data)}")
else:
print(f" ⚠️ Неожиданный тип: {type(data)}")
# Тест с параметром page=2
print("\n 🔍 Тест page=2:")
resp2 = api.get(endpoint, params={'page': 2})
if resp2.ok:
data2 = resp2.json
if isinstance(data2, dict) and 'results' in data2:
print(f" ✅ Страница 2 работает ({len(data2.get('results', []))} элементов)")
else:
print(f" ⚠️ Страница 2: неожиданный формат")
else:
print(f" ⚠️ Страница 2: HTTP {resp2.status}")
print()
print("=" * 70)
print("ПРОВЕРКА ЗАВЕРШЕНА")
print("=" * 70)
if __name__ == '__main__':
test_pagination()