forked from johnny603/lux
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_web_api.py
More file actions
81 lines (61 loc) · 2.37 KB
/
Copy pathtest_web_api.py
File metadata and controls
81 lines (61 loc) · 2.37 KB
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import re
from io import BytesIO
import server
def test_web_browser_and_dashboard_render():
client = server.app.test_client()
response = client.get("/web")
assert response.status_code == 200
assert b"Puzzle Browser" in response.data
response = client.get("/dashboard")
assert response.status_code == 200
assert b"Progress Dashboard" in response.data
response = client.get("/profile")
assert response.status_code == 200
assert b"User Profile" in response.data
response = client.get("/leaderboard")
assert response.status_code == 200
assert b"Leaderboard" in response.data
def test_versioned_api_endpoints():
client = server.app.test_client()
response = client.get("/api/v1/levels")
assert response.status_code == 200
assert isinstance(response.get_json(), list)
response = client.get("/api/v1/level/1")
assert response.status_code == 200
assert response.get_json()["id"] == "1"
response = client.get("/api/v1/progress")
assert response.status_code == 200
payload = response.get_json()
assert "progress" in payload
assert "achievements" in payload
response = client.get("/api/v1/profile")
assert response.status_code == 200
assert "display_name" in response.get_json()
response = client.get("/api/v1/leaderboard")
assert response.status_code == 200
assert "entries" in response.get_json()
response = client.get("/api/v1/learning-path")
assert response.status_code == 200
assert "recommended_levels" in response.get_json()
response = client.get("/api/v1/game/daily")
assert response.status_code == 200
assert "level" in response.get_json()
def test_web_submission_flow(monkeypatch):
client = server.app.test_client()
monkeypatch.setattr(
server, "run_docker", lambda files, script: {"passed": True, "exit_code": 0}
)
page = client.get("/puzzles/5")
assert page.status_code == 200
token_match = re.search(r'name="csrf_token" value="([^"]+)"', page.get_data(as_text=True))
assert token_match is not None
response = client.post(
"/puzzles/5/submit",
data={
"csrf_token": token_match.group(1),
"answer": "",
"files": (BytesIO(b"int main(void){return 0;}"), "answer.c"),
},
)
assert response.status_code == 200
assert b"Submission accepted" in response.data