Starting to write tests

test_index
test_register_user
test_user_isnt_admin
selenium-screenshot-testing
Kevin Chung 2017-01-07 02:44:27 -05:00
parent 0e5c7aa972
commit 28d8a02ec6
5 changed files with 99 additions and 0 deletions

5
development.txt Normal file
View File

@ -0,0 +1,5 @@
-r requirements.txt
coverage>=4.1
mock>=2.0.0
nose>=1.3.7
rednose>=1.1.1

5
setup.cfg Normal file
View File

@ -0,0 +1,5 @@
[nosetests]
stop=1
verbosity=2
with-coverage=1
cover-package=CTFd

0
tests/__init__.py Normal file
View File

61
tests/helpers.py Normal file
View File

@ -0,0 +1,61 @@
from CTFd import create_app
from sqlalchemy_utils import database_exists, create_database, drop_database
from sqlalchemy.engine.url import make_url
def create_ctfd(ctf_name="CTFd", name="admin", email="admin@ctfd.io", password="password"):
app = create_app()
app.config['PRESERVE_CONTEXT_ON_EXCEPTION'] = False
app.config['TESTING'] = True
app.config['DEBUG'] = True
url = make_url(app.config['SQLALCHEMY_DATABASE_URI'])
if url.drivername == 'postgres':
url.drivername = 'postgresql'
if database_exists(url):
drop_database(url)
create_database(url)
app.db.create_all()
with app.app_context():
with app.test_client() as client:
data = {}
r = client.get('/setup') # Populate session with nonce
with client.session_transaction() as sess:
data = {
"ctf_name": ctf_name,
"name": name,
"email": email,
"password": password,
"nonce": sess.get('nonce')
}
client.post('/setup', data=data)
return app
def register_user(app, name="user", email="user@ctfd.io", password="password"):
with app.app_context():
with app.test_client() as client:
r = client.get('/register')
with client.session_transaction() as sess:
data = {
"name": name,
"email": email,
"password": password,
"nonce": sess.get('nonce')
}
client.post('/register', data=data)
def login_as_user(app, name="user", password="password"):
with app.app_context():
with app.test_client() as client:
r = client.get('/login')
with client.session_transaction() as sess:
data = {
"name": name,
"password": password,
"nonce": sess.get('nonce')
}
client.post('/login', data=data)
return client

28
tests/test_ctfd.py Normal file
View File

@ -0,0 +1,28 @@
from helpers import create_ctfd, register_user, login_as_user
from CTFd.models import Teams
def test_index():
app = create_ctfd()
with app.app_context():
with app.test_client() as client:
r = client.get('/')
assert r.status_code == 200
def test_register_user():
app = create_ctfd()
with app.app_context():
register_user(app)
team_count = app.db.session.query(app.db.func.count(Teams.id)).first()[0]
assert team_count == 2 # There's the admin user and the created user
def test_user_isnt_admin():
app = create_ctfd()
with app.app_context():
register_user(app)
client = login_as_user(app)
r = client.get('/admin/graphs')
assert r.location == "http://localhost/login"
assert r.status_code == 302