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_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))
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 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)
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)
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 })