Exemple #1
0
    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
        )
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
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
        )
Exemple #5
0
    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)
Exemple #6
0
    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())
Exemple #7
0
    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())