import shutil
import tempfile
from django.conf import settings
from django.contrib.auth import get_user_model
from django.test import Client, TestCase, override_settings
from django.urls import reverse
from posts.forms import PostForm
from posts.models import Group, Post
TEMP_MEDIA_ROOT = tempfile.mkdtemp(dir=settings.BASE_DIR)
User = get_user_model()
@override_settings(MEDIA_ROOT=TEMP_MEDIA_ROOT)
class PostCreateFormTests(TestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.user = User.objects.create_user(username='HasNoName')
cls.group = Group.objects.create(
title='Тестовый заголовок',
description='Тестовое описание',
slug='test-slug',
)
cls.post = Post.objects.create(
author=cls.user,
text='Post text for TEST',
group=cls.group,
)
cls.form = PostForm()
@classmethod
def tearDownClass(cls):
super().tearDownClass()
shutil.rmtree(TEMP_MEDIA_ROOT, ignore_errors=True)
def setUp(self):
self.authorized_client = Client()
self.authorized_client.force_login(self.user)
def test_create_post(self):
"""Валидная форма создает запись в Post."""
posts_count = Post.objects.count()
form_data = {
'text': 'Post text for TEST',
'group': self.group.pk,
}
response = self.authorized_client.post(
reverse('posts:post_create'),
data=form_data,
follow=True
)
self.assertRedirects(response, reverse('posts:profile', kwargs={
'username': self.user}))
self.assertEqual(Post.objects.count(), posts_count + 1)
self.assertTrue(Post.objects.latest('id'))
def test_edit_post(self):
form_data = {
'author': self.post.author.username,
'text': 'Post text for TEST',
'group': self.group.pk,
}
response = self.authorized_client.post(
reverse('posts:post_edit', kwargs={'post_id': self.post.pk}),
data=form_data,
follow=True
)
self.assertRedirects(
response, reverse(
'posts:post_detail', kwargs={'post_id': self.post.pk})
)
self.assertTrue(self.post)