mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-08 19:26:48 +00:00
django-login-required-middleware is dropped; Django 5.1+ ships the same middleware. The login page is already marked login_not_required by Django; email_otp gets the decorator, which replaces LOGIN_REQUIRED_IGNORE_VIEW_NAMES. The datasource still requires login. Existing settings.py files still name the old middleware. A system check (accounts.E002) stops migrate and the server until MIDDLEWARE uses Django's middleware, instead of an ImportError at startup; the README has the steps. A new matrix test walks every URL anonymously: everything outside a short allowlist (login pages, the OpenAPI docs) sends the visitor to the login page, and API views deny with 401/403. It passed with the old middleware first and passes unchanged now.
23 lines
949 B
Python
23 lines
949 B
Python
from django.conf import settings
|
|
from django.test import SimpleTestCase, override_settings
|
|
|
|
from accounts.checks import login_required_middleware_check
|
|
|
|
OLD = "login_required.middleware.LoginRequiredMiddleware"
|
|
NEW = "django.contrib.auth.middleware.LoginRequiredMiddleware"
|
|
|
|
|
|
class LoginRequiredMiddlewareCheckTestCase(SimpleTestCase):
|
|
def ids(self, middleware):
|
|
with override_settings(MIDDLEWARE=middleware):
|
|
return [e.id for e in login_required_middleware_check(None)]
|
|
|
|
def test_current_settings_pass(self):
|
|
self.assertEqual(self.ids(settings.MIDDLEWARE), [])
|
|
|
|
def test_settings_from_before_django_5_2_are_rejected(self):
|
|
old = [OLD if m == NEW else m for m in settings.MIDDLEWARE]
|
|
self.assertEqual(self.ids(old), ["accounts.E002"])
|
|
|
|
def test_missing_login_middleware_is_rejected(self):
|
|
self.assertEqual(self.ids([m for m in settings.MIDDLEWARE if m != NEW]), ["accounts.E002"])
|