from unittest.mock import patch, PropertyMock from django.test import TestCase, modify_settings from django.urls import reverse from bookmarks.models import User from bookmarks.middlewares import CustomRemoteUserMiddleware class AuthProxySupportTest(TestCase): # Reproducing configuration from the settings logic here # ideally this test would just override the respective options @modify_settings( MIDDLEWARE={"append": "bookmarks.middlewares.CustomRemoteUserMiddleware"}, AUTHENTICATION_BACKENDS={ "prepend": "django.contrib.auth.backends.RemoteUserBackend" }, ) def test_auth_proxy_authentication(self): user = User.objects.create_user( "auth_proxy_user", "user@example.com", "password123" ) headers = {"REMOTE_USER": user.username} response = self.client.get(reverse("bookmarks:index"), **headers) self.assertEqual(response.status_code, 200) # Reproducing configuration from the settings logic here # ideally this test would just override the respective options @modify_settings( MIDDLEWARE={"append": "bookmarks.middlewares.CustomRemoteUserMiddleware"}, AUTHENTICATION_BACKENDS={ "prepend": "django.contrib.auth.backends.RemoteUserBackend" }, ) def test_auth_proxy_with_custom_header(self): with patch.object( CustomRemoteUserMiddleware, "header", new_callable=PropertyMock ) as mock: mock.return_value = "Custom-User" user = User.objects.create_user( "auth_proxy_user", "user@example.com", "password123" ) headers = {"Custom-User": user.username} response = self.client.get(reverse("bookmarks:index"), **headers) self.assertEqual(response.status_code, 200) def test_auth_proxy_is_disabled_by_default(self): user = User.objects.create_user( "auth_proxy_user", "user@example.com", "password123" ) headers = {"REMOTE_USER": user.username} response = self.client.get(reverse("bookmarks:index"), **headers, follow=True) self.assertRedirects(response, "/login/?next=%2Fbookmarks")