Пример #1
0
    def test_multiple_user_ratings_are_created_for_multiple_ratings___calculateion_are_updated_correctly(
            self):
        foo, bar = mommy.make(Foo, name='name', _quantity=2)

        foo_rating = get_star_ratings_rating_model().objects.for_instance(foo)
        bar_rating = get_star_ratings_rating_model().objects.for_instance(bar)

        user_a, user_b, user_c = mommy.make(get_user_model(), _quantity=3)

        data = [
            UserRating(user=user_a, ip='127.0.0.1', score=1,
                       rating=foo_rating),
            UserRating(user=user_b, ip='127.0.0.2', score=3,
                       rating=foo_rating),
            UserRating(user=user_a, ip='127.0.0.1', score=1,
                       rating=bar_rating),
            UserRating(user=user_b, ip='127.0.0.2', score=3,
                       rating=bar_rating),
            UserRating(user=user_c, ip='127.0.0.2', score=5,
                       rating=bar_rating),
        ]

        UserRating.objects.bulk_create(data)

        foo_rating = get_star_ratings_rating_model().objects.get(
            pk=foo_rating.pk)
        self.assertEqual(2, foo_rating.count)
        self.assertEqual(4, foo_rating.total)
        self.assertEqual(2, foo_rating.average)

        bar_rating = get_star_ratings_rating_model().objects.get(
            pk=bar_rating.pk)
        self.assertEqual(3, bar_rating.count)
        self.assertEqual(9, bar_rating.total)
        self.assertEqual(3, bar_rating.average)
Пример #2
0
    def test_anon_ratings_is_true___none_is_returned(self):
        foo = mommy.make(Foo)

        get_star_ratings_rating_model().objects.rate(foo, 1, ip='127.0.0.1')
        get_star_ratings_rating_model().objects.rate(foo, 1, ip='127.0.0.1')

        self.assertIsNone(UserRating.objects.for_instance_by_user(foo), )
    def test_ratings_for_instance_is_called___for_instance_is_called_with_the_correct_instance(self):
        foo = Foo.objects.create()

        with patch('star_ratings.models.RatingManager.for_instance') as for_instance_mock:
            get_star_ratings_rating_model().objects.ratings_for_instance(foo)

            for_instance_mock.assert_called_once_with(foo)
    def test_ratings_for_instance_is_called___deprication_warning_is_given(self):
        foo = Foo.objects.create()

        with patch('star_ratings.models.warn') as warn_mock:
            get_star_ratings_rating_model().objects.ratings_for_instance(foo)

            warn_mock.assert_called_once_with("RatingManager method 'ratings_for_instance' has been renamed to 'for_instance'. Please change uses of 'Rating.objects.ratings_for_instance' to 'Rating.objects.for_instance' in your code.", DeprecationWarning)
    def test_multiple_user_ratings_are_created_for_multiple_ratings___calculateion_are_updated_correctly(self):
        foo, bar = mommy.make(Foo, name='name', _quantity=2)

        foo_rating = get_star_ratings_rating_model().objects.for_instance(foo)
        bar_rating = get_star_ratings_rating_model().objects.for_instance(bar)

        user_a, user_b, user_c = mommy.make(get_user_model(), _quantity=3)

        data = [
            UserRating(user=user_a, ip='127.0.0.1', score=1, rating=foo_rating),
            UserRating(user=user_b, ip='127.0.0.2', score=3, rating=foo_rating),
            UserRating(user=user_a, ip='127.0.0.1', score=1, rating=bar_rating),
            UserRating(user=user_b, ip='127.0.0.2', score=3, rating=bar_rating),
            UserRating(user=user_c, ip='127.0.0.2', score=5, rating=bar_rating),
        ]

        UserRating.objects.bulk_create(data)

        foo_rating = get_star_ratings_rating_model().objects.get(pk=foo_rating.pk)
        self.assertEqual(2, foo_rating.count)
        self.assertEqual(4, foo_rating.total)
        self.assertEqual(2, foo_rating.average)

        bar_rating = get_star_ratings_rating_model().objects.get(pk=bar_rating.pk)
        self.assertEqual(3, bar_rating.count)
        self.assertEqual(9, bar_rating.total)
        self.assertEqual(3, bar_rating.average)
    def test_user_has_rated_a_different_model_instance___results_is_false(
            self):
        foo2 = mommy.make(Foo)

        get_star_ratings_rating_model().objects.rate(self.foo, randint(1, 5),
                                                     self.user_a, '0.0.0.0')

        self.assertFalse(UserRating.objects.has_rated(foo2, self.user_a))
    def test_anon_ratings_is_true___none_is_returned(self):
        foo = mommy.make(Foo)

        get_star_ratings_rating_model().objects.rate(foo, 1, ip='127.0.0.1')
        get_star_ratings_rating_model().objects.rate(foo, 1, ip='127.0.0.1')

        self.assertIsNone(
            UserRating.objects.for_instance_by_user(foo),
        )
