File size: 1,973 Bytes
7c46845
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from app.auth import create_access_token, hash_password
from app.metrics import record_query_response_time
from app.models import Document, User


def test_admin_stats_requires_admin(client, auth_headers):
    response = client.get("/api/v1/admin/stats", headers=auth_headers)

    assert response.status_code == 403
    assert response.json()["error"]["message"] == "Admin access required"


def test_admin_stats_returns_aggregate_metrics(client, db_session):
    admin = User(
        username="admin",
        email="admin@example.com",
        hashed_password=hash_password("password123"),
        is_admin=True,
    )
    regular = User(
        username="regular",
        email="regular@example.com",
        hashed_password=hash_password("password123"),
    )
    db_session.add_all([admin, regular])
    db_session.commit()
    db_session.refresh(admin)
    db_session.refresh(regular)

    db_session.add_all(
        [
            Document(
                user_id=regular.id,
                filename="first.pdf",
                original_name="first.pdf",
                file_size=100,
                status="ready",
            ),
            Document(
                user_id=regular.id,
                filename="notes.txt",
                original_name="notes.txt",
                file_size=50,
                status="ready",
            ),
        ]
    )
    db_session.commit()

    record_query_response_time(0.25)

    token = create_access_token(admin.id)
    response = client.get(
        "/api/v1/admin/stats",
        headers={"Authorization": f"Bearer {token}"},
    )

    assert response.status_code == 200
    payload = response.json()
    assert payload["total_users"] == 2
    assert payload["total_pdfs_uploaded"] == 1
    assert payload["average_query_response_time_ms"] > 0
    assert payload["query_count"] >= 1
    assert payload["disk_space_usage"]["total_bytes"] > 0
    assert payload["disk_space_usage"]["usage_percent"] >= 0