test_routes.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. """Тест роутов приложения."""
  2. from http import HTTPStatus
  3. from django.contrib.auth import get_user_model
  4. from django.test import TestCase, Client
  5. from django.urls import reverse
  6. from notes.models import ModelNote
  7. class TestRoutes(TestCase):
  8. """Тестирует роуты приложения."""
  9. @classmethod
  10. def setUpTestData(cls):
  11. """Устанавливает предварительные условия."""
  12. cls.test_user1 = get_user_model().objects.create_user(
  13. username='testuser1',
  14. password='12345'
  15. )
  16. cls.test_user2 = get_user_model().objects.create_user(
  17. username='testuser2',
  18. password='12345'
  19. )
  20. cls.note1 = ModelNote.objects.create(
  21. title="Test Note 1",
  22. text="Test Note Text",
  23. author=cls.test_user1
  24. )
  25. cls.note2 = ModelNote.objects.create(
  26. title="Test Note 2",
  27. text="Test Note Text",
  28. author=cls.test_user2
  29. )
  30. cls.url_names_with_slug = [
  31. 'notes:edit',
  32. 'notes:detail',
  33. 'notes:delete'
  34. ]
  35. cls.url_names_without_args = [
  36. 'notes:list',
  37. 'notes:success',
  38. 'notes:add',
  39. 'notes:home'
  40. ]
  41. cls.auth_url_names = [
  42. 'users:login',
  43. 'users:logout',
  44. 'users:signup'
  45. ]
  46. def setUp(self):
  47. self.client = Client()
  48. def test_urls_availability(self):
  49. """Тест доступности урлов."""
  50. users = [self.test_user1, self.test_user2, None]
  51. for user in users:
  52. if user is not None:
  53. self.client.login(username=user.username, password='12345')
  54. else:
  55. self.client.logout()
  56. for name in self.url_names_with_slug:
  57. with self.subTest(user=user, url=name):
  58. url = reverse(name, args=[self.note1.slug])
  59. response = self.client.get(url)
  60. if user is self.test_user1 or (
  61. user is None and name
  62. not in self.url_names_with_slug
  63. ):
  64. self.assertEqual(response.status_code, HTTPStatus.OK)
  65. elif user is self.test_user2:
  66. self.assertEqual(
  67. response.status_code,
  68. HTTPStatus.NOT_FOUND
  69. )
  70. else:
  71. login_url = reverse('users:login')
  72. next_url = url
  73. redirect_url = f"{login_url}?next={next_url}"
  74. self.assertRedirects(response, redirect_url)
  75. for name in self.url_names_without_args:
  76. with self.subTest(user=user, url=name):
  77. url = reverse(name)
  78. response = self.client.get(url)
  79. if user is not None or name == 'notes:home':
  80. self.assertEqual(response.status_code, HTTPStatus.OK)
  81. else:
  82. login_url = reverse('users:login')
  83. next_url = url
  84. redirect_url = f"{login_url}?next={next_url}"
  85. self.assertRedirects(response, redirect_url)
  86. for name in self.auth_url_names:
  87. with self.subTest(user=user, url=name):
  88. url = reverse(name)
  89. response = self.client.get(url)
  90. self.assertEqual(response.status_code, HTTPStatus.OK)