Source code for apps.account.tests

# -*- coding:Utf-8 -*-
"""
Contains all tests for login and User model.

:subtitle:`Class definitions:`
"""
from core.unittest.baseunittest import BaseUnitTest
from apps.account.models import User
from apps.healthperson.patient.models import Patient


[docs]class LoginTest(BaseUnitTest): """ Tests the login functions, login block after to many incorrect logins and functions on the User model that were not covered. """ fixtures = ['test_data/test_users.json']
[docs] def check_logins(self): """ Checks the basic tests logins """ self.login('frank@example.com') self.login('dominique@example.com') self.login('patrick@example.com') self.login('cindy@example.com') self.login('maria@example.com') self.login('john@example.com') self.login('harry@example.com') # Check upper/lower case does not matter self.login('hArRy@eXaMplE.cOm')
[docs] def check_block_system(self): """ Checks login block system which temporarily blocks the user after to many invalid login attempts. """ self.reset_stores() self.get('/logout/') self.get('/login/') email = 'frank@example.com' for i in range(1, 11): res = self.post('/login/', {'username': email, 'password': 'FAULTYPASSWORD', 'do_sms_code': '0'}, status_code=200) if i > 9: # Check block self.assertEqual(res.context['block_nr'], 10) self.assertEqual(res.context['block_time'], 5) # Check no SMS has been sent self.assertEqual(len(self.SMS_STORE), 0)
[docs] def check_invalid_login(self): """ Check that an user cannot login with a faulty password """ self.reset_stores() self.get('/logout/') self.get('/login/') # Check with everything incorrect res = self.post('/login/', {'username': 'unknown@example.com', 'password': 'FAULTYPASSWORD', 'do_sms_code': '0'}, status_code=200) self.assertEqual(len(res.context['form'].errors), 1) # Check with correct username but incorrect password res = self.post('/login/', {'username': 'john@example.com', 'password': 'FAULTYPASSWORD', 'do_sms_code': '0'}, status_code=200) self.assertEqual(len(res.context['form'].errors), 1) # Check if filled in empty res = self.post('/login/', {'username': '', 'password': '', 'do_sms_code': '0'}, status_code=200) self.assertEqual(len(res.context['form'].errors), 2) # Check no SMS has been sent self.assertEqual(len(self.SMS_STORE), 0)
[docs] def check_model(self): """ Check extra property and functions on the User model """ patient = Patient.objects.all()[0] user = User.objects.get(healthperson=patient) user.get_date_of_birth user.prefix = 'van' user.title = 'dr' self.assertEqual(user.new_questionnaire_request, False) self.assertEqual(user.new_message_count, 'no') self.assertEqual( user.full_name, user.first_name + ' ' + user.prefix + ' ' + user.last_name) self.assertEqual( user.professional_name, user.get_title_display() + ' ' + user.initials + ' ' + user.prefix + ' ' + user.last_name) self.assertEqual(user.is_deleted, False)
[docs] def test_check_logins(self): ''' Test the login features ''' self.check_logins() self.check_invalid_login() self.check_block_system() self.check_model()