43 lines
1.7 KiB
Python
43 lines
1.7 KiB
Python
from conftest import admin_login, create_quiz, create_session, join_student
|
|
|
|
|
|
def test_admin_login_required_and_quiz_session_crud(client, sample_pool):
|
|
assert client.get("/admin/").status_code == 401
|
|
assert client.post("/admin/login", json={"password": "wrong"}).status_code == 401
|
|
|
|
admin_login(client)
|
|
assert client.get("/admin/").status_code == 200
|
|
quiz_id = create_quiz(client, sample_pool)
|
|
quizzes = client.get("/admin/api/quizzes").json()["quizzes"]
|
|
assert any(item["id"] == quiz_id for item in quizzes)
|
|
|
|
response = client.post("/admin/api/sessions", json={"quiz_id": quiz_id})
|
|
assert response.status_code == 200
|
|
payload = response.json()
|
|
assert len(payload["sid"]) == 6
|
|
assert payload["join_url"].endswith(f"?sid={payload['sid']}")
|
|
assert payload["qr_url"].startswith("data:image/svg+xml;base64,")
|
|
|
|
sessions = client.get("/admin/api/sessions").json()["sessions"]
|
|
assert sessions[0]["sid"] == payload["sid"]
|
|
|
|
|
|
def test_quiz_upload_and_csv_export(client, sample_pool):
|
|
sid = create_session(client, sample_pool)
|
|
join_student(client, sid, "s1", "Student One")
|
|
csv_response = client.get(f"/admin/api/sessions/{sid}/csv")
|
|
assert csv_response.status_code == 200
|
|
assert "student_id,name,question_idx" in csv_response.text
|
|
|
|
upload = client.post(
|
|
"/admin/api/quizzes/upload",
|
|
files={"file": ("pool.json", __import__("json").dumps(sample_pool), "application/json")},
|
|
)
|
|
assert upload.status_code == 200
|
|
|
|
|
|
def test_invalid_quiz_and_session_errors(client):
|
|
admin_login(client)
|
|
assert client.post("/admin/api/quizzes", json={"pool_json": {"title": "bad", "questions": []}}).status_code == 400
|
|
assert client.post("/admin/api/sessions", json={"quiz_id": 999}).status_code == 404
|