0

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

user3819738
  • 209
  • 3
  • 9

0 Answers0