File size: 1,720 Bytes
c1d887c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import sys
from unittest.mock import MagicMock

# Mock Firebase admin before importing app
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))

# Mock firebase_admin to bypass initialization
mock_firebase_admin = MagicMock()
mock_firebase_admin.initialize_app = MagicMock()
mock_firebase_admin.get_app = MagicMock()
sys.modules["firebase_admin"] = mock_firebase_admin
sys.modules["firebase_admin.credentials"] = MagicMock()
sys.modules["firebase_admin.firestore"] = MagicMock()

os.environ["HF_TOKEN"] = "test-token-for-testing"
os.environ["DEEPSEEK_API_KEY"] = "test-ds-key-for-testing"

from fastapi.testclient import TestClient
import main as main_module

# Mock Firebase auth verification so protected endpoints can run in tests
main_module._firebase_ready = True
main_module._init_firebase_admin = lambda: None
main_module.firebase_firestore = None
main_module.firebase_auth = MagicMock()
main_module.firebase_auth.verify_id_token = MagicMock(
    return_value={
        "uid": "test-teacher-uid",
        "email": "teacher@example.com",
        "role": "teacher",
    }
)

app = main_module.app
client = TestClient(app, headers={"Authorization": "Bearer test-auth-token"})


def test_quiz_cap():
    """Test that quiz generation capped at 10 items returns 400."""
    response = client.post("/api/quiz/generate", json={
        "topics": ["Algebra"],
        "subject": "Mathematics",
        "gradeLevel": "Grade 11",
        "numQuestions": 15,
    })
    assert response.status_code == 400, f"Expected 400, got {response.status_code}: {response.text}"
    assert "capped at 10 items" in response.json()["detail"]
    print("Test passed!")


if __name__ == "__main__":
    test_quiz_cap()