Пример #8
0
    def test_passed_a_rating_instance___type_error_is_raised(self):
        item = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(item)

        with assertRaisesRegex(
                self, TypeError,
                "Rating manager 'for_instance' expects model to be rated, not Rating model."
        ):
            get_star_ratings_rating_model().objects.for_instance(ratings)
Пример #9
0
    def test_ratings_for_instance_is_called___for_instance_is_called_with_the_correct_instance(
            self):
        foo = Foo.objects.create()

        with patch('star_ratings.models.RatingManager.for_instance'
                   ) as for_instance_mock:
            get_star_ratings_rating_model().objects.ratings_for_instance(foo)

            for_instance_mock.assert_called_once_with(foo)
Пример #10
0
    def test_ratings_for_instance_is_called___deprication_warning_is_given(
            self):
        foo = Foo.objects.create()

        with patch('star_ratings.models.warn') as warn_mock:
            get_star_ratings_rating_model().objects.ratings_for_instance(foo)

            warn_mock.assert_called_once_with(
                "RatingManager method 'ratings_for_instance' has been renamed to 'for_instance'. Please change uses of 'Rating.objects.ratings_for_instance' to 'Rating.objects.for_instance' in your code.",
                DeprecationWarning)
Пример #11
0
    def test_rate_is_passed_a_rating_instance___value_error_is_raised(self):
        ratings = get_star_ratings_rating_model().objects.for_instance(
            self.foo)

        with assertRaisesRegex(
                self, TypeError,
                "Rating manager 'rate' expects model to be rated, not Rating model."
        ):
            get_star_ratings_rating_model().objects.rate(
                ratings, 2, self.user_a, '127.0.0.1')
    def test_rating_object_does_not_exist_for_model___object_is_created_and_returned(self):
        item = mommy.make(Foo)

        res = get_star_ratings_rating_model().objects.for_instance(item)

        self.assertIsInstance(res, get_star_ratings_rating_model())
        self.assertEqual(item, res.content_object)
        self.assertEqual(0, res.count)
        self.assertEqual(0, res.total)
        self.assertEqual(0, res.average)
    def test_user_is_set___rating_object_for_is_returned(self):
        foo = mommy.make(Foo)
        user = mommy.make(get_user_model())

        get_star_ratings_rating_model().objects.rate(foo, 1, user=mommy.make(get_user_model()))
        expected = get_star_ratings_rating_model().objects.rate(foo, 1, user=user).user_ratings.get(user=user)

        self.assertEqual(
            expected,
            UserRating.objects.for_instance_by_user(foo, user=user),
        )
    def test_same_user_rate_twice_rerate_is_false___validation_error_is_raised(self):
        """
        If re-rating is disabled the rating should not count
        """
        ratings = get_star_ratings_rating_model().objects.rate(self.foo, 4, self.user_a, '127.0.0.1')
        with self.assertRaises(ValidationError):
            ratings = get_star_ratings_rating_model().objects.rate(self.foo, 2, self.user_a, '127.0.0.1')

        self.assertEqual(ratings.count, 1)
        self.assertEqual(ratings.total, 4)
        self.assertEqual(ratings.average, 4)
Пример #15
0
    def test_rating_object_does_not_exist_for_model___object_is_created_and_returned(
            self):
        item = mommy.make(Foo)

        res = get_star_ratings_rating_model().objects.for_instance(item)

        self.assertIsInstance(res, get_star_ratings_rating_model())
        self.assertEqual(item, res.content_object)
        self.assertEqual(0, res.count)
        self.assertEqual(0, res.total)
        self.assertEqual(0, res.average)
    def test_same_user_rate_twice_rerate_is_true___rating_is_changed(self, scores):
        first, second = scores

        ratings = get_star_ratings_rating_model().objects.rate(self.foo, first, self.user_a, '127.0.0.1')
        self.assertTrue(ratings.user_ratings.filter(user=self.user_a, score=first))
        self.assertEqual(ratings.count, 1)
        self.assertEqual(ratings.total, first)
        self.assertEqual(ratings.average, first)

        ratings = get_star_ratings_rating_model().objects.rate(self.foo, second, self.user_a, '127.0.0.1')
        self.assertTrue(ratings.user_ratings.filter(user=self.user_a, score=second))
        self.assertEqual(ratings.count, 1)
        self.assertEqual(ratings.total, second)
        self.assertEqual(ratings.average, second)
