kappa123/kappa123/tests/test_user.py

117 lines
4.5 KiB
Python

# kappa123/server/tests/test_user.py
import datetime
import unittest
from flask_login import current_user
from base import BaseTestCase
from kappa123.server import bcrypt
from kappa123.server.models import User
from kappa123.server.user.forms import LoginForm
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
)
self.assertIn(b'Welcome', response.data)
self.assertIn(b'Logout', response.data)
self.assertIn(b'Members', response.data)
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)
self.assertIn(b'You were logged out. Bye!', response.data)
self.assertFalse(current_user.is_active)
def test_logout_route_requires_login(self):
# Ensure logout route requres logged in user.
response = self.client.get('/logout', follow_redirects=True)
self.assertIn(b'Please log in to access this page', response.data)
def test_member_route_requires_login(self):
# Ensure member route requres logged in user.
response = self.client.get('/members', follow_redirects=True)
self.assertIn(b'Please log in to access this page', response.data)
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)
self.assertIn(b'Invalid email and/or password.', response.data)
def test_register_route(self):
# Ensure about route behaves correctly.
response = self.client.get('/register', follow_redirects=True)
self.assertIn(b'<h1>Please Register</h1>\n', response.data)
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
)
self.assertIn(b'Welcome', response.data)
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()