linkding/bookmarks/tests/test_auth_proxy_support.py
2024-01-27 11:29:16 +01:00

58 lines
2.2 KiB
Python

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")