Принудительный вход не работает с фикстурами (Django TestCase)

Я заполняю свою тестовую базу данных через фикстуру, и все загружается нормально. Однако я не могу заставить работать ни login, ни force_login. Пользователь также находится в приспособлении.

Когда я пытаюсь протестировать первый вид, он перенаправляет на страницу входа.

class TestUnauthUser(TestCase):

    fixtures = ['project.json']

    @classmethod
    def setUpTestData(cls):
        cls.client = Client()
        # Get User and Login
        cls.unauth_user = User.objects.get(username='unauth_user')
        print(cls.unauth_user.pk)
        #cls.login = cls.client.login(username=cls.unauth_user.username, password=cls.unauth_user.password)
        cls.client.force_login(cls.unauth_user)

        # Get Project
        cls.project = Project.objects.get(slug='test-project')
        cls.slug_dict = {'slug': cls.project.slug}

        # Get Task
        cls.task = Task.objects.get(slug='test-task')

    def test_login(self):
        self.assertTrue(self.unauth_user.login)

    def test_project_view(self):
        # Project Main
        response = self.client.get(reverse('customerportal:project', kwargs=self.slug_dict))
        self.assertEqual(response.status_code, 403)

Я могу проверить, что у меня есть правильный объект пользователя с помощью: print(cls.unauth_user.pk). Таким образом, пользователь существует и получается. Но он все еще не может успешно войти в систему.

Я нашел проблему. force_login() необходимо запускать перед каждым тестом. Следующее действие решает проблему:

def setUp(self):
    self.client.force_login(self.unauth_user)

Однако это противоречит цели setUpTestData. Насколько я понимаю, все, что установлено в setUpTestData, должно действовать в течение всего занятия. Поэтому я не понимаю, почему force_login должно выполняться многократно, даже если оно задано оттуда. Если кто-то может предоставить дальнейший контекст, я буду очень признателен.

Вернуться на верх