| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- from http import HTTPStatus
- from django.contrib.auth import get_user_model
- from django.test import TestCase, Client
- from django.urls import reverse
- from notes.models import Note
- class TestRoutes(TestCase):
- @classmethod
- def setUpTestData(cls):
- cls.test_user1 = get_user_model().objects.create_user(
- username='testuser1',
- password='12345'
- )
- cls.test_user2 = get_user_model().objects.create_user(
- username='testuser2',
- password='12345'
- )
- cls.note1 = Note.objects.create(
- title="Test Note 1",
- text="Test Note Text",
- author=cls.test_user1
- )
- cls.note2 = Note.objects.create(
- title="Test Note 2",
- text="Test Note Text",
- author=cls.test_user2
- )
- cls.url_names_with_slug = [
- 'notes:edit',
- 'notes:detail',
- 'notes:delete'
- ]
- cls.url_names_without_args = [
- 'notes:list',
- 'notes:success',
- 'notes:add',
- 'notes:home'
- ]
- cls.auth_url_names = [
- 'users:login',
- 'users:logout',
- 'users:signup'
- ]
- def setUp(self):
- self.client = Client()
- def test_urls_availability(self):
- users = [self.test_user1, self.test_user2, None]
- for user in users:
- if user is not None:
- self.client.login(username=user.username, password='12345')
- else:
- self.client.logout()
- for name in self.url_names_with_slug:
- with self.subTest(user=user, url=name):
- url = reverse(name, args=[self.note1.slug])
- response = self.client.get(url)
- if user is self.test_user1 or (
- user is None and name
- not in self.url_names_with_slug
- ):
- self.assertEqual(response.status_code, HTTPStatus.OK)
- elif user is self.test_user2:
- self.assertEqual(
- response.status_code,
- HTTPStatus.NOT_FOUND
- )
- else:
- login_url = reverse('users:login')
- next_url = url
- redirect_url = f"{login_url}?next={next_url}"
- self.assertRedirects(response, redirect_url)
- for name in self.url_names_without_args:
- with self.subTest(user=user, url=name):
- url = reverse(name)
- response = self.client.get(url)
- if user is not None or name == 'notes:home':
- self.assertEqual(response.status_code, HTTPStatus.OK)
- else:
- login_url = reverse('users:login')
- next_url = url
- redirect_url = f"{login_url}?next={next_url}"
- self.assertRedirects(response, redirect_url)
- for name in self.auth_url_names:
- with self.subTest(user=user, url=name):
- url = reverse(name)
- response = self.client.get(url)
- self.assertEqual(response.status_code, HTTPStatus.OK)
|