test_remote_user_deprecation.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import warnings
  2. from django.contrib.auth.backends import RemoteUserBackend
  3. from django.contrib.auth.models import User
  4. from django.test import TestCase, modify_settings, override_settings
  5. class CustomRemoteUserBackend(RemoteUserBackend):
  6. """Override configure_user() without a request argument."""
  7. def configure_user(self, user):
  8. user.email = 'user@example.com'
  9. user.save()
  10. return user
  11. @override_settings(ROOT_URLCONF='auth_tests.urls')
  12. class RemoteUserCustomTest(TestCase):
  13. middleware = 'django.contrib.auth.middleware.RemoteUserMiddleware'
  14. backend = 'auth_tests.test_remote_user_deprecation.CustomRemoteUserBackend'
  15. header = 'REMOTE_USER'
  16. def setUp(self):
  17. self.patched_settings = modify_settings(
  18. AUTHENTICATION_BACKENDS={'append': self.backend},
  19. MIDDLEWARE={'append': self.middleware},
  20. )
  21. self.patched_settings.enable()
  22. def tearDown(self):
  23. self.patched_settings.disable()
  24. def test_configure_user_deprecation_warning(self):
  25. """
  26. A deprecation warning is shown for RemoteUserBackend that have a
  27. configure_user() method without a request parameter.
  28. """
  29. num_users = User.objects.count()
  30. with warnings.catch_warnings(record=True) as warns:
  31. warnings.simplefilter('always')
  32. response = self.client.get('/remote_user/', **{self.header: 'newuser'})
  33. self.assertEqual(response.context['user'].username, 'newuser')
  34. self.assertEqual(len(warns), 1)
  35. self.assertEqual(
  36. str(warns[0].message),
  37. 'Update CustomRemoteUserBackend.configure_user() to accept '
  38. '`request` as the first argument.'
  39. )
  40. self.assertEqual(User.objects.count(), num_users + 1)
  41. user = User.objects.get(username='newuser')
  42. self.assertEqual(user.email, 'user@example.com')