import os import tempfile import pytest import configparser from passwords import create_app from passwords.db import get_db from passwords.db import init_db @pytest.fixture def app(): db_fd, db_path = tempfile.mkstemp() app = create_app({ 'TESTING': True, 'DATABASE': db_path, 'PEPPER': 'JALAPEÑO' }) with app.app_context(): init_db() yield app os.close(db_fd) os.unlink(db_path) @pytest.fixture def client(app): with app.test_client() as client: yield client @pytest.fixture def new_user(): return "Cool New Username", "Cool New Password" def test_static_html(client): """Serves the static html page and the root path""" rv = client.get('/') # TODO: Check status and content assert rv.status == "200 OK" assert "Single-Page Login and Post" in rv.data.decode( 'utf-8') def test_signup_and_login(client, new_user): """Tests that I can log in with new credentials""" new_username, new_password = new_user create_response = client.post( '/api/signup', json={'username': new_username, 'password': new_password}) assert create_response.status == "200 OK" # response = try to log in with new_username and new_password response = client.post( '/api/login', json={'username': new_username, 'password': new_password}) # TODO: check for success assert response.status == "200 OK" def test_wrong_password(client, new_user): """Tests that I can't log in with invalid credentials""" # TODO: Try to log in with deliberately wrong password new_username, new_password = new_user create_response = client.post( '/api/signup', json={'username': new_username, 'password': new_password}) assert create_response.status == "200 OK" bad_password = new_password + "Deliberately Broken" response = client.post( '/api/login', json={'username': new_username, 'password': bad_password}) assert response.status != "200 OK" def test_duplicate_signup(client, new_user): """Tests that I can't create a new user with an existing username""" # TODO: Try to register twice with the same username new_username, new_password = new_user create_response = client.post( '/api/signup', json={'username': new_username, 'password': new_password}) assert create_response.status == "200 OK" bad_password = new_password + "Deliberately Broken" response = client.post( '/api/signup', json={'username': new_username, 'password': bad_password}) assert response.status == "302 FOUND"