|
@@ -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')
|