Пример #17
0
    def test_same_user_rate_twice_rerate_is_false___validation_error_is_raised(
            self):
        """
        If re-rating is disabled the rating should not count
        """
        ratings = get_star_ratings_rating_model().objects.rate(
            self.foo, 4, self.user_a, '127.0.0.1')
        with self.assertRaises(ValidationError):
            ratings = get_star_ratings_rating_model().objects.rate(
                self.foo, 2, self.user_a, '127.0.0.1')

        self.assertEqual(ratings.count, 1)
        self.assertEqual(ratings.total, 4)
        self.assertEqual(ratings.average, 4)
Пример #18
0
    def test_order_item_by_total_rating_is_possible(self):
        user = fake_user()
        foo_a = self.foo = Foo.objects.create(name='foo a')
        foo_b = self.foo = Foo.objects.create(name='foo b')

        # total rating: 4
        get_star_ratings_rating_model().objects.rate(foo_a, 4, user, '127.0.0.1')

        # total rating: 3
        get_star_ratings_rating_model().objects.rate(foo_b, 3, user, '127.0.0.1')

        foos = Foo.objects.filter(ratings__isnull=False).order_by('ratings__total')
        self.assertEqual(foos[1].pk, foo_a.pk)
        self.assertEqual(foos[0].pk, foo_b.pk)
Пример #19
0
    def test_user_is_set___rating_object_for_is_returned(self):
        foo = mommy.make(Foo)
        user = mommy.make(get_user_model())

        get_star_ratings_rating_model().objects.rate(foo,
                                                     1,
                                                     user=mommy.make(
                                                         get_user_model()))
        expected = get_star_ratings_rating_model().objects.rate(
            foo, 1, user=user).user_ratings.get(user=user)

        self.assertEqual(
            expected,
            UserRating.objects.for_instance_by_user(foo, user=user),
        )
Пример #20
0
    def test_rating_object_exists_for_model___that_object_is_returned(self):
        item = mommy.make(Foo)
        rating = fake_rating(content_object=item)

        res = get_star_ratings_rating_model().objects.for_instance(item)

        self.assertEqual(rating, res)
    def test_rating_object_exists_for_model___that_object_is_returned(self):
        item = mommy.make(Foo)
        rating = fake_rating(content_object=item)

        res = get_star_ratings_rating_model().objects.for_instance(item)

        self.assertEqual(rating, res)
    def test_has_rate_is_passed_a_rating_instance___type_error_is_raised(self):
        user = mommy.make(get_user_model())
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)

        with assertRaisesRegex(self, TypeError, "UserRating manager 'has_rated' expects model to be rated, not UserRating model."):
            UserRating.objects.has_rated(ratings, user)
Пример #23
0
    def test_order_item_by_count_rating_is_possible(self):
        user_a, user_b = fake_user(_quantity=2)
        foo_a = self.foo = Foo.objects.create(name='foo a')
        foo_b = self.foo = Foo.objects.create(name='foo b')

        # 2 ratings
        get_star_ratings_rating_model().objects.rate(foo_a, 4, user_a, '127.0.0.1')
        get_star_ratings_rating_model().objects.rate(foo_a, 1, user_a, '127.0.0.1')

        # 3 ratings
        get_star_ratings_rating_model().objects.rate(foo_b, 2, user_b, '127.0.0.1')
        get_star_ratings_rating_model().objects.rate(foo_b, 3, user_b, '127.0.0.1')
        get_star_ratings_rating_model().objects.rate(foo_b, 2, user_b, '127.0.0.1')

        foos = Foo.objects.filter(ratings__isnull=False).order_by('ratings__count')
        self.assertEqual(foos[0].pk, foo_a.pk)
        self.assertEqual(foos[1].pk, foo_b.pk)
    def test_view_is_called_when_nobody_is_logged_in_and_anon_ratings_is_false___user_is_forwarded_to_login(self):
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)

        url = reverse('ratings:rate', args=(ratings.content_type_id, ratings.object_id))
        response = self.post_json(url, {'score': 1})

        self.assertRedirects(response, settings.LOGIN_URL + '?next=' + url, fetch_redirect_response=False)
    def test_multiple_users_rating_the_object___aggregates_are_updated(self, scores):
        ratings = None
        for score in scores:
            ratings = get_star_ratings_rating_model().objects.rate(self.foo, score, fake_user(), '127.0.0.1')

        self.assertEqual(ratings.count, len(scores))
        self.assertAlmostEqual(ratings.total, sum(scores))
        self.assertAlmostEqual(ratings.average, mean(scores))
