/
tsps
/
core
Обзор
Документация
Войти
/
tsps
/
core
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
tests/api/admin/test_dashboard.py
124 строки
5 KB
Василий Петров
В дашборд добавлена загрузка за вчера
16 мар 2026, 20:47
16 мар 2026, 20:47
5f1e862
Код
Авторство
О чём код?
import pytest from datetime import datetime, timedelta, timezone from tests.utils import clean_table from app.models import Document, Judge, CaseEntity, Court, DocumentType from fastapi.testclient import TestClient from app.main import app from sqlalchemy.orm import Session client = TestClient(app) @pytest.fixture(autouse=True) def clean_tables(db_session: Session): """Очищает таблицы перед каждым тестом.""" clean_table(Document) clean_table(CaseEntity) clean_table(Court) clean_table(DocumentType) clean_table(Judge) db_session.commit() def _create_doc(db: Session, judge_id: int, court_id: int, type_id: int, hours_ago: float = 0): """ Создает тестовый документ. :param hours_ago: Смещение во времени в часах (float). 0 = сейчас, 25 = вчера + 1 час. """ case_number = f"Case-{judge_id}-{datetime.now().timestamp()}" case = CaseEntity(number=case_number) db.add(case) db.flush() doc = Document( title="Doc", type_id=type_id, case_entity_id=case.id, judge_id=judge_id, court_id=court_id, text="Text" ) if hours_ago > 0: # Используем utcnow для согласованности с сервисом doc.created_at = datetime.now(timezone.utc) - timedelta(hours=hours_ago) db.add(doc) db.flush() db.commit() return doc def test_admin_dashboard_empty(auth_headers): """Админ: пустая база -> 0.""" response = client.get("/api/admin/dashboard", headers=auth_headers) assert response.status_code == 200 data = response.json() assert data["documents_last_month"] == 0 assert data["documents_last_day"] == 0 def test_admin_dashboard_split_counts(auth_headers, db_session: Session): """ Админ: проверка разделения счетчиков. Сценарий: - 1 документ: 12 часов назад (попадает в день и в месяц) - 1 документ: 2 дня назад (48 часов) (только в месяц) - 1 документ: 40 дней назад (никуда не попадает) Ожидаемо: last_day=1, last_month=2. """ court = Court(name="Test Court Split") dtype = DocumentType(name="Test Type Split") db_session.add_all([court, dtype]) db_session.commit() db_session.refresh(court) db_session.refresh(dtype) j = Judge(last_name="Split", first_name="Split") db_session.add(j) db_session.commit() db_session.refresh(j) _create_doc(db_session, j.id, court.id, dtype.id, hours_ago=12) # 12 часов назад - входит в оба интервала _create_doc(db_session, j.id, court.id, dtype.id, hours_ago=48) # 48 часов назад (2 дня) - только в месяц _create_doc(db_session, j.id, court.id, dtype.id, hours_ago=960) # 40 дней назад response = client.get("/api/admin/dashboard", headers=auth_headers) assert response.status_code == 200 data = response.json() assert data["documents_last_day"] == 1 assert data["documents_last_month"] == 2 def test_admin_dashboard_boundary_conditions(auth_headers, db_session: Session): """ Админ: проверка граничных условий (ровно 24 часа и ровно 30 дней). Примечание: из-за миллисекунд выполнения теста точное совпадение сложно гарантировать, поэтому берем с небольшим запасом, но проверяем логику "меньше/больше". """ court = Court(name="Test Court Boundary") dtype = DocumentType(name="Test Type Boundary") db_session.add_all([court, dtype]) db_session.commit() db_session.refresh(court) db_session.refresh(dtype) j = Judge(last_name="Boundary", first_name="Boundary") db_session.add(j) db_session.commit() db_session.refresh(j) # Ровно 23 часа назад -> должен войти в last_day _create_doc(db_session, j.id, court.id, dtype.id, hours_ago=23) # Ровно 25 часов назад -> НЕ должен войти в last_day, но должен в last_month _create_doc(db_session, j.id, court.id, dtype.id, hours_ago=25) response = client.get("/api/admin/dashboard", headers=auth_headers) assert response.status_code == 200 data = response.json() assert data["documents_last_day"] == 1 assert data["documents_last_month"] == 2