mirror of
https://github.com/zulip/zulip.git
synced 2025-10-24 16:43:57 +00:00
Test registration using POPULATE_PROFILE_VIA_LDAP.
This commit is contained in:
@@ -5,6 +5,7 @@ from django.http import HttpResponse
|
||||
from django.test import TestCase
|
||||
|
||||
from mock import patch
|
||||
from fakeldap import MockLDAP
|
||||
|
||||
from zilencer.models import Deployment
|
||||
|
||||
@@ -898,6 +899,93 @@ class UserSignUpTest(ZulipTestCase):
|
||||
self.assertEquals(result.status_code, 200)
|
||||
self.assertIn("You're almost there.", result.content.decode('utf8'))
|
||||
|
||||
def test_registration_through_ldap(self):
|
||||
# type: () -> None
|
||||
username = "newuser"
|
||||
password = "testing"
|
||||
domain = "zulip.com"
|
||||
email = "newuser@zulip.com"
|
||||
subdomain = "zulip"
|
||||
realm_name = "Zulip"
|
||||
ldap_user_attr_map = {'full_name': 'fn', 'short_name': 'sn'}
|
||||
|
||||
ldap_patcher = patch('django_auth_ldap.config.ldap.initialize')
|
||||
mock_initialize = ldap_patcher.start()
|
||||
mock_ldap = MockLDAP()
|
||||
mock_initialize.return_value = mock_ldap
|
||||
|
||||
mock_ldap.directory = {
|
||||
'uid=newuser,ou=users,dc=zulip,dc=com': {
|
||||
'userPassword': 'testing',
|
||||
'fn': ['New User Name']
|
||||
}
|
||||
}
|
||||
|
||||
with patch('zerver.views.get_subdomain', return_value=subdomain):
|
||||
result = self.client_post('/register/', {'email': email})
|
||||
|
||||
self.assertEquals(result.status_code, 302)
|
||||
self.assertTrue(result["Location"].endswith(
|
||||
"/accounts/send_confirm/%s" % (email,)))
|
||||
result = self.client_get(result["Location"])
|
||||
self.assert_in_response("Check your email so we can get started.", result)
|
||||
# Visit the confirmation link.
|
||||
from django.core.mail import outbox
|
||||
for message in reversed(outbox):
|
||||
if email in message.to:
|
||||
confirmation_link_pattern = re.compile(settings.EXTERNAL_HOST + "(\S+)>")
|
||||
confirmation_url = confirmation_link_pattern.search(
|
||||
message.body).groups()[0]
|
||||
break
|
||||
else:
|
||||
raise ValueError("Couldn't find a confirmation email.")
|
||||
|
||||
with self.settings(
|
||||
POPULATE_PROFILE_VIA_LDAP=True,
|
||||
LDAP_APPEND_DOMAIN='zulip.com',
|
||||
AUTH_LDAP_BIND_PASSWORD='',
|
||||
AUTH_LDAP_USER_ATTR_MAP=ldap_user_attr_map,
|
||||
AUTHENTICATION_BACKENDS=('zproject.backends.ZulipLDAPAuthBackend',),
|
||||
AUTH_LDAP_USER_DN_TEMPLATE='uid=%(user)s,ou=users,dc=zulip,dc=com'):
|
||||
result = self.client_get(confirmation_url)
|
||||
self.assertEquals(result.status_code, 200)
|
||||
result = self.submit_reg_form_for_user(username,
|
||||
password,
|
||||
domain=domain,
|
||||
realm_name=realm_name,
|
||||
realm_subdomain=subdomain,
|
||||
from_confirmation='1',
|
||||
# Pass HTTP_HOST for the target subdomain
|
||||
HTTP_HOST=subdomain + ".testserver")
|
||||
|
||||
self.assertEquals(result.status_code, 200)
|
||||
self.assertIn("You're almost there.", result.content.decode('utf8'))
|
||||
self.assertIn("New User Name", result.content.decode('utf8'))
|
||||
self.assertIn("newuser@zulip.com", result.content.decode('utf8'))
|
||||
|
||||
# Test the TypeError exception handler
|
||||
mock_ldap.directory = {
|
||||
'uid=newuser,ou=users,dc=zulip,dc=com': {
|
||||
'userPassword': 'testing',
|
||||
'fn': None # This will raise TypeError
|
||||
}
|
||||
}
|
||||
result = self.submit_reg_form_for_user(username,
|
||||
password,
|
||||
domain=domain,
|
||||
realm_name=realm_name,
|
||||
realm_subdomain=subdomain,
|
||||
from_confirmation='1',
|
||||
# Pass HTTP_HOST for the target subdomain
|
||||
HTTP_HOST=subdomain + ".testserver")
|
||||
|
||||
self.assertEquals(result.status_code, 200)
|
||||
self.assertIn("You're almost there.", result.content.decode('utf8'))
|
||||
self.assertIn("newuser@zulip.com", result.content.decode('utf8'))
|
||||
|
||||
mock_ldap.reset()
|
||||
mock_initialize.stop()
|
||||
|
||||
class DeactivateUserTest(ZulipTestCase):
|
||||
|
||||
def test_deactivate_user(self):
|
||||
|
||||
Reference in New Issue
Block a user