Пример #26
0
    def test_anon_is_true___result_contains_ip_and_rating_name(self):
        user = mommy.make(get_user_model())
        foo = mommy.make(Foo)

        rating = get_star_ratings_rating_model().objects.rate(foo, 1, user, '127.0.0.1')
        user_rating = rating.user_ratings.get(ip='127.0.0.1')

        self.assertEqual('{} rating {} for {}'.format('127.0.0.1', user_rating.score, foo), str(user_rating))
Пример #27
0
    def test_same_user_rate_twice_rerate_is_true___rating_is_changed(
            self, scores):
        first, second = scores

        ratings = get_star_ratings_rating_model().objects.rate(
            self.foo, first, self.user_a, '127.0.0.1')
        self.assertTrue(
            ratings.user_ratings.filter(user=self.user_a, score=first))
        self.assertEqual(ratings.count, 1)
        self.assertEqual(ratings.total, first)
        self.assertEqual(ratings.average, first)

        ratings = get_star_ratings_rating_model().objects.rate(
            self.foo, second, self.user_a, '127.0.0.1')
        self.assertTrue(
            ratings.user_ratings.filter(user=self.user_a, score=second))
        self.assertEqual(ratings.count, 1)
        self.assertEqual(ratings.total, second)
        self.assertEqual(ratings.average, second)
    def test_several_ratings_are_made___percentage_is_correct_in_result(self, scores):
        with patch('django.template.Template.render') as render_mock:
            item = mommy.make(Foo)

            request = RequestFactory().get('/')
            request.user = fake_user()

            for score in scores:
                get_star_ratings_rating_model().objects.rate(item, score, mommy.make(get_user_model()))

            rating = get_star_ratings_rating_model().objects.for_instance(item)

            ratings({
                'request': request,
            }, item)

            context = render_mock.call_args_list[0][0][0]
            expected_avg = 100 * (rating.average / Decimal(app_settings.STAR_RATINGS_RANGE))
            self.assertEqual(expected_avg, context['percentage'])
Пример #29
0
    def test_several_ratings_are_made___percentage_is_correct_in_result(self, scores):
        with patch('django.template.Template.render') as render_mock:
            item = mommy.make(Foo)

            request = RequestFactory().get('/')
            request.user = fake_user()

            for score in scores:
                get_star_ratings_rating_model().objects.rate(item, score, mommy.make(get_user_model()))

            rating = get_star_ratings_rating_model().objects.for_instance(item)

            ratings({
                'request': request,
            }, item)

            context = render_mock.call_args_list[0][0][0]
            expected_avg = 100 * (rating.average / Decimal(app_settings.STAR_RATINGS_RANGE))
            self.assertEqual(expected_avg, context['percentage'])
Пример #30
0
    def test_has_rate_is_passed_a_rating_instance___type_error_is_raised(self):
        user = mommy.make(get_user_model())
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)

        with assertRaisesRegex(
                self, TypeError,
                "UserRating manager 'has_rated' expects model to be rated, not UserRating model."
        ):
            UserRating.objects.has_rated(ratings, user)
