Skip to content

Commit c6b4669

Browse files
authored
Merge pull request #484 from denuoweb/codex/fix-submissions-loading-error
Fix participant access to quest submissions
2 parents 7327972 + b73ffcb commit c6b4669

File tree

2 files changed

+91
-2
lines changed

2 files changed

+91
-2
lines changed

app/quests.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,7 @@ def get_quest_submissions(quest_id):
675675
authorized = (
676676
current_user.is_super_admin
677677
or current_user.is_admin_for_game(quest.game_id)
678-
or current_user in quest.game.participants
678+
or current_user in quest.game.game_participants
679679
)
680680
if not authorized and album_code != quest.game.album_code:
681681
return jsonify({"error": "Invalid album code"}), 403
@@ -1165,7 +1165,7 @@ def get_all_submissions():
11651165
authorized = (
11661166
current_user.is_super_admin
11671167
or current_user.is_admin_for_game(game_id)
1168-
or current_user in game.participants
1168+
or current_user in game.game_participants
11691169
)
11701170
if not authorized and album_code != game.album_code:
11711171
return jsonify({"error": "Invalid album code"}), 403

tests/test_album_code_access.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import pytest
22
from datetime import datetime, timedelta, timezone
33

4+
from flask_login import login_user
45
from app import create_app, db
56
from app.models.game import Game
67
from app.models.quest import Quest, QuestSubmission
@@ -29,6 +30,14 @@ def client(app):
2930
return app.test_client()
3031

3132

33+
def login_as(client, user):
34+
with client.session_transaction() as sess:
35+
sess["_user_id"] = str(user.id)
36+
sess["_fresh"] = True
37+
with client.application.test_request_context():
38+
login_user(user)
39+
40+
3241
def test_album_requires_code(client, app):
3342
with app.app_context():
3443
admin = User(username="admin", email="admin@example.com", license_agreed=True)
@@ -99,3 +108,83 @@ def test_quest_submissions_requires_code(client, app):
99108
assert resp.status_code == 200
100109
data = resp.get_json()
101110
assert len(data) == 1
111+
112+
113+
def test_participant_can_view_all_submissions_without_code(client, app):
114+
with app.app_context():
115+
admin = User(username="admin", email="admin@example.com", license_agreed=True)
116+
admin.set_password("pw")
117+
db.session.add(admin)
118+
db.session.commit()
119+
120+
game = Game(
121+
title="Game",
122+
start_date=datetime.now(timezone.utc) - timedelta(days=1),
123+
end_date=datetime.now(timezone.utc) + timedelta(days=1),
124+
admin_id=admin.id,
125+
)
126+
db.session.add(game)
127+
db.session.commit()
128+
129+
quest = Quest(title="Quest", points=1, game=game)
130+
db.session.add(quest)
131+
db.session.commit()
132+
133+
submission = QuestSubmission(quest_id=quest.id, user_id=admin.id)
134+
db.session.add(submission)
135+
db.session.commit()
136+
137+
participant = User(username="p", email="p@example.com", license_agreed=True)
138+
participant.set_password("pw")
139+
db.session.add(participant)
140+
db.session.commit()
141+
participant.participated_games.append(game)
142+
db.session.commit()
143+
144+
gid = game.id
145+
login_as(client, participant)
146+
147+
resp = client.get(f"/quests/quest/all_submissions?game_id={gid}")
148+
assert resp.status_code == 200
149+
data = resp.get_json()
150+
assert len(data["submissions"]) == 1
151+
152+
153+
def test_participant_can_view_quest_submissions_without_code(client, app):
154+
with app.app_context():
155+
admin = User(username="admin", email="admin@example.com", license_agreed=True)
156+
admin.set_password("pw")
157+
db.session.add(admin)
158+
db.session.commit()
159+
160+
game = Game(
161+
title="Game",
162+
start_date=datetime.now(timezone.utc) - timedelta(days=1),
163+
end_date=datetime.now(timezone.utc) + timedelta(days=1),
164+
admin_id=admin.id,
165+
)
166+
db.session.add(game)
167+
db.session.commit()
168+
169+
quest = Quest(title="Quest", points=1, game=game)
170+
db.session.add(quest)
171+
db.session.commit()
172+
173+
submission = QuestSubmission(quest_id=quest.id, user_id=admin.id)
174+
db.session.add(submission)
175+
db.session.commit()
176+
177+
participant = User(username="p", email="p@example.com", license_agreed=True)
178+
participant.set_password("pw")
179+
db.session.add(participant)
180+
db.session.commit()
181+
participant.participated_games.append(game)
182+
db.session.commit()
183+
184+
qid = quest.id
185+
login_as(client, participant)
186+
187+
resp = client.get(f"/quests/quest/{qid}/submissions")
188+
assert resp.status_code == 200
189+
data = resp.get_json()
190+
assert len(data) == 1

0 commit comments

Comments
 (0)