def review_vote_put_handler(review_id, user):
    """Set your vote for a specified review.

    **OAuth scope:** vote

    :json boolean vote: ``true`` if upvote, ``false`` if downvote

    :statuscode 200: success
    :statuscode 400: invalid request (see source)
    :statuscode 403: daily vote limit exceeded
    :statuscode 404: review not found

    :resheader Content-Type: *application/json*
    """
    def fetch_params():
        vote = Parser.bool('json', 'vote')
        return vote

    review = Review.query.get_or_404(str(review_id))
    if review.is_hidden:
        raise NotFound("Review has been hidden.")
    vote = fetch_params()
    if review.user_id == user.id:
        raise InvalidRequest(desc='You cannot rate your own review.')
    if user.is_vote_limit_exceeded is True and user.has_voted(review) is False:
        raise LimitExceeded('You have exceeded your limit of votes per day.')
    Vote.create(user, review, vote)  # overwrites an existing vote, if needed
    return jsonify(message='Request processed successfully')
Exemple #2
0
    def test_user_has_voted(self):
        # Review needs user
        user_1 = User(display_name=u'Tester #1')
        db.session.add(user_1)
        db.session.commit()

        # and license
        license = License(id=u"Test", full_name=u'Test License')
        db.session.add(license)
        db.session.commit()

        review = Review.create(
            user_id=user_1.id,
            release_group='e7aad618-fa86-3983-9e77-405e21796eca',
            text=u"Testing!",
            is_draft=False,
            license_id=license.id)
        db.session.add(review)
        db.session.commit()

        user_2 = User(display_name=u'Tester #2')
        db.session.add(user_2)
        db.session.commit()

        self.assertFalse(user_2.has_voted(review))
        Vote.create(user_2.id, review, True)
        self.assertTrue(user_2.has_voted(review))
Exemple #3
0
def vote_submit(review_id):
    review_id = str(review_id)
    if 'yes' in request.form:
        vote = True
    elif 'no' in request.form:
        vote = False

    review = Review.query.get_or_404(review_id)
    if review.is_hidden and not current_user.is_admin():
        raise NotFound(gettext("Review has been hidden."))
    if review.user == current_user:
        flash(gettext("You cannot rate your own review."), 'error')
        return redirect(url_for('.entity', id=review_id))
    if current_user.is_vote_limit_exceeded is True and current_user.has_voted(review) is False:
        flash(gettext("You have exceeded your limit of votes per day."), 'error')
        return redirect(url_for('.entity', id=review_id))
    if current_user.is_blocked:
        flash(gettext("You are not allowed to rate this review because "
                      "your account has been blocked by a moderator."), 'error')
        return redirect(url_for('.entity', id=review_id))

    Vote.create(current_user, review, vote)  # overwrites an existing vote, if needed

    flash(gettext("You have rated this review!"), 'success')
    return redirect(url_for('.entity', id=review_id))
Exemple #4
0
    def test_vote_create(self):
        # Preparing test data
        author = User.get_or_create(u'Author', musicbrainz_id=u'0')
        user_1 = User.get_or_create(u'Tester #1', musicbrainz_id=u'1')
        user_2 = User.get_or_create(u'Tester #2', musicbrainz_id=u'2')
        license = License(id=u'Test', full_name=u'Test License')
        db.session.add(license)
        db.session.commit()
        review = Review.create(
            release_group='e7aad618-fa86-3983-9e77-405e21796eca',
            text=u"Testing!",
            user=author,
            is_draft=False,
            license_id=license.id)

        vote_u1_positive = Vote.create(user_1, review, True)

        votes = db.session.query(Vote).all()
        self.assertEqual(len(votes), 1)
        self.assertIn(vote_u1_positive, votes)

        vote_u2_negative = Vote.create(user_2, review, False)

        votes = db.session.query(Vote).all()
        self.assertEqual(len(votes), 2)
        self.assertIn(vote_u1_positive, votes)
        self.assertIn(vote_u2_negative, votes)