Пример #31
0
    def test_multiple_users_rating_the_object___aggregates_are_updated(
            self, scores):
        ratings = None
        for score in scores:
            ratings = get_star_ratings_rating_model().objects.rate(
                self.foo, score, fake_user(), '127.0.0.1')

        self.assertEqual(ratings.count, len(scores))
        self.assertAlmostEqual(ratings.total, sum(scores))
        self.assertAlmostEqual(ratings.average, mean(scores))
    def test_deleting_the_rating___aggregates_are_updated(self, scores):
        ratings = None
        for score in scores:
            ratings = get_star_ratings_rating_model().objects.rate(self.foo, score, fake_user(), '127.0.0.1')

        removed_score = scores.pop()
        ratings.user_ratings.filter(score=removed_score).first().delete()

        self.assertEqual(ratings.count, len(scores))
        self.assertAlmostEqual(ratings.total, sum(scores))
        self.assertAlmostEqual(ratings.average, mean(scores))
    def test_user_is_logged_in_and_doesnt_already_have_a_rating_next_url_is_given___redirected_to_next(self):
        user = self.get_user()
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)

        score = randint(1, 5)

        url = reverse('ratings:rate', args=(ratings.content_type_id, ratings.object_id)) + '?next=/foo/bar'
        response = self.post_json(url, {'score': score}, user=user)

        self.assertRedirects(response, '/foo/bar', fetch_redirect_response=False)
Пример #34
0
    def test_object_name_contains_any_unicode___str_does_not_error(self, name):
        user = mommy.make(get_user_model())
        foo = mommy.make(Foo, name=name)

        rating = get_star_ratings_rating_model().objects.rate(foo, 1, user, '0.0.0.0')
        user_rating = rating.user_ratings.get(user=user)

        try:
            str(user_rating)
        except:
            self.fail('"str" raised when it should\'nt')
Пример #35
0
    def test_correct_number_of_(self):
        foo = mommy.make(Foo, name='name')
        rating = get_star_ratings_rating_model().objects.for_instance(foo)
        user_a, user_b = mommy.make(get_user_model(), _quantity=2)

        data = [
            UserRating(user=user_a, ip='127.0.0.1', score=3, rating=rating),
            UserRating(user=user_b, ip='127.0.0.2', score=3, rating=rating),
        ]

        UserRating.objects.bulk_create(data)
        self.assertEqual(UserRating.objects.count(), 2)
    def test_view_is_called_when_nobody_is_logged_in_and_anon_ratings_is_true___rating_is_created(self):
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)

        score = randint(1, 5)

        url = reverse('ratings:rate', args=(ratings.content_type_id, ratings.object_id))
        self.post_json(url, {'score': score})

        ct = ContentType.objects.get_for_model(foo)

        self.assertTrue(UserRating.objects.filter(rating__object_id=foo.pk, rating__content_type=ct, score=score, ip='127.0.0.1').exists())
    def test_view_is_called_when_nobody_is_logged_in_and_anon_ratings_is_false___user_is_forwarded_to_login(
            self):
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)

        url = reverse('ratings:rate',
                      args=(ratings.content_type_id, ratings.object_id))
        response = self.post_json(url, {'score': 1})

        self.assertRedirects(response,
                             settings.LOGIN_URL + '?next=' + url,
                             fetch_redirect_response=False)
    def test_correct_number_of_(self):
        foo = mommy.make(Foo, name='name')
        rating = get_star_ratings_rating_model().objects.for_instance(foo)
        user_a, user_b = mommy.make(get_user_model(), _quantity=2)

        data = [
            UserRating(user=user_a, ip='127.0.0.1', score=3, rating=rating),
            UserRating(user=user_b, ip='127.0.0.2', score=3, rating=rating),
        ]

        UserRating.objects.bulk_create(data)
        self.assertEqual(UserRating.objects.count(), 2)
    def test_user_is_logged_in_already_has_a_rating_rerate_is_true___redirected_to_root(self):
        user = self.get_user()
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)
        mommy.make(UserRating, rating=ratings, score=1, user=user)

        score = randint(2, 5)

        url = reverse('ratings:rate', args=(ratings.content_type_id, ratings.object_id))
        response = self.post_json(url, {'score': score}, user=user)

        self.assertRedirects(response, '/', fetch_redirect_response=False)
    def test_stars_return_the_correct_html(self):
        average = 5 * random()
        max_val = 5
        rating = fake_rating(average=average)

        res = RatingAdmin(get_star_ratings_rating_model(), site).stars(rating)

        self.assertHTMLEqual(
            """<div style='position: relative;'>
                <span style='position: absolute; top: 0; left: 0; width: {}px; height: 10px; background: url(/static/star-ratings/images/admin_stars.png) 0px 10px'>&nbsp;</span>
                <span style='position: absolute; top: 0; left: 0; width: {}px; height: 10px; background: url(/static/star-ratings/images/admin_stars.png)'>&nbsp;</span>
            </div>""".format(max_val * 10, average * 10), res)
