init CTFd source
This commit is contained in:
61
tests/challenges/test_base_challenge.py
Normal file
61
tests/challenges/test_base_challenge.py
Normal file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import pytest
|
||||
from flask import request
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
from CTFd.exceptions.challenges import ChallengeSolveException
|
||||
from CTFd.models import Solves
|
||||
from CTFd.plugins.challenges import BaseChallenge
|
||||
from tests.helpers import (
|
||||
create_ctfd,
|
||||
destroy_ctfd,
|
||||
gen_challenge,
|
||||
gen_solve,
|
||||
gen_team,
|
||||
gen_user,
|
||||
)
|
||||
|
||||
|
||||
def test_base_challenge_solve_creates_solve_when_missing():
|
||||
"""Test that BaseChallenge.solve() creates a solve if it doesn't exist"""
|
||||
app = create_ctfd()
|
||||
with app.app_context():
|
||||
challenge = gen_challenge(app.db)
|
||||
user = gen_user(app.db, name="solver", email="solver@example.com")
|
||||
|
||||
assert Solves.query.count() == 0
|
||||
|
||||
with app.test_request_context(
|
||||
json={"submission": "flag"},
|
||||
environ_base={"REMOTE_ADDR": "127.0.0.1"},
|
||||
):
|
||||
BaseChallenge.solve(user, None, challenge, request)
|
||||
|
||||
assert Solves.query.count() == 1
|
||||
destroy_ctfd(app)
|
||||
|
||||
|
||||
def test_base_challenge_solve_raises_on_duplicate_solve():
|
||||
"""Test that BaseChallenge.solve() raises ChallengeSolveException on duplicate solve"""
|
||||
app = create_ctfd(user_mode="teams")
|
||||
with app.app_context():
|
||||
challenge = gen_challenge(app.db)
|
||||
team = gen_team(app.db, member_count=1)
|
||||
user = team.members[0]
|
||||
|
||||
gen_solve(app.db, user_id=user.id, team_id=team.id, challenge_id=challenge.id)
|
||||
assert Solves.query.count() == 1
|
||||
|
||||
with app.test_request_context(
|
||||
json={"submission": "flag"},
|
||||
environ_base={"REMOTE_ADDR": "127.0.0.1"},
|
||||
):
|
||||
with pytest.raises(ChallengeSolveException) as exc:
|
||||
BaseChallenge.solve(user, team, challenge, request)
|
||||
|
||||
assert isinstance(exc.value.__cause__, IntegrityError)
|
||||
|
||||
assert Solves.query.count() == 1
|
||||
destroy_ctfd(app)
|
||||
Reference in New Issue
Block a user