def post(self, request, **kwargs): action = kwargs['action'] resource_id = kwargs['resource_id'] resource = Resource.objects.filter(id=resource_id).first() user_id = self.request.user.id vote = Vote.objects.filter( resource_id=resource_id, user_id=user_id).first() vote_mapping = { 'like': True, 'unlike': False, } # Create a vote object if the user has not voted yet if vote is None: vote = Vote() vote.resource = resource vote.user = self.request.user if vote.vote is None or vote.vote is not vote_mapping[action]: # If user has not voted yet or is changing his vote set vote to # current vote vote.vote = vote_mapping[action] status = action vote.save() else: vote.delete() status = "novote" response_dict = { "upvotes": len(resource.upvotes()), "downvotes": len(resource.downvotes()), "status": status, } response_json = json.dumps(response_dict) return HttpResponse(response_json, content_type="application/json")
def test_for_downvote(self): resource = self.create_resources() vote = Vote() vote.user = self.user vote.resource = resource vote.vote = False vote.save() self.assertEqual(len(resource.downvotes()), 1)