Как проверить `admin.site.login`, изменяющийся в середине теста - PullRequest
0 голосов
/ 31 января 2019

Я использую глобальные настройки для необязательного изменения значения 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?Если я помещу свои настройки в отдельные файлы или отдельные классы, это заставит их работать более независимо?Я пытаюсь не взломать это как можно больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...