def test_user_logged_in_signal(self): # Subscribe to signals for user login signal_receiver = SignalReceiver() user_logged_in.connect(signal_receiver.signal_user_receiver_function) # Create a user. with self.app.app_context(): User.create( username='******', given_name='Randall', surname='Degges', email='*****@*****.**', password='******', ) # Attempt a login using username and password. with self.app.test_client() as c: resp = c.post('/login', data={ 'login': '******', 'password': '******', }) self.assertEqual(resp.status_code, 302) # Check that signal for user login is received self.assertEqual(len(signal_receiver.received_signals), 1) received_signal = signal_receiver.received_signals[0] # User instance is received self.assertIsInstance(received_signal[1], User) # Correct user instance is received logged_in_user = received_signal[1] self.assertEqual(logged_in_user.email, '*****@*****.**') self.assertEqual(logged_in_user.surname, 'Degges')
def test_redirect_to_register_url(self): # Create a user. with self.app.app_context(): User.create( username = '******', given_name = 'Randall', surname = 'Degges', email = '*****@*****.**', password = '******', ) # Setting redirect URLs to something that is easy to check stormpath_redirect_url = '/redirect_for_login' stormpath_registration_redirect_url = '/redirect_for_registration' self.app.config['STORMPATH_REDIRECT_URL'] = stormpath_redirect_url self.app.config['STORMPATH_REGISTRATION_REDIRECT_URL'] = \ stormpath_registration_redirect_url with self.app.test_client() as c: # Attempt a login using username and password. resp = c.post( '/login', data={'login': '******', 'password': '******',}) self.assertEqual(resp.status_code, 302) location = resp.headers.get('location') self.assertTrue('redirect_for_login' in location) self.assertFalse('redirect_for_registration' in location)
def test_repr(self): with self.app.app_context(): # Ensure `email` is shown in the output if no `username` is # specified. user = User.create( email = '*****@*****.**', password = '******', given_name = 'Randall', surname = 'Degges', ) self.assertTrue(user.email in user.__repr__()) # Delete this user. user.delete() # Ensure `username` is shown in the output if specified. user = User.create( username = '******', email = '*****@*****.**', password = '******', given_name = 'Randall', surname = 'Degges', ) self.assertTrue(user.username in user.__repr__()) # Ensure Stormpath `href` is shown in the output. self.assertTrue(user.href in user.__repr__())
def test_user_logged_in_signal(self): # Subscribe to signals for user login signal_receiver = SignalReceiver() user_logged_in.connect(signal_receiver.signal_user_receiver_function) # Create a user. with self.app.app_context(): User.create( username = '******', given_name = 'Randall', surname = 'Degges', email = '*****@*****.**', password = '******', ) # Attempt a login using username and password. with self.app.test_client() as c: resp = c.post('/login', data={ 'login': '******', 'password': '******', }) self.assertEqual(resp.status_code, 302) # Check that signal for user login is received self.assertEqual(len(signal_receiver.received_signals), 1) received_signal = signal_receiver.received_signals[0] # User instance is received self.assertIsInstance(received_signal[1], User) # Correct user instance is received logged_in_user = received_signal[1] self.assertEqual(logged_in_user.email, '*****@*****.**') self.assertEqual(logged_in_user.surname, 'Degges')
def test_from_login(self): with self.app.app_context(): # First we'll create a user. user = User.create( email = '*****@*****.**', password = '******', given_name = 'Randall', surname = 'Degges', username = '******', ) original_href = user.href # Now we'll try to retrieve that user by specifing the user's # `email` and `password`. user = User.from_login( '*****@*****.**', 'woot1LoveCookies!', ) self.assertEqual(user.href, original_href) # Now we'll try to retrieve that user by specifying the user's # `username` and `password`. user = User.from_login( 'rdegges', 'woot1LoveCookies!', ) self.assertEqual(user.href, original_href)
def test_create(self): with self.app.app_context(): # Ensure all requied fields are properly set. user = User.create( email='*****@*****.**', password='******', given_name='Randall', surname='Degges', ) self.assertEqual(user.email, '*****@*****.**') self.assertEqual(user.given_name, 'Randall') self.assertEqual(user.surname, 'Degges') self.assertEqual(user.username, '*****@*****.**') self.assertEqual(user.middle_name, None) self.assertEqual( dict(user.custom_data), { 'created_at': user.custom_data.created_at, 'modified_at': user.custom_data.modified_at, }) # Delete this user. user.delete() # Ensure all optional parameters are properly set. user = User.create( email='*****@*****.**', password='******', given_name='Randall', surname='Degges', username='******', middle_name='Clark', custom_data={ 'favorite_shows': ['Code Monkeys', 'The IT Crowd'], 'friends': ['Sami', 'Alven'], 'favorite_place': { 'city': 'Santa Cruz', 'state': 'California', 'reason': 'Beautiful landscape.', 'amount_of_likage': 99.9999, }, }, ) self.assertEqual(user.username, 'rdegges') self.assertEqual(user.middle_name, 'Clark') self.assertEqual( dict(user.custom_data), { 'favorite_shows': ['Code Monkeys', 'The IT Crowd'], 'friends': ['Sami', 'Alven'], 'favorite_place': { 'city': 'Santa Cruz', 'state': 'California', 'reason': 'Beautiful landscape.', 'amount_of_likage': 99.9999, }, 'created_at': user.custom_data.created_at, 'modified_at': user.custom_data.modified_at, })
def test_create(self): with self.app.app_context(): # Ensure all requied fields are properly set. user = User.create( email = '*****@*****.**', password = '******', given_name = 'Randall', surname = 'Degges', ) self.assertEqual(user.email, '*****@*****.**') self.assertEqual(user.given_name, 'Randall') self.assertEqual(user.surname, 'Degges') self.assertEqual(user.username, '*****@*****.**') self.assertEqual(user.middle_name, None) self.assertEqual( dict(user.custom_data), { 'created_at': user.custom_data.created_at, 'modified_at': user.custom_data.modified_at, }) # Delete this user. user.delete() # Ensure all optional parameters are properly set. user = User.create( email = '*****@*****.**', password = '******', given_name = 'Randall', surname = 'Degges', username = '******', middle_name = 'Clark', custom_data = { 'favorite_shows': ['Code Monkeys', 'The IT Crowd'], 'friends': ['Sami', 'Alven'], 'favorite_place': { 'city': 'Santa Cruz', 'state': 'California', 'reason': 'Beautiful landscape.', 'amount_of_likage': 99.9999, }, }, ) self.assertEqual(user.username, 'rdegges') self.assertEqual(user.middle_name, 'Clark') self.assertEqual(dict(user.custom_data), { 'favorite_shows': ['Code Monkeys', 'The IT Crowd'], 'friends': ['Sami', 'Alven'], 'favorite_place': { 'city': 'Santa Cruz', 'state': 'California', 'reason': 'Beautiful landscape.', 'amount_of_likage': 99.9999, }, 'created_at': user.custom_data.created_at, 'modified_at': user.custom_data.modified_at, })
def test_user_is_updated_signal(self): # Subscribe to signals for user update signal_receiver = SignalReceiver() user_updated.connect(signal_receiver.signal_user_receiver_function) with self.app.app_context(): # Ensure all requied fields are properly set. user = User.create( email = '*****@*****.**', password = '******', given_name = 'Randall', surname = 'Degges', ) user.middle_name = 'Clark' user.save() # Check that signal for user update is received self.assertEqual(len(signal_receiver.received_signals), 1) received_signal = signal_receiver.received_signals[0] # User instance is received self.assertIsInstance(received_signal[1], User) # Correct user instance is received updated_user = received_signal[1] self.assertEqual(updated_user.email, '*****@*****.**') self.assertEqual(updated_user.middle_name, 'Clark')
def test_user_is_updated_signal(self): # Subscribe to signals for user update signal_receiver = SignalReceiver() user_updated.connect(signal_receiver.signal_user_receiver_function) with self.app.app_context(): # Ensure all requied fields are properly set. user = User.create( email='*****@*****.**', password='******', given_name='Randall', surname='Degges', ) user.middle_name = 'Clark' user.save() # Check that signal for user update is received self.assertEqual(len(signal_receiver.received_signals), 1) received_signal = signal_receiver.received_signals[0] # User instance is received self.assertIsInstance(received_signal[1], User) # Correct user instance is received updated_user = received_signal[1] self.assertEqual(updated_user.email, '*****@*****.**') self.assertEqual(updated_user.middle_name, 'Clark')
def test_email_login(self): # Create a user. with self.app.app_context(): User.create( given_name = 'Randall', surname = 'Degges', email = '*****@*****.**', password = '******', ) # Attempt a login using email and password. with self.app.test_client() as c: resp = c.post('/login', data={ 'login': '******', 'password': '******', }) self.assertEqual(resp.status_code, 302)
def test_get_id(self): with self.app.app_context(): user = User.create( email = '*****@*****.**', password = '******', given_name = 'Randall', surname = 'Degges', ) self.assertEqual(user.get_id(), user.href)
def test_logout_works(self): # Create a user. with self.app.app_context(): User.create( given_name = 'Randall', surname = 'Degges', email = '*****@*****.**', password = '******', ) with self.app.test_client() as c: # Log this user in. resp = c.post('/login', data={ 'login': '******', 'password': '******', }) self.assertEqual(resp.status_code, 302) # Log this user out. resp = c.get('/logout') self.assertEqual(resp.status_code, 302)
def test_is_authenticated(self): with self.app.app_context(): # This should always return true. If a user account can be # fetched, that means it must be authenticated. user = User.create( email = '*****@*****.**', password = '******', given_name = 'Randall', surname = 'Degges', ) self.assertEqual(user.is_authenticated(), True)
def test_is_anonymous(self): with self.app.app_context(): # There is no way we can be anonymous, as Stormpath doesn't support # anonymous users (that is a job better suited for a cache or # something). user = User.create( email = '*****@*****.**', password = '******', given_name = 'Randall', surname = 'Degges', ) self.assertEqual(user.is_anonymous(), False)
def test_error_messages(self): # Create a user. with self.app.app_context(): User.create( username = '******', given_name = 'Randall', surname = 'Degges', email = '*****@*****.**', password = '******', ) # Ensure that an error is raised if an invalid username or password is # specified. with self.app.test_client() as c: resp = c.post('/login', data={ 'login': '******', 'password': '******', }) self.assertEqual(resp.status_code, 200) self.assertTrue( 'Invalid username or password.' in resp.data.decode('utf-8')) self.assertFalse("developerMessage" in resp.data.decode('utf-8'))
def test_error_messages(self): # Create a user. with self.app.app_context(): User.create( username = '******', given_name = 'Randall', surname = 'Degges', email = '*****@*****.**', password = '******', ) # Ensure that an error is raised if an invalid username or password is # specified. with self.app.test_client() as c: resp = c.post('/login', data={ 'login': '******', 'password': '******', }) self.assertEqual(resp.status_code, 200) #self.assertTrue('Invalid username or password.' in resp.data.decode('utf-8')) self.assertTrue('Login attempt failed because the specified password is incorrect.' in resp.data.decode('utf-8')) self.assertFalse('developerMessage' in resp.data.decode('utf-8'))
def test_subclass(self): with self.app.app_context(): user = User.create( email = '*****@*****.**', password = '******', given_name = 'Randall', surname = 'Degges', ) # Ensure that our lazy construction of the subclass works as # expected for users (a `User` should be a valid Stormpath # `Account`. self.assertTrue(user.writable_attrs) self.assertIsInstance(user, Account) self.assertIsInstance(user, User)
def test_is_active(self): with self.app.app_context(): # Ensure users are active by default. user = User.create( email = '*****@*****.**', password = '******', given_name = 'Randall', surname = 'Degges', ) self.assertEqual(user.is_active(), True) # Ensure users who have their accounts explicitly disabled actually # return a proper status when `is_active` is called. user.status = User.STATUS_DISABLED self.assertEqual(user.is_active(), False) # Ensure users who have not verified their accounts return a proper # status when `is_active` is called. user.status = User.STATUS_UNVERIFIED self.assertEqual(user.is_active(), False)
def test_require_settings(self): # Here we'll change our backend behavior such that users *can* enter a # first and last name, but they aren't required server side. # email and password. self.app.config['STORMPATH_REQUIRE_GIVEN_NAME'] = False self.app.config['STORMPATH_REQUIRE_SURNAME'] = False with self.app.test_client() as c: # Ensure that registration works *without* given name and surname # since they aren't required. resp = c.post('/register', data={ 'email': '*****@*****.**', 'password': '******', }) self.assertEqual(resp.status_code, 302) # Find our user account that was just created, and ensure the given # name and surname fields were set to our default string. user = User.from_login('*****@*****.**', 'woot1LoveCookies!') self.assertEqual(user.given_name, 'Anonymous') self.assertEqual(user.surname, 'Anonymous')