backup
This commit is contained in:
128
tests/api/test_analytics_endpoints.py
Normal file
128
tests/api/test_analytics_endpoints.py
Normal file
@@ -0,0 +1,128 @@
|
||||
"""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]
|
||||
Reference in New Issue
Block a user