conftest.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. from datetime import datetime, timedelta
  2. import pytest
  3. from django.conf import settings
  4. from django.contrib.auth import get_user_model
  5. from django.test import Client
  6. from django.urls import reverse
  7. from django.utils import timezone
  8. from news.forms import BAD_WORDS
  9. from news.models import News, Comment
  10. User = get_user_model()
  11. @pytest.fixture
  12. def auth_client():
  13. client = Client()
  14. user = User.objects.create(username='Мимо Крокодил')
  15. client.force_login(user)
  16. return client
  17. @pytest.fixture
  18. def home_url():
  19. return reverse('news:home')
  20. @pytest.fixture
  21. def detail_url(initial_data):
  22. news, _ = initial_data
  23. return reverse('news:detail', args=(news.id,))
  24. @pytest.fixture
  25. def initial_news(db):
  26. today = datetime.today()
  27. all_news = [
  28. News(
  29. title=f'Новость {index}',
  30. text='Просто текст.',
  31. date=today - timedelta(days=index)
  32. )
  33. for index in range(settings.NEWS_COUNT_ON_HOME_PAGE + 1)
  34. ]
  35. News.objects.bulk_create(all_news)
  36. @pytest.fixture
  37. def initial_data(db):
  38. news = News.objects.create(title='Тестовая новость', text='Просто текст.')
  39. author = User.objects.create(username='Комментатор')
  40. now = timezone.now()
  41. for index in range(2):
  42. comment = Comment.objects.create(
  43. news=news, author=author, text=f'Текст {index}',
  44. )
  45. comment.created = now + timedelta(days=index)
  46. comment.save()
  47. return news, author
  48. @pytest.fixture
  49. def news():
  50. return News.objects.create(title='Заголовок', text='Текст')
  51. @pytest.fixture
  52. def comment_text():
  53. return 'Текст комментария'
  54. @pytest.fixture
  55. def bad_words_data(comment_text):
  56. bad_word = BAD_WORDS[0]
  57. return f'Какой-то текст, {bad_word}, еще текст'
  58. @pytest.fixture
  59. def comment(news, comment_text, client):
  60. user = User.objects.create(username='Мимо Крокодил')
  61. client.force_login(user)
  62. return Comment.objects.create(news=news, author=user, text=comment_text)
  63. @pytest.fixture
  64. def comment_detail_url(news, comment):
  65. return reverse('news:detail', args=(news.id,)) + '#comments'
  66. @pytest.fixture
  67. def user():
  68. return User.objects.create(username='Test User')