test_routes.py 3.3 KB

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