diff --git a/rhodecode/model/forms.py b/rhodecode/model/forms.py
--- a/rhodecode/model/forms.py
+++ b/rhodecode/model/forms.py
@@ -341,10 +341,7 @@ def LdapSettingsForm(tls_reqcert_choices
ldap_base_dn = v.UnicodeString(strip=True,)
ldap_filter = v.UnicodeString(strip=True,)
ldap_search_scope = v.OneOf(search_scope_choices)
- ldap_attr_login = All(
- v.AttrLoginValidator(),
- v.UnicodeString(strip=True,)
- )
+ ldap_attr_login = v.AttrLoginValidator()(not_empty=True)
ldap_attr_firstname = v.UnicodeString(strip=True,)
ldap_attr_lastname = v.UnicodeString(strip=True,)
ldap_attr_email = v.UnicodeString(strip=True,)
diff --git a/rhodecode/model/validators.py b/rhodecode/model/validators.py
--- a/rhodecode/model/validators.py
+++ b/rhodecode/model/validators.py
@@ -723,13 +723,7 @@ def AttrLoginValidator():
'this is the name of the attribute that is equivalent '
'to "username"')
}
-
- def validate_python(self, value, state):
- if not value or not isinstance(value, (str, unicode)):
- msg = M(self, 'invalid_cn', state)
- raise formencode.Invalid(msg, value, state,
- error_dict=dict(ldap_attr_login=msg)
- )
+ messages['empty'] = messages['invalid_cn']
return _validator
diff --git a/rhodecode/tests/__init__.py b/rhodecode/tests/__init__.py
--- a/rhodecode/tests/__init__.py
+++ b/rhodecode/tests/__init__.py
@@ -52,7 +52,7 @@ log = logging.getLogger(__name__)
__all__ = [
'parameterized', 'environ', 'url', 'get_new_dir', 'TestController',
- 'SkipTest',
+ 'SkipTest', 'ldap_lib_installed',
'TESTS_TMP_PATH', 'HG_REPO', 'GIT_REPO', 'NEW_HG_REPO', 'NEW_GIT_REPO',
'HG_FORK', 'GIT_FORK', 'TEST_USER_ADMIN_LOGIN', 'TEST_USER_ADMIN_PASS',
'TEST_USER_REGULAR_LOGIN', 'TEST_USER_REGULAR_PASS',
@@ -117,6 +117,15 @@ TEST_REPO_PREFIX = 'vcs-test'
GIT_REMOTE_REPO = jn(TESTS_TMP_PATH, GIT_REPO)
HG_REMOTE_REPO = jn(TESTS_TMP_PATH, HG_REPO)
+#skip ldap tests if LDAP lib is not installed
+ldap_lib_installed = False
+try:
+ import ldap
+ ldap_lib_installed = True
+except ImportError:
+ # means that python-ldap is not installed
+ pass
+
def get_new_dir(title):
"""
diff --git a/rhodecode/tests/functional/test_admin_ldap_settings.py b/rhodecode/tests/functional/test_admin_ldap_settings.py
--- a/rhodecode/tests/functional/test_admin_ldap_settings.py
+++ b/rhodecode/tests/functional/test_admin_ldap_settings.py
@@ -1,15 +1,6 @@
from rhodecode.tests import *
from rhodecode.model.db import RhodeCodeSetting
-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):
@@ -20,26 +11,26 @@ class TestLdapSettingsController(TestCon
def test_ldap_save_settings(self):
self.log_user()
- if skip_ldap_test:
+ if ldap_lib_installed:
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' })
+ 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()
self.assertEqual(new_settings['ldap_host'], u'dc.example.com',
@@ -48,36 +39,58 @@ class TestLdapSettingsController(TestCon
self.checkSessionFlash(response,
'LDAP settings updated successfully')
- def test_ldap_error_form(self):
+ def test_ldap_error_form_wrong_port_number(self):
self.log_user()
- if skip_ldap_test:
+ if ldap_lib_installed:
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':'' })
+ params={'ldap_host': '',
+ 'ldap_port': 'i-should-be-number', # bad port num
+ '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': '',
+ 'ldap_attr_firstname': '',
+ 'ldap_attr_lastname': '',
+ 'ldap_attr_email': ''})
+
+ response.mustcontain(""""""
+ """Please enter a number
""")
+
+ def test_ldap_error_form(self):
+ self.log_user()
+ if ldap_lib_installed:
+ 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': 'Host',
+ 'ldap_port': '123',
+ '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': ''})
response.mustcontain("""The LDAP Login"""
""" attribute of the CN must be specified""")
-
- response.mustcontain("""Please """
- """enter a number""")
-
def test_ldap_login(self):
pass
diff --git a/rhodecode/tests/test_validators.py b/rhodecode/tests/test_validators.py
--- a/rhodecode/tests/test_validators.py
+++ b/rhodecode/tests/test_validators.py
@@ -220,12 +220,16 @@ class TestReposGroups(unittest.TestCase)
self.assertRaises(formencode.Invalid, validator.to_python, 'err')
def test_LdapLibValidator(self):
- validator = v.LdapLibValidator()
- self.assertRaises(v.LdapImportError, validator.to_python, 'err')
+ if ldap_lib_installed:
+ validator = v.LdapLibValidator()
+ self.assertEqual("DN", validator.to_python('DN'))
+ else:
+ validator = v.LdapLibValidator()
+ self.assertRaises(v.LdapImportError, validator.to_python, 'err')
def test_AttrLoginValidator(self):
validator = v.AttrLoginValidator()
- self.assertRaises(formencode.Invalid, validator.to_python, 123)
+ self.assertEqual('DN_attr', validator.to_python('DN_attr'))
def test_NotReviewedRevisions(self):
repo_id = Repository.get_by_repo_name(HG_REPO).repo_id