I'm learning Django and created easy blog-like site, where user can create new post. When I try add new post with image on site all work fine, but when I try run test, he don't create new post with image and returning error. Why and how can I fix it?
test_forms.py:
class PostCreateFormTests(TestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.author = User.objects.create_user(username='author')
settings.MEDIA_ROOT = tempfile.mkdtemp(dir=settings.BASE_DIR)
cls.small_gif = (
b'\x47\x49\x46\x38\x39\x61\x02\x00'
b'\x01\x00\x80\x00\x00\x00\x00\x00'
b'\xFF\xFF\xFF\x21\xF9\x04\x00\x00'
b'\x00\x00\x00\x2C\x00\x00\x00\x00'
b'\x02\x00\x01\x00\x00\x02\x02\x0C'
b'\x0A\x00\x3B'
)
cls.uploaded = SimpleUploadedFile(
name='big.gif',
content=cls.small_gif,
content_type='image/gif'
)
cls.group = Group.objects.create(
title='test group',
slug='test-test',
description='super-mega-test-group',
)
cls.post = Post.objects.create(
text='Тестовый текст',
author=cls.author,
group=cls.group,
image=cls.uploaded,
)
@classmethod
def tearDownClass(self):
shutil.rmtree(settings.MEDIA_ROOT, ignore_errors=True)
super().tearDownClass()
def setUp(self):
self.guest_client = Client()
self.authorized_client = Client()
self.authorized_client.force_login(self.author)
def test_create_post(self):
"""Form create new post."""
posts_count = Post.objects.count()
form_data = {
'text': 'Test text',
'group': self.group.id,
'image': self.uploaded, # If I comment this line test will work fine.
}
response = self.authorized_client.post(
reverse('new_post'),
data=form_data,
follow=True
)
self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertEqual(Post.objects.count(), posts_count + 1)
post_get = Post.objects.get(pk=2)
self.assertEqual(post_get.text, form_data['text'])
self.assertEqual(post_get.group, self.group)
self.assertEqual(post_get.author, form_data['author'])
self.assertEqual(post_get.image, 'posts/big.gif') # and this
views.py:
@login_required
def new_post(request):
form = PostForm(request.POST or None, files=request.FILES or None)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.save()
return redirect('index')
return render(request, 'new.html', {'form': form})
)
The error I'm getting:
self.assertEqual(Post.objects.count(), posts_count + 1)
AssertionError: 1 != 2