Django tests : не работает для тестового случая для пользователя is_staff

Похоже, что это глупый вопрос, объясняемый какой-то глупой ошибкой, но я не смог разобраться в этом на данный момент.

Общая ситуация :

У меня есть небольшое приложение Djano, используемое как небольшая база данных для некоторых предметов.
Элементы можно просматривать, редактировать или удалять.
Просмотр доступен для всех пользователей, но редактирование/удаление только для штатных пользователей.
Это было реализовано и при ручном тестировании работает нормально (если я не являюсь штатным пользователем, я получаю 403 для редактирования/удаления страниц, затем, если я становлюсь штатным пользователем, я могу редактировать/удалять).
. Но автоматический тест не работает, и я не могу понять почему.

Вот тестовый код :

    def createTestUserAndLogin(self):
        self.user = User.objects.create_user(username='testuser', password='qwerty')
        login = self.client.login(username='testuser', password='qwerty')

    def createTestStaffUserAndLogin(self):
        self.user = User.objects.create_user(username='staffuser', password='qwerty_staff', is_staff=True)
        login = self.client.login(username='testuser', password='qwerty_staff')
        self.assertTrue(self.user.is_staff, "User is not staff")

    def test_delete_item_as_non_staff_user(self):
        test_serial = "AA1111"
        new_item = Item(serial_number=test_serial)
        new_item.save()

        self.createTestUserAndLogin()
        url = reverse("delete_item", kwargs={'pk':new_item.id})
        resp = self.client.get(url)
        self.assertEqual(resp.status_code, 403)
        self.client.logout()

    def test_delete_item_as_staff_user(self):
        test_serial = "AA1111"
        new_item = Item(serial_number=test_serial)
        new_item.save()

        # Could delete with Staff user
        self.createTestStaffUserAndLogin()
        self.assertTrue(self.user.is_staff, "User is not staff")
        url = reverse("delete_item", kwargs={'pk':new_item.id})
        resp = self.client.get(url)
        self.assertNotEqual(resp.status_code, 403)
        confirm_data = {'delete': 'yes'}
        resp = self.client.post(url, confirm_data)
        self.assertEqual(Item.objects.all().count(), 0)

Если я запускаю тест manage.py на этих тестах, то получаю ошибку :

in test_delete_item_as_staff_user
    self.assertNotEqual(resp.status_code, 403)
AssertionError: 403 == 403

В первый момент я подумал, что может быть есть какая-то проблема с созданием пользователя Staff, но self.assertTrue(self.user.is_staff, "User is not staff") прошел, значит созданный пользователь действительно Staff.

У меня 2 вопроса.

  1. есть ли что-то не так с моим тестом?
  2. но если мой тест в порядке... как я могу отладить его, чтобы найти, что не так с моим приложением? Вручную я мог бы установить точки останова и искать что-то, но проблема в том, что ручной тест работает просто отлично.
Вернуться на верх