| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- """Тест роутов приложения."""
- from typing import Any
- 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 ModelNote
- class TestRoutes(TestCase):
- """Тестирует роуты приложения."""
- test_user1: Any = None
- test_user2: Any = None
- @classmethod
- def setUpTestData(cls): # pylint: disable=C0103
- """Устанавливает предварительные условия."""
- user_model = get_user_model().objects
- cls.test_user1 = user_model.create_user( # bandit disable
- username='testuser1',
- password='12345'
- )
- cls.test_user2 = user_model.create_user(
- username='testuser2',
- password='12345'
- )
- cls.note1 = ModelNote.objects.create(
- title="Test Note 1",
- text="Test Note Text",
- author=cls.test_user1
- )
- cls.note2 = ModelNote.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): # pylint: disable=C0103
- """Начальная настройка теста."""
- 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)
|