2017-07-01 17:48:18 -07:00
|
|
|
# kappa123/server/tests/test_user.py
|
2015-01-21 08:32:17 -08:00
|
|
|
|
|
|
|
|
|
|
|
import datetime
|
|
|
|
import unittest
|
|
|
|
|
2016-07-17 03:47:20 -07:00
|
|
|
from flask_login import current_user
|
2015-01-21 08:32:17 -08:00
|
|
|
|
|
|
|
from base import BaseTestCase
|
2017-07-01 17:48:18 -07:00
|
|
|
from kappa123.server import bcrypt
|
|
|
|
from kappa123.server.models import User
|
|
|
|
from kappa123.server.user.forms import LoginForm
|
2015-01-21 08:32:17 -08:00
|
|
|
|
|
|
|
|
|
|
|
class TestUserBlueprint(BaseTestCase):
|
|
|
|
|
|
|
|
def test_correct_login(self):
|
|
|
|
# Ensure login behaves correctly with correct credentials.
|
|
|
|
with self.client:
|
|
|
|
response = self.client.post(
|
|
|
|
'/login',
|
|
|
|
data=dict(email="ad@min.com", password="admin_user"),
|
|
|
|
follow_redirects=True
|
|
|
|
)
|
2015-04-16 16:06:17 -07:00
|
|
|
self.assertIn(b'Welcome', response.data)
|
|
|
|
self.assertIn(b'Logout', response.data)
|
|
|
|
self.assertIn(b'Members', response.data)
|
2015-01-21 08:32:17 -08:00
|
|
|
self.assertTrue(current_user.email == "ad@min.com")
|
|
|
|
self.assertTrue(current_user.is_active())
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
|
|
def test_logout_behaves_correctly(self):
|
|
|
|
# Ensure logout behaves correctly - regarding the session.
|
|
|
|
with self.client:
|
|
|
|
self.client.post(
|
|
|
|
'/login',
|
|
|
|
data=dict(email="ad@min.com", password="admin_user"),
|
|
|
|
follow_redirects=True
|
|
|
|
)
|
|
|
|
response = self.client.get('/logout', follow_redirects=True)
|
2015-04-16 16:06:17 -07:00
|
|
|
self.assertIn(b'You were logged out. Bye!', response.data)
|
2015-12-25 05:00:00 -08:00
|
|
|
self.assertFalse(current_user.is_active)
|
2015-01-21 08:32:17 -08:00
|
|
|
|
|
|
|
def test_logout_route_requires_login(self):
|
|
|
|
# Ensure logout route requres logged in user.
|
|
|
|
response = self.client.get('/logout', follow_redirects=True)
|
2015-04-16 16:06:17 -07:00
|
|
|
self.assertIn(b'Please log in to access this page', response.data)
|
2015-01-21 08:32:17 -08:00
|
|
|
|
|
|
|
def test_member_route_requires_login(self):
|
|
|
|
# Ensure member route requres logged in user.
|
|
|
|
response = self.client.get('/members', follow_redirects=True)
|
2015-04-16 16:06:17 -07:00
|
|
|
self.assertIn(b'Please log in to access this page', response.data)
|
2015-01-21 08:32:17 -08:00
|
|
|
|
|
|
|
def test_validate_success_login_form(self):
|
|
|
|
# Ensure correct data validates.
|
|
|
|
form = LoginForm(email='ad@min.com', password='admin_user')
|
|
|
|
self.assertTrue(form.validate())
|
|
|
|
|
|
|
|
def test_validate_invalid_email_format(self):
|
|
|
|
# Ensure invalid email format throws error.
|
|
|
|
form = LoginForm(email='unknown', password='example')
|
|
|
|
self.assertFalse(form.validate())
|
|
|
|
|
|
|
|
def test_get_by_id(self):
|
|
|
|
# Ensure id is correct for the current/logged in user.
|
|
|
|
with self.client:
|
|
|
|
self.client.post('/login', data=dict(
|
|
|
|
email='ad@min.com', password='admin_user'
|
|
|
|
), follow_redirects=True)
|
|
|
|
self.assertTrue(current_user.id == 1)
|
|
|
|
|
|
|
|
def test_registered_on_defaults_to_datetime(self):
|
|
|
|
# Ensure that registered_on is a datetime.
|
|
|
|
with self.client:
|
|
|
|
self.client.post('/login', data=dict(
|
|
|
|
email='ad@min.com', password='admin_user'
|
|
|
|
), follow_redirects=True)
|
|
|
|
user = User.query.filter_by(email='ad@min.com').first()
|
|
|
|
self.assertIsInstance(user.registered_on, datetime.datetime)
|
|
|
|
|
|
|
|
def test_check_password(self):
|
|
|
|
# Ensure given password is correct after unhashing.
|
|
|
|
user = User.query.filter_by(email='ad@min.com').first()
|
|
|
|
self.assertTrue(bcrypt.check_password_hash(user.password, 'admin_user'))
|
|
|
|
self.assertFalse(bcrypt.check_password_hash(user.password, 'foobar'))
|
|
|
|
|
|
|
|
def test_validate_invalid_password(self):
|
|
|
|
# Ensure user can't login when the pasword is incorrect.
|
|
|
|
with self.client:
|
|
|
|
response = self.client.post('/login', data=dict(
|
|
|
|
email='ad@min.com', password='foo_bar'
|
|
|
|
), follow_redirects=True)
|
2015-04-16 16:06:17 -07:00
|
|
|
self.assertIn(b'Invalid email and/or password.', response.data)
|
2015-01-21 08:32:17 -08:00
|
|
|
|
|
|
|
def test_register_route(self):
|
|
|
|
# Ensure about route behaves correctly.
|
|
|
|
response = self.client.get('/register', follow_redirects=True)
|
2015-04-16 16:06:17 -07:00
|
|
|
self.assertIn(b'<h1>Please Register</h1>\n', response.data)
|
2015-01-21 08:32:17 -08:00
|
|
|
|
|
|
|
def test_user_registration(self):
|
|
|
|
# Ensure registration behaves correctlys.
|
|
|
|
with self.client:
|
|
|
|
response = self.client.post(
|
|
|
|
'/register',
|
|
|
|
data=dict(email="test@tester.com", password="testing",
|
|
|
|
confirm="testing"),
|
|
|
|
follow_redirects=True
|
|
|
|
)
|
2015-04-16 16:06:17 -07:00
|
|
|
self.assertIn(b'Welcome', response.data)
|
2015-01-21 08:32:17 -08:00
|
|
|
self.assertTrue(current_user.email == "test@tester.com")
|
|
|
|
self.assertTrue(current_user.is_active())
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest.main()
|