Exemple #1
0
    def test_trending_returns_earlier_post_when_equal_ratings(self):
        low_post = PostFactory()
        middle_post = PostFactory()
        high_post = PostFactory()
        for i in range(50):
            RatingFactory(content_object=low_post, value=Rating.LIKE_VALUE)
            RatingFactory(content_object=middle_post, value=Rating.LIKE_VALUE)
            RatingFactory(content_object=high_post, value=Rating.LIKE_VALUE)

        low_post.created_at = timezone.now() - timedelta(hours=20)
        low_post.save()
        middle_post.created_at = timezone.now() - timedelta(hours=10)
        middle_post.save()
        high_post.created_at = timezone.now() - timedelta(hours=3)
        high_post.save()

        request = self.factory.get("api/posts/trending/")
        force_authenticate(request, self.user)
        response = self.trending_view(request)

        posts = response.data['results']

        self.assertEqual(posts[0]["id"], high_post.id)
        self.assertEqual(posts[1]["id"], middle_post.id)
        self.assertEqual(posts[2]["id"], low_post.id)
Exemple #2
0
    def test_best_post_method_works_correctly(self):
        best_post = PostFactory(topic=self.active_topic)
        RatingFactory.create_batch(20, content_object=best_post, value=Rating.LIKE_VALUE)

        other_posts = PostFactory.create_batch(5, topic=self.active_topic)

        for post in other_posts:
            RatingFactory.create_batch(10, content_object=post)

        self.assertEqual(best_post, self.active_topic.get_best_post())
Exemple #3
0
    def test_ratings_are_calculated_correctly(self):
        like_count = random.randint(0, 100)
        dislike_count = random.randint(0, 100)
        expected_rating = like_count * Rating.LIKE_VALUE + dislike_count * Rating.DISLIKE_VALUE

        RatingFactory.create_batch(like_count,
                                   value=Rating.LIKE_VALUE,
                                   content_object=self.comment)
        RatingFactory.create_batch(dislike_count,
                                   value=Rating.DISLIKE_VALUE,
                                   content_object=self.comment)

        self.assertEqual(expected_rating, self.comment.get_rating())
Exemple #4
0
    def test_top_view_sort_correctly(self):
        batch_size = 5
        new_posts = PostFactory.create_batch(batch_size)

        for p in new_posts:
            RatingFactory.create_batch(batch_size, content_object=p)

        request = self.factory.get("api/posts/top")
        force_authenticate(request, user=self.user)
        response = self.top_view(request)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        posts = response.data['results']

        for i in range(len(posts) - 1):
            self.assertGreaterEqual(posts[i]['rating'], posts[i + 1]['rating'])
Exemple #5
0
 def test_post_detail_serializer_return_rating(self):
     new_post = PostFactory()
     RatingFactory(content_object=new_post, user=self.user, value=Rating.LIKE_VALUE)
     request = self.factory.get("api/posts/{id}/")
     force_authenticate(request, user=self.user)
     response = self.detail_view(request, pk=new_post.id)
     self.assertEqual(response.data['user_rating']['value'], 1)
Exemple #6
0
 def test_rate_view_update_correctly(self):
     new_post = PostFactory()
     RatingFactory(content_object=new_post, value=Rating.LIKE_VALUE)
     data = {}
     data['vote'] = Rating.LIKE_VALUE
     request = self.factory.put("api/posts/{id}/rate", data)
     force_authenticate(request, user=self.user)
     response = self.rate_view(request, pk=new_post.id)
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(2, new_post.get_rating())
Exemple #7
0
    def handle(self, *args, **options):
        TopicFactory.create_batch(5)

        for topic in Topic.objects.all():
            PostFactory.create_batch(5, topic=topic)

        for post in Post.objects.all():
            RatingFactory.create_batch(5, content_object=post)
            CommentFactory.create_batch(5,
                                        post=post,
                                        user=User.objects.first())

            for comment in post.comments.all():
                CommentFactory.create_batch(5,
                                            post=post,
                                            user=User.objects.first(),
                                            parent=comment)

            for comment in post.comments.all():
                RatingFactory.create_batch(5,
                                           content_object=comment,
                                           user=User.objects.first())
Exemple #8
0
    def test_rate_view_deletes_rating(self):
        new_comment = CommentFactory()
        rating_id = RatingFactory(content_object=new_comment,
                                  user=self.user).id

        data = {'vote': Rating.DELETE_RATING_VALUE}

        request = self.factory.put("api/posts/{id}/rate", data)
        force_authenticate(request, user=self.user)
        response = self.rate_view(request, pk=new_comment.id)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(0, new_comment.get_rating())
        self.assertFalse(Rating.objects.filter(pk=rating_id).exists())
Exemple #9
0
    def test_trending_view_returns_highly_rated_new_posts_first(self):
        low_post = PostFactory()
        RatingFactory.create_batch(3, content_object=low_post, value=Rating.LIKE_VALUE)

        middle_post = PostFactory()
        RatingFactory.create_batch(7, content_object=middle_post, value=Rating.LIKE_VALUE)

        high_post = PostFactory()
        RatingFactory.create_batch(50, content_object=high_post, value=Rating.LIKE_VALUE)

        request = self.factory.get("api/posts/trending/")
        force_authenticate(request, self.user)
        response = self.trending_view(request)

        posts = response.data['results']

        self.assertEqual(posts[0]["id"], high_post.id)
        self.assertEqual(posts[1]["id"], middle_post.id)
        self.assertEqual(posts[2]["id"], low_post.id)