diff options
author | Adrian Torres <atorresj@redhat.com> | 2022-03-04 11:04:07 +0100 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-03-10 12:57:19 +0100 |
commit | d90e34c61b27fba2527834806639eebbcfab9631 (patch) | |
tree | ccabe70ea9bdea8e14b5b878f3608365873ceb46 /tests/auth_tests | |
parent | 67b5f506a600a54658405cf821c14ada4080e61f (diff) | |
download | django-d90e34c61b27fba2527834806639eebbcfab9631.tar.gz |
Fixed #33561 -- Allowed synchronization of user attributes in RemoteUserBackend.
Diffstat (limited to 'tests/auth_tests')
-rw-r--r-- | tests/auth_tests/test_remote_user.py | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/tests/auth_tests/test_remote_user.py b/tests/auth_tests/test_remote_user.py index bd974cb1d5..8fb1b972b5 100644 --- a/tests/auth_tests/test_remote_user.py +++ b/tests/auth_tests/test_remote_user.py @@ -6,8 +6,15 @@ from django.contrib.auth.backends import RemoteUserBackend from django.contrib.auth.middleware import RemoteUserMiddleware from django.contrib.auth.models import User from django.middleware.csrf import _get_new_csrf_string, _mask_cipher_secret -from django.test import Client, TestCase, modify_settings, override_settings +from django.test import ( + Client, + TestCase, + ignore_warnings, + modify_settings, + override_settings, +) from django.utils import timezone +from django.utils.deprecation import RemovedInDjango50Warning @override_settings(ROOT_URLCONF="auth_tests.urls") @@ -215,11 +222,14 @@ class CustomRemoteUserBackend(RemoteUserBackend): """ return username.split("@")[0] - def configure_user(self, request, user): + def configure_user(self, request, user, created=True): """ Sets user's email address using the email specified in an HTTP header. + Sets user's last name for existing users. """ user.email = request.META.get(RemoteUserTest.email_header, "") + if not created: + user.last_name = user.username user.save() return user @@ -242,8 +252,12 @@ class RemoteUserCustomTest(RemoteUserTest): should not have been configured with an email address. """ super().test_known_user() - self.assertEqual(User.objects.get(username="knownuser").email, "") - self.assertEqual(User.objects.get(username="knownuser2").email, "") + knownuser = User.objects.get(username="knownuser") + knownuser2 = User.objects.get(username="knownuser2") + self.assertEqual(knownuser.email, "") + self.assertEqual(knownuser2.email, "") + self.assertEqual(knownuser.last_name, "knownuser") + self.assertEqual(knownuser2.last_name, "knownuser2") def test_unknown_user(self): """ @@ -260,11 +274,40 @@ class RemoteUserCustomTest(RemoteUserTest): ) self.assertEqual(response.context["user"].username, "newuser") self.assertEqual(response.context["user"].email, "user@example.com") + self.assertEqual(response.context["user"].last_name, "") self.assertEqual(User.objects.count(), num_users + 1) newuser = User.objects.get(username="newuser") self.assertEqual(newuser.email, "user@example.com") +# RemovedInDjango50Warning. +class CustomRemoteUserNoCreatedArgumentBackend(CustomRemoteUserBackend): + def configure_user(self, request, user): + return super().configure_user(request, user) + + +@ignore_warnings(category=RemovedInDjango50Warning) +class RemoteUserCustomNoCreatedArgumentTest(RemoteUserTest): + backend = "auth_tests.test_remote_user.CustomRemoteUserNoCreatedArgumentBackend" + + +@override_settings(ROOT_URLCONF="auth_tests.urls") +@modify_settings( + AUTHENTICATION_BACKENDS={ + "append": "auth_tests.test_remote_user.CustomRemoteUserNoCreatedArgumentBackend" + }, + MIDDLEWARE={"append": "django.contrib.auth.middleware.RemoteUserMiddleware"}, +) +class RemoteUserCustomNoCreatedArgumentDeprecationTest(TestCase): + def test_known_user_sync(self): + msg = ( + "`created=True` must be added to the signature of " + "CustomRemoteUserNoCreatedArgumentBackend.configure_user()." + ) + with self.assertWarnsMessage(RemovedInDjango50Warning, msg): + self.client.get("/remote_user/", **{RemoteUserTest.header: "newuser"}) + + class CustomHeaderMiddleware(RemoteUserMiddleware): """ Middleware that overrides custom HTTP auth user header. |