Выполняю тестирование удаления задач (сущность в БД) авторизованным и неавторизованным пользователями:
def test_delete_by_unauthorized_user(self):
"""Попытка удалить задачу неавторизованным пользователем."""
route = reverse('delete_task', args=[self.task.id])
redirect_url = f'/login/?next=/tasks/{self.task.id}/delete/' # можно ли использовать route?
response = self.client.get(route, follow=True)
self.assertRedirects(response, redirect_url)
# self.assertEqual(get_message_text(response), _("You are not logged in! Please log in."))
self.assertContains(response, _("You are not logged in! Please log in."))
response = self.client.post(route, follow=True)
self.assertRedirects(response, redirect_url)
# self.assertEqual(get_message_text(response), _("You are not logged in! Please log in."))
self.assertContains(response, _("You are not logged in! Please log in."))
def test_delelete_by_authorized_user(self):
"""Удаление задачи авторизованным пользователем."""
tasks_count = Tasks.objects.count()
route = reverse('delete_task', args=[self.task.id])
self.client.force_login(self.user)
template = 'tasks/delete.html'
response = self.client.get(route)
error_name = f"Ошибка: маршрут {route} ожидал шаблон {template}"
self.assertTemplateUsed(response, template, error_name)
response = self.client.post(route)
self.assertRedirects(response, reverse('all_tasks'))
self.assertEqual(Tasks.objects.count(), tasks_count - 1)
# self.assertEqual(get_message_text(response), _("The task has been successfully deleted."))
self.assertContains(response, _("The task has been successfully deleted."))
Закомментированные строки - старый способ проверки появления flash-сообщения с которым тесты успешно проходили. Но я решил его поменять на
assertContains
. В первой функции
test_delete_by_unauthorized_user()
тесты проходят успешно. Но во втором не проходят, сообщая:
AssertionError: 302 != 200 : Couldn't retrieve content: Response code was 302 (expected 200)
Я проверил, какие статусы возвращает сервер:
Удаление задачи
Неавторизованный:
[04/Apr/2024 10:28:21] "GET /tasks/2/delete/ HTTP/1.1" 302 0
[04/Apr/2024 10:28:21] "GET /login/?next=/tasks/2/delete/ HTTP/1.1" 200 11533
Авторизованный:
[04/Apr/2024 10:31:40] "POST /tasks/6/delete/ HTTP/1.1" 302 0
[04/Apr/2024 10:31:48] "GET /tasks/ HTTP/1.1" 200 14764
Да, в функции
test_delete_by_unauthorized_user()
запрос и вправду возвращает 302 статус, но ведь и первая функция его возвращает (
test_delete_by_authorized_user()
). Тем не менее, она успешно проходит тесты. Почему так происходит?