Aniworld/tests/api/test_analytics_endpoints.py
2025-10-22 09:20:35 +02:00

129 lines
3.7 KiB
Python

"""Integration tests for analytics API endpoints.
Tests analytics API endpoints including download statistics,
series popularity, storage analysis, and performance reports.
"""
from unittest.mock import AsyncMock, patch
import pytest
from fastapi.testclient import TestClient
from src.server.fastapi_app import app
@pytest.fixture
def client():
"""Create test client."""
return TestClient(app)
def test_analytics_downloads_endpoint(client):
"""Test GET /api/analytics/downloads endpoint."""
with patch(
"src.server.api.analytics.get_db"
) as mock_get_db:
mock_db = AsyncMock()
mock_get_db.return_value = mock_db
response = client.get("/api/analytics/downloads?days=30")
assert response.status_code in [200, 422, 500]
def test_analytics_series_popularity_endpoint(client):
"""Test GET /api/analytics/series-popularity endpoint."""
with patch(
"src.server.api.analytics.get_db"
) as mock_get_db:
mock_db = AsyncMock()
mock_get_db.return_value = mock_db
response = client.get("/api/analytics/series-popularity?limit=10")
assert response.status_code in [200, 422, 500]
def test_analytics_storage_endpoint(client):
"""Test GET /api/analytics/storage endpoint."""
with patch("psutil.disk_usage") as mock_disk:
mock_disk.return_value = {
"total": 1024 * 1024 * 1024,
"used": 512 * 1024 * 1024,
"free": 512 * 1024 * 1024,
"percent": 50.0,
}
response = client.get("/api/analytics/storage")
assert response.status_code in [200, 500]
def test_analytics_performance_endpoint(client):
"""Test GET /api/analytics/performance endpoint."""
with patch(
"src.server.api.analytics.get_db"
) as mock_get_db:
mock_db = AsyncMock()
mock_get_db.return_value = mock_db
response = client.get("/api/analytics/performance?hours=24")
assert response.status_code in [200, 422, 500]
def test_analytics_summary_endpoint(client):
"""Test GET /api/analytics/summary endpoint."""
with patch(
"src.server.api.analytics.get_db"
) as mock_get_db:
mock_db = AsyncMock()
mock_get_db.return_value = mock_db
response = client.get("/api/analytics/summary")
assert response.status_code in [200, 500]
def test_analytics_downloads_with_query_params(client):
"""Test /api/analytics/downloads with different query params."""
with patch(
"src.server.api.analytics.get_db"
) as mock_get_db:
mock_db = AsyncMock()
mock_get_db.return_value = mock_db
response = client.get("/api/analytics/downloads?days=7")
assert response.status_code in [200, 422, 500]
def test_analytics_series_with_different_limits(client):
"""Test /api/analytics/series-popularity with different limits."""
with patch(
"src.server.api.analytics.get_db"
) as mock_get_db:
mock_db = AsyncMock()
mock_get_db.return_value = mock_db
for limit in [5, 10, 20]:
response = client.get(
f"/api/analytics/series-popularity?limit={limit}"
)
assert response.status_code in [200, 422, 500]
def test_analytics_performance_with_different_hours(client):
"""Test /api/analytics/performance with different hour ranges."""
with patch(
"src.server.api.analytics.get_db"
) as mock_get_db:
mock_db = AsyncMock()
mock_get_db.return_value = mock_db
for hours in [1, 12, 24, 72]:
response = client.get(
f"/api/analytics/performance?hours={hours}"
)
assert response.status_code in [200, 422, 500]