Пример #41
0
    def test_deleting_the_rating___aggregates_are_updated(self, scores):
        ratings = None
        for score in scores:
            ratings = get_star_ratings_rating_model().objects.rate(
                self.foo, score, fake_user(), '127.0.0.1')

        removed_score = scores.pop()
        ratings.user_ratings.filter(score=removed_score).first().delete()

        self.assertEqual(ratings.count, len(scores))
        self.assertAlmostEqual(ratings.total, sum(scores))
        self.assertAlmostEqual(ratings.average, mean(scores))
    def test_user_is_logged_in_already_has_a_rating_rerate_is_false_reuest_is_ajax___response_is_400(self):
        user = self.get_user()
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)
        mommy.make(UserRating, rating=ratings, score=1, user=user)

        score = randint(2, 5)

        url = reverse('ratings:rate', args=(ratings.content_type_id, ratings.object_id)) + '?next=/foo/bar'
        response = self.post_json(url, {'score': score}, user=user, xhr=True, expect_errors=True)

        self.assertEqual(400, response.status_code)
    def test_user_is_logged_in_and_doesnt_already_have_a_rating_no_next_url_is_given___redirected_to_root(
            self):
        user = self.get_user()
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)

        score = randint(1, 5)

        url = reverse('ratings:rate',
                      args=(ratings.content_type_id, ratings.object_id))
        response = self.post_json(url, {'score': score}, user=user)

        self.assertRedirects(response, '/', fetch_redirect_response=False)
    def test_user_is_logged_in_already_has_a_rating_rerate_is_true_request_is_ajax___response_is_updated_aggregate_data(self):
        user = self.get_user()
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)
        mommy.make(UserRating, rating=ratings, score=1, user=user)

        score = randint(2, 5)

        url = reverse('ratings:rate', args=(ratings.content_type_id, ratings.object_id))

        response = self.post_json(url, {'score': score}, user=user, xhr=True)
        ratings = get_star_ratings_rating_model().objects.get(pk=ratings.pk)
        expected = ratings.to_dict()
        expected['percentage'] = float(expected['percentage'])
        expected['user_rating'] = score

        try:
            json_resp = response.json()
        except AttributeError:
            json_resp = json.loads(response.content.decode())

        self.assertEqual(expected, json_resp)
    def test_user_is_logged_in_and_doesnt_already_have_a_rating___rating_is_created(self):
        user = self.get_user()
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)

        score = randint(1, 5)

        url = reverse('ratings:rate', args=(ratings.content_type_id, ratings.object_id))
        self.post_json(url, {'score': score}, user=user)

        ct = ContentType.objects.get_for_model(foo)

        self.assertTrue(UserRating.objects.filter(user=user, rating__object_id=foo.pk, rating__content_type=ct, score=score).exists())
    def test_user_is_logged_in_already_has_a_rating_rerate_is_true___redirected_to_root(
            self):
        user = self.get_user()
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)
        mommy.make(UserRating, rating=ratings, score=1, user=user)

        score = randint(2, 5)

        url = reverse('ratings:rate',
                      args=(ratings.content_type_id, ratings.object_id))
        response = self.post_json(url, {'score': score}, user=user)

        self.assertRedirects(response, '/', fetch_redirect_response=False)
    def test_user_is_logged_in_already_has_a_rating_rerate_is_false_request_is_ajax___rating_is_not_changed(self):
        user = self.get_user()
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)
        rating = mommy.make(UserRating, rating=ratings, score=1, user=user)
        orig_score = rating.score

        score = randint(2, 5)

        url = reverse('ratings:rate', args=(ratings.content_type_id, ratings.object_id))
        self.post_json(url, {'score': score}, user=user, xhr=True, expect_errors=True)

        rating = UserRating.objects.get(pk=rating.pk)
        self.assertEqual(orig_score, rating.score)
Пример #48
0
    def test_item_is_not_yet_rated___rating_object_for_item_is_returned(self, render_mock):
        item = mommy.make(Foo)

        request = RequestFactory().get('/')
        request.user = fake_user()

        ratings({
            'request': request,
        }, item)

        context = render_mock.call_args_list[0][0][0]
        print(context)
        self.assertIsInstance(context['rating'], get_star_ratings_rating_model())
        self.assertEqual(item, context['rating'].content_object)
