Add required test suite and websocket fixes
This commit is contained in:
@@ -1,2 +1,38 @@
|
||||
def test_placeholder_ws_admin():
|
||||
assert True
|
||||
import pytest
|
||||
from starlette.websockets import WebSocketDisconnect
|
||||
|
||||
from conftest import admin_login, create_session, join_student
|
||||
|
||||
|
||||
def test_instructor_ws_requires_admin_cookie(client, sample_pool):
|
||||
sid = create_session(client, sample_pool)
|
||||
client.cookies.clear()
|
||||
with pytest.raises(WebSocketDisconnect) as exc:
|
||||
with client.websocket_connect(f"/ws/instructor/{sid}"):
|
||||
pass
|
||||
assert exc.value.code == 4001
|
||||
|
||||
|
||||
def test_instructor_controls_transition_and_broadcast(client, sample_pool):
|
||||
sid = create_session(client, sample_pool)
|
||||
join_student(client, sid, "s1", "Student One")
|
||||
admin_login(client)
|
||||
with client.websocket_connect(f"/ws/student/{sid}") as student_ws:
|
||||
assert student_ws.receive_json()["type"] == "state"
|
||||
with client.websocket_connect(f"/ws/instructor/{sid}") as admin_ws:
|
||||
assert admin_ws.receive_json()["type"] == "state"
|
||||
assert admin_ws.receive_json()["type"] == "lobby_update"
|
||||
admin_ws.send_json({"type": "open_question", "question_idx": 0, "time_limit": 2})
|
||||
student_open = student_ws.receive_json()
|
||||
assert student_open["type"] == "question_open"
|
||||
admin_open = admin_ws.receive_json()
|
||||
assert admin_open["type"] == "question_open"
|
||||
assert admin_ws.receive_json()["type"] == "live_histogram"
|
||||
|
||||
admin_ws.send_json({"type": "close_question"})
|
||||
assert student_ws.receive_json()["type"] == "question_closed"
|
||||
messages = [admin_ws.receive_json(), admin_ws.receive_json()]
|
||||
assert {msg["type"] for msg in messages} == {"question_closed", "full_leaderboard"}
|
||||
|
||||
admin_ws.send_json({"type": "next"})
|
||||
assert student_ws.receive_json()["type"] == "between_questions"
|
||||
|
||||
Reference in New Issue
Block a user