Невозможно присвоить "<django.contrib.auth.auth.models.AnonymousUser object at 0x7f81fe558fa0>": "Post.author" должен быть экземпляром "UserData".
Я пытаюсь написать простые тесты для некоторых конечных точек, но второй тест постоянно срабатывает. Вот test.py
from rest_framework.test import APITestCase, APIRequestFactory, APIClient
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_user(
email="testuser@gmail.com", name="testuser"
)
self.user.set_password("pass")
self.user.save()
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):
print(User)
print(self.user)
client = APIClient()
login = client.login(email="testuser@gmail.com", password="pass")
self.assertTrue(login)
sample_post = {
"title": "sample title",
"body": "sample body",
}
request = self.factory.post(self.url, sample_post)
request.user = self.user
print(isinstance(request.user, get_user_model()))
response = self.view(request)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
А вот вид:
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:
print(str(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 промолчали). <class 'account.models.UserData'> testuser True Cannot assign "<django.contrib.auth.models.AnonymousUser объект по адресу 0x7f81fe558fa0>": "Post.author" должен быть экземпляром "UserData". F. ====================================================================== FAIL: test_create_post (posts.tests.PostListCreateTestCase) ---------------------------------------------------------------------- Traceback (последний последний вызов): Файл "/home/amr/Snakat/social_network/posts/tests.py", строка 41, in test_create_post self.assertEqual(response.status_code, status.HTTP_201_CREATED) AssertionError: 400 != 201
---------------------------------------------------------------------- Выполнил 2 теста за 0.887с
FAILED (failures=1) Destroying test database for alias 'default'...