def test_get_valid_post(self): response = client.get( f'/api/author/{self.author.id}/posts/{self.post.id}/') post = Post.objects.get(id=self.post.id) serializer = PostSerializer(post) self.assertEqual(response.data, serializer.data) self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_get_all_posts_for_myself(self): self.auth_client.force_authenticate(user=self.user1) response = self.auth_client.get( f'/api/author/{self.author1.id}/posts/') posts = Post.objects.filter(author=self.author1.id) serializer = PostSerializer(posts, many=True) self.assertEqual(response.data, serializer.data) self.assertEqual(response.status_code, status.HTTP_200_OK)
def create(self, request, author, id): try: author = Author.objects.get(id=author) post = Post.objects.create(author=author, id=id, **request.data) serializer = PostSerializer(post) except Author.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) return Response(serializer.data, status=status.HTTP_201_CREATED)
def list(self, request): try: # Warning: visibility='PUBLIC' (single quotes) does not work. queryset = Post.objects.filter(visibility="PUBLIC", unlisted=False) serializer = PostSerializer(queryset, many=True) except Post.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) return Response(serializer.data)
def test_create_post(self): response = client.put( f'/api/author/{self.author.id}/posts/{self.uuid}/', data=json.dumps(self.payload), content_type='application/json') post = Post.objects.get(id=self.uuid) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(response.data, PostSerializer(post).data)
def test_create_post(self): self.auth_client.force_authenticate(user=self.user) response = self.auth_client.post( f'/api/author/{self.author.id}/posts/', data=json.dumps(self.payload), content_type='application/json') post = Post.objects.get(id=response.data['id']) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(response.data, PostSerializer(post).data)
def tests_get_all_public_posts(self): response = client.get(f'/api/public-posts/') posts = Post.objects.filter(visibility='PUBLIC', unlisted=False) serializer = PostSerializer(posts, many=True) self.assertEqual(response.data, serializer.data) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data), 2)
def test_get_all_posts_for_another_author(self): self.auth_client.force_authenticate(user=self.user2) response = self.auth_client.get( f'/api/author/{self.author1.id}/posts/') posts = Post.objects.filter(author=self.author1.id, visibility="PUBLIC", unlisted=False) serializer = PostSerializer(posts, many=True) self.assertEqual(response.data, serializer.data) self.assertEqual(response.status_code, status.HTTP_200_OK)
def post(self, request, pk=None): serializer_context = { 'request': request, } serializer = PostSerializer(data=request.data, context=serializer_context) print("P",serializer.is_valid()) if serializer.is_valid() == True: print("sucessful backend") # Compare the userID from request with userID from provided token userIDFromRequest = serializer.validated_data['userID'] userIDFromToken = request.user if(userIDFromRequest == userIDFromToken): instance = serializer.save() messages.success(request._request, 'Success') return Response(serializer.data, status=status.HTTP_201_CREATED) else: raise ValidationError("Sorry, you are trying to post as another user which is forbidden..") else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def test_update_post(self): response = client.post( f'/api/author/{self.author.id}/posts/{self.post.id}/', data=json.dumps(self.payload), content_type='application/json') self.assertEqual(response.status_code, status.HTTP_200_OK) # Compare each payload field with the updated Post object. serializer = PostSerializer(Post.objects.get(id=self.post.id)) for k in self.payload: self.assertEqual(serializer.data[k], self.payload[k]) # Ensure other fields are unchanged self.assertEqual(serializer.data['id'], str(self.post.id)) self.assertEqual(serializer.data['type'], self.post.type)
def list(self, request, author): try: authenticated_author = Author.objects.get( user__username=request.user) # Check if the authenticated author is the same as the author we're querying for posts. if str(authenticated_author.id) == author: queryset = Post.objects.filter(author=author) else: queryset = Post.objects.filter(author=author, visibility="PUBLIC", unlisted=False) serializer = PostSerializer(queryset, many=True) except (Author.DoesNotExist, Post.DoesNotExist): return Response(status=status.HTTP_404_NOT_FOUND) return Response(serializer.data)