summaryrefslogtreecommitdiff
path: root/tests/auth_tests
diff options
context:
space:
mode:
authorJoshua Cannon <joshua.cannon@ni.com>2018-12-13 10:14:03 -0600
committerTim Graham <timograham@gmail.com>2019-01-09 20:01:04 -0500
commitdb1b10ef0dcab2b8bacbea4adc681a57bd70b462 (patch)
tree98e5de16c2ba4a77d52bb0fc61c3b9b2da2f0473 /tests/auth_tests
parent4ca2820ff573ed87c70fedda69efa8de23955669 (diff)
Fixed #30037 -- Added request arg to RemoteUserBackend.configure_user().
Diffstat (limited to 'tests/auth_tests')
-rw-r--r--tests/auth_tests/test_remote_user.py19
-rw-r--r--tests/auth_tests/test_remote_user_deprecation.py50
2 files changed, 64 insertions, 5 deletions
diff --git a/tests/auth_tests/test_remote_user.py b/tests/auth_tests/test_remote_user.py
index 2a1ebbb569..6260c460af 100644
--- a/tests/auth_tests/test_remote_user.py
+++ b/tests/auth_tests/test_remote_user.py
@@ -15,6 +15,7 @@ class RemoteUserTest(TestCase):
middleware = 'django.contrib.auth.middleware.RemoteUserMiddleware'
backend = 'django.contrib.auth.backends.RemoteUserBackend'
header = 'REMOTE_USER'
+ email_header = 'REMOTE_EMAIL'
# Usernames to be passed in REMOTE_USER for the test_known_user test case.
known_user = 'knownuser'
@@ -192,11 +193,11 @@ class CustomRemoteUserBackend(RemoteUserBackend):
"""
return username.split('@')[0]
- def configure_user(self, user):
+ def configure_user(self, request, user):
"""
- Sets user's email address.
+ Sets user's email address using the email specified in an HTTP header.
"""
- user.email = 'user@example.com'
+ user.email = request.META.get(RemoteUserTest.email_header, '')
user.save()
return user
@@ -224,9 +225,17 @@ class RemoteUserCustomTest(RemoteUserTest):
def test_unknown_user(self):
"""
- The unknown user created should be configured with an email address.
+ The unknown user created should be configured with an email address
+ provided in the request header.
"""
- super().test_unknown_user()
+ num_users = User.objects.count()
+ response = self.client.get('/remote_user/', **{
+ self.header: 'newuser',
+ self.email_header: 'user@example.com',
+ })
+ self.assertEqual(response.context['user'].username, 'newuser')
+ self.assertEqual(response.context['user'].email, 'user@example.com')
+ self.assertEqual(User.objects.count(), num_users + 1)
newuser = User.objects.get(username='newuser')
self.assertEqual(newuser.email, 'user@example.com')
diff --git a/tests/auth_tests/test_remote_user_deprecation.py b/tests/auth_tests/test_remote_user_deprecation.py
new file mode 100644
index 0000000000..1b31d9f038
--- /dev/null
+++ b/tests/auth_tests/test_remote_user_deprecation.py
@@ -0,0 +1,50 @@
+import warnings
+
+from django.contrib.auth.backends import RemoteUserBackend
+from django.contrib.auth.models import User
+from django.test import TestCase, modify_settings, override_settings
+
+
+class CustomRemoteUserBackend(RemoteUserBackend):
+ """Override configure_user() without a request argument."""
+ def configure_user(self, user):
+ user.email = 'user@example.com'
+ user.save()
+ return user
+
+
+@override_settings(ROOT_URLCONF='auth_tests.urls')
+class RemoteUserCustomTest(TestCase):
+ middleware = 'django.contrib.auth.middleware.RemoteUserMiddleware'
+ backend = 'auth_tests.test_remote_user_deprecation.CustomRemoteUserBackend'
+ header = 'REMOTE_USER'
+
+ def setUp(self):
+ self.patched_settings = modify_settings(
+ AUTHENTICATION_BACKENDS={'append': self.backend},
+ MIDDLEWARE={'append': self.middleware},
+ )
+ self.patched_settings.enable()
+
+ def tearDown(self):
+ self.patched_settings.disable()
+
+ def test_configure_user_deprecation_warning(self):
+ """
+ A deprecation warning is shown for RemoteUserBackend that have a
+ configure_user() method without a request parameter.
+ """
+ num_users = User.objects.count()
+ with warnings.catch_warnings(record=True) as warns:
+ warnings.simplefilter('always')
+ response = self.client.get('/remote_user/', **{self.header: 'newuser'})
+ self.assertEqual(response.context['user'].username, 'newuser')
+ self.assertEqual(len(warns), 1)
+ self.assertEqual(
+ str(warns[0].message),
+ 'Update CustomRemoteUserBackend.configure_user() to accept '
+ '`request` as the first argument.'
+ )
+ self.assertEqual(User.objects.count(), num_users + 1)
+ user = User.objects.get(username='newuser')
+ self.assertEqual(user.email, 'user@example.com')