Пример #1
0
 def setUp(self):
     patcher = patch('swingers.sauth.backends.LDAPBackend')
     self.ldap = patcher.start()
     self.backend = EmailBackend()
     self.addCleanup(patcher.stop)
Пример #2
0
class EmailBackendTests(TestCase):
    """
    Test the authentication backends included in swingers.
    """
    fixtures = ['test-users']

    def setUp(self):
        patcher = patch('swingers.sauth.backends.LDAPBackend')
        self.ldap = patcher.start()
        self.backend = EmailBackend()
        self.addCleanup(patcher.stop)

    def test_email_backend_no_password(self):
        """
        Test that attempting to authenticate with no password returns None.
        """
        instance = self.ldap.return_value
        user = self.backend.authenticate(username='******')
        self.assertEqual(user, None)
        self.assertEqual(instance.authenticate.mock_calls, [])

    def test_email_backend_user_exists(self):
        """
        Test authenticating with a user that exists in the database.
        """
        instance = self.ldap.return_value
        user = self.backend.authenticate(username='******',
                                         password='******')
        self.assertEqual(user.username, 'admin')
        self.assertEqual(instance.authenticate.mock_calls, [])

    def test_email_backend_password_incorrect(self):
        """
        Test that using a password that is incorrect in the database falls
        back to ldap authenticate to check against the information there.
        """
        instance = self.ldap.return_value
        instance.authenticate.return_value = User.objects.get(pk=1)
        user = self.backend.authenticate(username='******',
                                         password='******')
        self.assertEqual(user.username, 'admin')
        instance.authenticate.assert_called_once_with(username='******',
                                                      password='******')

    def test_email_backend_nonexistant_user(self):
        """
        Test authenticating as a user that doesn't exist in database, check
        that it creates a user from ldap and returns it.
        """
        instance = self.ldap.return_value

        def create_user(*args, **kwargs):
            return User.objects.create(username='******',
                                       password='******',
                                       email='*****@*****.**',
                                       first_name='test', last_name='test')

        instance.authenticate.side_effect = create_user
        user = self.backend.authenticate(username='******',
                                         password='******')
        self.assertEqual(user.username, 'test-create')
        instance.authenticate.assert_called_once_with(username='******',
                                                      password='******')

        def create_user(*args, **kwargs):
            return User.objects.create(username='******',
                                       password='******',
                                       email='*****@*****.**',
                                       first_name='test', last_name='test')

        instance.authenticate.side_effect = create_user
        user = self.backend.authenticate(username='******',
                                         password='******')
        self.assertEqual(user.username, 'test-create')
        self.assertEqual(
            User.objects.filter(username='******').count(), 1)

    def test_email_backend_user_no_email(self):
        """
        Test authenticating as a user that doesn't exist in database, check
        that it creates a user from ldap and returns it.
        """
        instance = self.ldap.return_value

        def create_user(*args, **kwargs):
            return User.objects.create(username='******',
                                       password='******',
                                       first_name='test', last_name='test')

        instance.authenticate.side_effect = create_user
        user = self.backend.authenticate(username='******',
                                         password='******')
        self.assertEqual(user.username, 'test-no-email')
        instance.authenticate.assert_called_once_with(username='******',
                                                      password='******')

    def test_email_backend_nonexistant_user_ldap(self):
        """
        Test authenticating as a user that doesn't exist in the database or in
        LDAP.
        """
        instance = self.ldap.return_value
        instance.authenticate.return_value = None
        user = self.backend.authenticate(username='******',
                                         password='******')
        self.assertEqual(user, None)

    def test_email_backend_get_user(self):
        user = self.backend.get_user(1)
        self.assertEqual(user, User.objects.get(pk=1))
        self.assertIsNone(self.backend.get_user(99))

    def test_email_backend_ldap_auth_exception(self):
        """
        Test LDAP authenticate exception handling.
        """
        instance = self.ldap.return_value
        instance.authenticate.side_effect = Exception()
        user = self.backend.authenticate(username='******',
                                         password='******')
        self.assertIsNone(user)