test_auth_backends_deprecation.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import warnings
  2. from django.contrib.auth import authenticate
  3. from django.test import SimpleTestCase, override_settings
  4. mock_request = object()
  5. class NoRequestBackend:
  6. def authenticate(self, username=None, password=None):
  7. # Doesn't accept a request parameter.
  8. pass
  9. class RequestNotPositionArgBackend:
  10. def authenticate(self, username=None, password=None, request=None):
  11. assert username == 'username'
  12. assert password == 'pass'
  13. assert request is mock_request
  14. class AcceptsRequestBackendTest(SimpleTestCase):
  15. """
  16. A deprecation warning is shown for backends that have an authenticate()
  17. method without a request parameter.
  18. """
  19. no_request_backend = '%s.NoRequestBackend' % __name__
  20. request_not_positional_backend = '%s.RequestNotPositionArgBackend' % __name__
  21. @override_settings(AUTHENTICATION_BACKENDS=[no_request_backend])
  22. def test_no_request_deprecation_warning(self):
  23. with warnings.catch_warnings(record=True) as warns:
  24. warnings.simplefilter('always')
  25. authenticate(username='test', password='test')
  26. self.assertEqual(len(warns), 1)
  27. self.assertEqual(
  28. str(warns[0].message),
  29. "Update %s.authenticate() to accept a positional `request` "
  30. "argument." % self.no_request_backend
  31. )
  32. @override_settings(AUTHENTICATION_BACKENDS=[request_not_positional_backend])
  33. def test_request_keyword_arg_deprecation_warning(self):
  34. with warnings.catch_warnings(record=True) as warns:
  35. warnings.simplefilter('always')
  36. authenticate(username='username', password='pass', request=mock_request)
  37. self.assertEqual(len(warns), 1)
  38. self.assertEqual(
  39. str(warns[0].message),
  40. "In %s.authenticate(), move the `request` keyword argument to the "
  41. "first positional argument." % self.request_not_positional_backend
  42. )