From 976b191b535018827e8d8f1eadefb2e352179e19 Mon Sep 17 00:00:00 2001 From: Kevin Chung Date: Fri, 14 Aug 2020 12:20:41 -0400 Subject: [PATCH] Fix submission search (#1605) * Fix submission searching in Admin Panel --- CTFd/utils/helpers/models.py | 4 ++-- tests/admin/test_submissions.py | 41 +++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/CTFd/utils/helpers/models.py b/CTFd/utils/helpers/models.py index 3f1a986a..a0b3b788 100644 --- a/CTFd/utils/helpers/models.py +++ b/CTFd/utils/helpers/models.py @@ -11,13 +11,13 @@ def build_model_filters(model, query, field, extra_columns=None): column = getattr(model, field) if type(column.type) == sqlalchemy.sql.sqltypes.Integer: - _filter = column.op("==")(query) + _filter = column.op("=")(query) else: _filter = column.like(f"%{query}%") filters.append(_filter) else: if field in extra_columns: column = extra_columns[field] - _filter = column.op("==")(query) + _filter = column.op("=")(query) filters.append(_filter) return filters diff --git a/tests/admin/test_submissions.py b/tests/admin/test_submissions.py index e69de29b..bd43591c 100644 --- a/tests/admin/test_submissions.py +++ b/tests/admin/test_submissions.py @@ -0,0 +1,41 @@ +from CTFd.models import Users +from tests.helpers import ( + create_ctfd, + destroy_ctfd, + login_as_user, + register_user, + simulate_user_activity, +) + + +def test_browse_admin_submissions(): + """Test that an admin can create a challenge properly""" + app = create_ctfd() + with app.app_context(): + register_user(app, name="RegisteredUser") + user = Users.query.filter_by(id=2).first() + simulate_user_activity(app.db, user) + + admin = login_as_user(app, name="admin", password="password") + + # It's difficult to do better checks here becase we're just doing string search. + # incorrect includes the word correct and the navbar has correct and incorrect in it + r = admin.get("/admin/submissions") + assert r.status_code == 200 + assert "RegisteredUser" in r.get_data(as_text=True) + assert "correct" in r.get_data(as_text=True) + assert "incorrect" in r.get_data(as_text=True) + + r = admin.get("/admin/submissions/correct") + assert r.status_code == 200 + assert "RegisteredUser" in r.get_data(as_text=True) + assert "correct" in r.get_data(as_text=True) + + r = admin.get("/admin/submissions/incorrect") + assert r.status_code == 200 + assert "RegisteredUser" in r.get_data(as_text=True) + + r = admin.get("/admin/submissions/correct?field=challenge_id&q=1") + assert r.status_code == 200 + assert "RegisteredUser" in r.get_data(as_text=True) + destroy_ctfd(app)