Пример #49
0
    def test_item_is_rated___rating_object_for_item_is_returned(self, render_mock):
        item = mommy.make(Foo)

        rating = get_star_ratings_rating_model().objects.for_instance(item)

        request = RequestFactory().get('/')
        request.user = fake_user()

        ratings({
            'request': request,
        }, item)

        context = render_mock.call_args_list[0][0][0]
        self.assertEqual(rating, context['rating'])
    def test_item_is_rated___rating_object_for_item_is_returned(self, render_mock):
        item = mommy.make(Foo)

        rating = get_star_ratings_rating_model().objects.for_instance(item)

        request = RequestFactory().get('/')
        request.user = fake_user()

        ratings({
            'request': request,
        }, item)

        context = render_mock.call_args_list[0][0][0]
        self.assertEqual(rating, context['rating'])
    def test_user_is_logged_in_already_has_a_rating_rerate_is_true___rating_is_updated(self):
        user = self.get_user()
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)
        rating = mommy.make(UserRating, rating=ratings, score=1, user=user)

        score = randint(2, 5)

        url = reverse('ratings:rate', args=(ratings.content_type_id, ratings.object_id))
        self.post_json(url, {'score': score}, user=user)

        rating = UserRating.objects.get(pk=rating.pk)

        self.assertEqual(score, rating.score)
    def test_item_is_not_yet_rated___rating_object_for_item_is_returned(self, render_mock):
        item = mommy.make(Foo)

        request = RequestFactory().get('/')
        request.user = fake_user()

        ratings({
            'request': request,
        }, item)

        context = render_mock.call_args_list[0][0][0]
        print(context)
        self.assertIsInstance(context['rating'], get_star_ratings_rating_model())
        self.assertEqual(item, context['rating'].content_object)
    def test_user_is_logged_in_already_has_a_rating_rerate_is_true_request_is_ajax___response_is_updated_aggregate_data(
            self):
        user = self.get_user()
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)
        mommy.make(UserRating, rating=ratings, score=1, user=user)

        score = randint(2, 5)

        url = reverse('ratings:rate',
                      args=(ratings.content_type_id, ratings.object_id))

        response = self.post_json(url, {'score': score}, user=user, xhr=True)
        ratings = get_star_ratings_rating_model().objects.get(pk=ratings.pk)
        expected = ratings.to_dict()
        expected['percentage'] = float(expected['percentage'])
        expected['user_rating'] = score

        try:
            json_resp = response.json()
        except AttributeError:
            json_resp = json.loads(response.content.decode())

        self.assertEqual(expected, json_resp)
    def test_user_is_logged_in_already_has_a_rating_rerate_is_true_request_is_ajax___rating_is_updated(
            self):
        user = self.get_user()
        foo = mommy.make(Foo)
        ratings = get_star_ratings_rating_model().objects.for_instance(foo)
        rating = mommy.make(UserRating, rating=ratings, score=1, user=user)

        score = randint(2, 5)

        url = reverse('ratings:rate',
                      args=(ratings.content_type_id, ratings.object_id))
        self.post_json(url, {'score': score}, user=user, xhr=True)

        rating = UserRating.objects.get(pk=rating.pk)

        self.assertEqual(score, rating.score)
    def test_user_is_authenticated_with_rating_for_object___user_rating_for_user_is_returned(self, render_mock):
        item = mommy.make(Foo)

        request = RequestFactory().get('/')
        request.user = get_user_model().objects.create_user(username='******', password='******')
        self.client.login(username='******', password='******')

        rating = get_star_ratings_rating_model().objects.rate(item, 3, request.user)
        user_rating = UserRating.objects.get(rating=rating, user=request.user)

        ratings({
            'request': request,
        }, item)

        context = render_mock.call_args_list[0][0][0]
        self.assertEqual(user_rating, context['user_rating'])
Пример #56
0
    def test_user_is_authenticated_with_rating_for_object___user_rating_for_user_is_returned(self, render_mock):
        item = mommy.make(Foo)

        request = RequestFactory().get('/')
        request.user = get_user_model().objects.create_user(username='******', password='******')
        self.client.login(username='******', password='******')

        rating = get_star_ratings_rating_model().objects.rate(item, 3, request.user)
        user_rating = UserRating.objects.get(rating=rating, user=request.user)

        ratings({
            'request': request,
        }, item)

        context = render_mock.call_args_list[0][0][0]
        self.assertEqual(user_rating, context['user_rating'])