Exemple #5
0
def vote_submit(review_id):
    review_id = str(review_id)
    if 'yes' in request.form:
        vote = True
    elif 'no' in request.form:
        vote = False

    review = Review.query.get_or_404(review_id)
    if review.is_hidden and not current_user.is_admin():
        raise NotFound(gettext("Review has been hidden."))
    if review.user == current_user:
        flash(gettext("You cannot rate your own review."), 'error')
        return redirect(url_for('.entity', id=review_id))
    if current_user.is_vote_limit_exceeded is True and current_user.has_voted(review) is False:
        flash(gettext("You have exceeded your limit of votes per day."), 'error')
        return redirect(url_for('.entity', id=review_id))
    if current_user.is_blocked:
        flash(gettext("You are not allowed to rate this review because "
                      "your account has been blocked by a moderator."), 'error')
        return redirect(url_for('.entity', id=review_id))

    Vote.create(current_user, review, vote)  # overwrites an existing vote, if needed

    flash(gettext("You have rated this review!"), 'success')
    return redirect(url_for('.entity', id=review_id))
def review_vote_put_handler(review_id, user):
    """Set your vote for a specified review.

    **OAuth scope:** vote

    :json boolean vote: ``true`` if upvote, ``false`` if downvote

    :statuscode 200: success
    :statuscode 400: invalid request (see source)
    :statuscode 403: daily vote limit exceeded
    :statuscode 404: review not found

    :resheader Content-Type: *application/json*
    """

    def fetch_params():
        vote = Parser.bool('json', 'vote')
        return vote

    review = Review.query.get_or_404(str(review_id))
    if review.is_hidden:
        raise NotFound("Review has been hidden.")
    vote = fetch_params()
    if review.user_id == user.id:
        raise InvalidRequest(desc='You cannot rate your own review.')
    if user.is_vote_limit_exceeded is True and user.has_voted(review) is False:
        raise LimitExceeded('You have exceeded your limit of votes per day.')
    Vote.create(user, review, vote)  # overwrites an existing vote, if needed
    return jsonify(message='Request processed successfully')
    def test_user_has_voted(self):
        # Review needs user
        user_1 = User(display_name=u'Tester #1')
        db.session.add(user_1)
        db.session.commit()

        # and license
        license = License(id=u"Test", full_name=u'Test License')
        db.session.add(license)
        db.session.commit()

        review = Review.create(user=user_1,
                               release_group='e7aad618-fa86-3983-9e77-405e21796eca',
                               text=u"Testing!",
                               is_draft=False,
                               license_id=license.id)
        db.session.add(review)
        db.session.commit()

        user_2 = User(display_name=u'Tester #2')
        db.session.add(user_2)
        db.session.commit()

        self.assertFalse(user_2.has_voted(review))
        Vote.create(user_2, review, True)
        self.assertTrue(user_2.has_voted(review))
    def test_vote_create(self):
        # Preparing test data
        author = User.get_or_create(u'Author', musicbrainz_id=u'0')
        user_1 = User.get_or_create(u'Tester #1', musicbrainz_id=u'1')
        user_2 = User.get_or_create(u'Tester #2', musicbrainz_id=u'2')
        license = License(id=u'Test', full_name=u'Test License')
        db.session.add(license)
        db.session.commit()
        review = Review.create(release_group='e7aad618-fa86-3983-9e77-405e21796eca',
                               text=u"Testing!",
                               user=author,
                               is_draft=False,
                               license_id=license.id)

        vote_u1_positive = Vote.create(user_1, review, True)

        votes = db.session.query(Vote).all()
        self.assertEqual(len(votes), 1)
        self.assertIn(vote_u1_positive, votes)

        vote_u2_negative = Vote.create(user_2, review, False)

        votes = db.session.query(Vote).all()
        self.assertEqual(len(votes), 2)
        self.assertIn(vote_u1_positive, votes)
        self.assertIn(vote_u2_negative, votes)
Exemple #9
0
    def test_get(self):
        vote_1 = Vote.create(self.user_1, self.review, True)
        vote_1_data = vote.get(self.user_1.id, self.review.last_revision.id)
        self.assertDictEqual(
            vote_1_data, {
                "user_id": UUID(vote_1.user_id),
                "revision_id": vote_1.revision_id,
                "vote": True,
                "rated_at": vote_1.rated_at
            })
        self.assertEqual(type(vote_1_data["user_id"]), UUID)
        self.assertEqual(type(vote_1_data["revision_id"]), int)
        self.assertEqual(type(vote_1_data["rated_at"]), datetime)

        vote_2 = Vote.create(self.user_2, self.review, False)
        vote_2_data = vote.get(self.user_2.id, self.review.last_revision.id)
        self.assertDictEqual(
            vote_2_data, {
                "user_id": UUID(vote_2.user_id),
                "revision_id": vote_2.revision_id,
                "vote": False,
                "rated_at": vote_2.rated_at
            })