def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) review = self.perform_create(serializer) headers = self.get_success_headers(serializer.data) return Response( ReviewSerializer(review).data, status=status.HTTP_201_CREATED, headers=headers )
def test_list_second_user_reviews(self): # Arrange self.client.force_authenticate(self.second_user) expected_reviews = Review.objects.filter(user=self.second_user) serializer = ReviewSerializer(expected_reviews, many=True) # Act response = self.client.get(reverse('evaluation:reviews-list')) # Assert self.assertEquals(response.data, serializer.data)
def test_retrive_review_second_user_success(self): # Arrange serializer = ReviewSerializer(self.review2) self.client.force_authenticate(self.second_user) # Act response = self.client.get( reverse('evaluation:reviews-detail', args=[self.review2.id])) # Assert self.assertEquals(response.status_code, status.HTTP_200_OK) self.assertEquals(response.data, serializer.data)
class ReviewViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet): permission_classes = [IsAuthenticated] def get_queryset(self): if not self.request.user.is_anonymous: return self.request.user.reviews.all() def get_serializer_class(self): if self.action == 'create': return ReviewWriteSerializer return ReviewSerializer def get_client_ip(self, request): x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if x_forwarded_for: ip = x_forwarded_for.split(',')[0] else: ip = request.META.get('REMOTE_ADDR') return ip def perform_create(self, serializer): review = Review(**serializer.data) review.user = self.request.user review.ip_address = self.get_client_ip(self.request) review.save() return review @swagger_auto_schema(responses={200: ReviewSerializer()}) def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) review = self.perform_create(serializer) headers = self.get_success_headers(serializer.data) return Response( ReviewSerializer(review).data, status=status.HTTP_201_CREATED, headers=headers )
def test_review_serializer(self): expected_data = { 'id': self.review1.id, 'title': 'Test Review 01', 'summary': 'Test Review 01 Summary', 'rating': 4, 'company': 'Company 01', 'ip_address': '127.0.0.1', 'date': self.review1.date.strftime('%Y-%m-%dT%H:%M:%S.%fZ'), 'user': { 'id': self.user.id, 'username': self.user.username, 'email': self.user.email, 'first_name': self.user.first_name, 'last_name': self.user.last_name } } serializer = ReviewSerializer(self.review1) self.assertEquals(serializer.data, expected_data)
def test_create_review_success_forwarded_ip(self): # Arrange self.client.force_authenticate(self.first_user) reviews_before_insert = self.first_user.reviews.count() new_review = Review() new_review.title = 'Title New' new_review.summary = 'Summary New' new_review.rating = 5 new_review.company = 'New Company' serializer = ReviewSerializer(new_review) # Act response = self.client.post(reverse('evaluation:reviews-list'), serializer.data, HTTP_X_FORWARDED_FOR="8.8.8.8") # Assert self.assertEquals(response.status_code, status.HTTP_201_CREATED) self.assertEquals(1, reviews_before_insert) self.assertEquals(2, Review.objects.filter(user=self.first_user).count())
def test_create_view_wrong_rating(self): # Arrange self.client.force_authenticate(self.first_user) reviews_before_insert = self.first_user.reviews.count() new_review = Review() new_review.title = 'Title New' new_review.summary = 'Summary New' new_review.rating = 10 new_review.company = 'New Company' serializer = ReviewSerializer(new_review) # Act response = self.client.post( reverse('evaluation:reviews-list'), serializer.data, ) # Assert self.assertEquals(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEquals(1, reviews_before_insert) self.assertEquals(1, Review.objects.filter(user=self.first_user).count())