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