Почему этот тест не проходит?
Я пытаюсь написать простой тест для некоторых конечных точек, но второй тест постоянно срывается. Вот test.py
from rest_framework.test import APITestCase, APIRequestFactory
from rest_framework import status
from django.urls import reverse
from .views import PostViewSet
from django.contrib.auth import get_user_model
User = get_user_model()
class PostListCreateTestCase(APITestCase):
def setUp(self):
self.factory = APIRequestFactory()
self.view = PostViewSet.as_view({"get": "list", "post": "create"})
self.url = reverse("post_list")
self.user = User.objects.create(
email="testuser@gmail.com", name="testuser", password="pass"
)
def test_list_posts(self):
request = self.factory.get(self.url)
response = self.view(request)
self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_create_post(self):
sample_post = {
"title": "sample title",
"body": "sample body",
}
request = self.factory.post(self.url, sample_post)
request.user = self.user
response = self.view(request)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
And here's the view:
from rest_framework import viewsets, status
from rest_framework.response import Response
from django.shortcuts import get_object_or_404
from .serializers import PostSerializer, LikeSerializer
from .models import Post, Like
class PostViewSet(viewsets.ModelViewSet):
serializer_class = PostSerializer
queryset = Post.objects.all()
def get_queryset(self):
posts = Post.objects.all()
return posts
def get_object(self):
post = get_object_or_404(self.get_queryset(), pk=self.kwargs["pk"])
self.check_object_permissions(self.request, post)
return post
def create(self, request, *args, **kwargs):
try:
post = Post.objects.create(
title=request.data.get("title"),
body=request.data.get("body"),
author=request.user,
)
post = PostSerializer(post)
return Response(post.data, status=status.HTTP_201_CREATED)
except Exception as ex:
return Response(str(ex), status=status.HTTP_400_BAD_REQUEST)
def list(self, request, *args, **kwargs):
posts = self.get_queryset()
serializer = self.get_serializer(posts, many=True)
return Response(
data=dict(posts=serializer.data, total=len(serializer.data)),
status=status.HTTP_200_OK,
)
Вот что я получил:
Найдено 2 теста. Создание тестовой базы данных для псевдонима 'default'... Система проверка не выявила проблем (0 промолчали). F. ====================================================================== FAIL: test_create_post (posts.tests.PostListCreateTestCase) ---------------------------------------------------------------------- Traceback (последний последний вызов): Файл "/home/amr/Snakat/social_network/posts/tests.py", строка 31, in test_create_post self.assertEqual(response.status_code, status.HTTP_201_CREATED) AssertionError: 400 != 201
---------------------------------------------------------------------- Выполнил 2 теста за 0.023с
FAILED (failures=1) Destroying test database for alias 'default'...