From 004391261d7b578a0e5537a157fd6bb8e2246788 Mon Sep 17 00:00:00 2001 From: Tim Schilling Date: Tue, 8 Apr 2025 19:04:42 -0500 Subject: [PATCH] Added tests for LoginRequiredMiddleware These explicitly test the login exempt urls setting. --- tests/settings.py | 1 + tests/test_middleware.py | 37 +++++++++++++++++++++++++++++++++++++ tests/urls.py | 5 ++++- tests/views.py | 4 ++++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 tests/test_middleware.py diff --git a/tests/settings.py b/tests/settings.py index 81d397c..1f585fb 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -73,6 +73,7 @@ "BOOLEAN_CLAIM_MAPPING": {"is_staff": "user_is_staff", "is_superuser": "user_is_superuser"}, "CONFIG_RELOAD_INTERVAL": 0, # Always reload settings + "LOGIN_EXEMPT_URLS": ["^api", "nested/path/"], } LOGIN_URL = "django_auth_adfs:login" diff --git a/tests/test_middleware.py b/tests/test_middleware.py new file mode 100644 index 0000000..3c739b4 --- /dev/null +++ b/tests/test_middleware.py @@ -0,0 +1,37 @@ +from django.contrib.auth.models import AnonymousUser +from django.http import HttpResponseRedirect +from django.test import RequestFactory, TestCase +from django_auth_adfs.middleware import LoginRequiredMiddleware + + +class LoginRequiredMiddlewareTestCase(TestCase): + def setUp(self): + self.rf = RequestFactory() + self.middleware = LoginRequiredMiddleware(get_response=lambda *args: None) + + def test_not_exempt_redirects(self): + request = self.rf.get('/page/') + request.user = AnonymousUser() + response = self.middleware(request) + assert isinstance(response, HttpResponseRedirect) + + request = self.rf.get('/nested/redirect/') + request.user = AnonymousUser() + response = self.middleware(request) + assert isinstance(response, HttpResponseRedirect) + + def test_exempt(self): + request = self.rf.get('/api') + request.user = AnonymousUser() + response = self.middleware(request) + assert response is None + + request = self.rf.get('/nested/path/') + request.user = AnonymousUser() + response = self.middleware(request) + assert response is None + + request = self.rf.get('/nested/path/further') + request.user = AnonymousUser() + response = self.middleware(request) + assert response is None diff --git a/tests/urls.py b/tests/urls.py index e3a608d..06f60c5 100644 --- a/tests/urls.py +++ b/tests/urls.py @@ -1,6 +1,9 @@ -from django.urls import include, re_path +from django.urls import include, re_path, path + +from .views import page urlpatterns = [ re_path(r'^oauth2/', include('django_auth_adfs.urls')), re_path(r'^oauth2/', include('django_auth_adfs.drf_urls')), + path("page", page), ] diff --git a/tests/views.py b/tests/views.py index b16e402..6cb5709 100644 --- a/tests/views.py +++ b/tests/views.py @@ -1,2 +1,6 @@ def test_failed_response(request, error_message, status): pass + + +def page(request): + pass