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 вопроса.
- есть ли что-то не так с моим тестом?
- но если мой тест в порядке... как я могу отладить его, чтобы найти, что не так с моим приложением? Вручную я мог бы установить точки останова и искать что-то, но проблема в том, что ручной тест работает просто отлично.