Я использую глобальные настройки для необязательного изменения значения admin.site.login
в admin.py
в моем приложении:
if settings.DJANGO_ADMIN_FORCE_ALLAUTH:
# Enforce /admin to go through django-allauth for login
admin.site.login = decorators.login_required(admin.site.login)
И я тестирую следующим образом:
import sys
from importlib import reload
from django.test import LiveServerTestCase, override_settings
from django.urls import reverse
from django.contrib.admin import sites
from selenium.webdriver.firefox.webdriver import WebDriver
class AdminTestCase(LiveServerTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.selenium = WebDriver()
cls.selenium.implicitly_wait(10)
@classmethod
def tearDownClass(cls):
cls.selenium.quit()
super().tearDownClass()
@override_settings(DJANGO_ADMIN_FORCE_ALLAUTH=False)
def test_admin_allauth_workflow_disabled(self):
# This raises an expected `AlreadyRegistered` error
try:
reload(sys.modules['my_app.users.admin'])
except sites.AlreadyRegistered:
pass
self.selenium.get(f'{self.live_server_url}{reverse("admin:index")}')
self.assertEqual(self.selenium.current_url, f'{self.live_server_url}{reverse("admin:login")}?next={reverse("admin:index")}')
@override_settings(DJANGO_ADMIN_FORCE_ALLAUTH=True)
def test_admin_allauth_workflow_enabled(self):
# This raises an expected `AlreadyRegistered` error
try:
reload(sys.modules[my_app.users.admin'])
except sites.AlreadyRegistered:
pass
self.selenium.get(f'{self.live_server_url}{reverse("admin:index")}')
self.assertEqual(self.selenium.current_url, f'{self.live_server_url}{reverse("admin:login")}?next={reverse("admin:index")}')
Я использую только селен, поэтому я могу сам увидеть результат, для этого теста он действительно не нужен.
Я принудительно перезагружаю модуль admin
, чтобы мой дополнительный код вызывался, когда япереопределите настройки, но admin.site.login
все еще возвращает то же самое.
Прямо сейчас, test_admin_allauth_workflow_disabled
работает и test_admin_allauth_workflow_enabled
не должен работать (так как они идентичны только сизмененный параметр), но они оба работают.
Что еще нужно перезагрузить, чтобы обновить значение admin.site.login
?Если я помещу свои настройки в отдельные файлы или отдельные классы, это заставит их работать более независимо?Я пытаюсь не взломать это как можно больше.