Files @ 2aa7f454204e
Branch filter:

Location: kallithea/rhodecode/tests/functional/test_admin_ldap_settings.py

Marcin Kuzminski
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
from rhodecode.tests import *
from rhodecode.model.db import RhodeCodeSetting
from nose.plugins.skip import SkipTest

skip_ldap_test = False
try:
    import ldap
except ImportError:
    # means that python-ldap is not installed
    skip_ldap_test = True
    pass

class TestLdapSettingsController(TestController):

    def test_index(self):
        self.log_user()
        response = self.app.get(url(controller='admin/ldap_settings',
                                    action='index'))
        self.assertTrue('LDAP administration' in response.body)

    def test_ldap_save_settings(self):
        self.log_user()
        if skip_ldap_test:
            raise SkipTest('skipping due to missing ldap lib')
        
        test_url = url(controller='admin/ldap_settings',
                       action='ldap_settings')

        response = self.app.post(url=test_url,
            params={'ldap_host' : u'dc.example.com',
                    'ldap_port' : '999',
                    'ldap_tls_kind' : 'PLAIN',
                    'ldap_tls_reqcert' : 'NEVER',
                    'ldap_dn_user':'test_user',
                    'ldap_dn_pass':'test_pass',
                    'ldap_base_dn':'test_base_dn',
                    'ldap_filter':'test_filter',
                    'ldap_search_scope':'BASE',
                    'ldap_attr_login':'test_attr_login',
                    'ldap_attr_firstname':'ima',
                    'ldap_attr_lastname':'tester',
                    'ldap_attr_email':'test@example.com' })

        new_settings = RhodeCodeSetting.get_ldap_settings()
        print new_settings
        self.assertEqual(new_settings['ldap_host'], u'dc.example.com',
                         'fail db write compare')

        self.checkSessionFlash(response,
                               'Ldap settings updated successfully')

    def test_ldap_error_form(self):
        self.log_user()
        if skip_ldap_test:
            raise SkipTest('skipping due to missing ldap lib')
                
        test_url = url(controller='admin/ldap_settings',
                       action='ldap_settings')

        response = self.app.post(url=test_url,
            params={'ldap_host' : '',
                    'ldap_port' : 'i-should-be-number',
                    'ldap_tls_kind' : 'PLAIN',
                    'ldap_tls_reqcert' : 'NEVER',
                    'ldap_dn_user':'',
                    'ldap_dn_pass':'',
                    'ldap_base_dn':'',
                    'ldap_filter':'',
                    'ldap_search_scope':'BASE',
                    'ldap_attr_login':'', #  <----- missing required input
                    'ldap_attr_firstname':'',
                    'ldap_attr_lastname':'',
                    'ldap_attr_email':'' })
        
        self.assertTrue("""<span class="error-message">The LDAP Login"""
                        """ attribute of the CN must be specified""" in
                        response.body)
        
        
        
        self.assertTrue("""<span class="error-message">Please """
                        """enter a number</span>""" in response.body)

    def test_ldap_login(self):
        pass

    def test_ldap_login_incorrect(self):
        pass