def test_get(self): vote.submit(self.user_1.id, self.review["last_revision"]["id"], True) vote_1_data = vote.get(self.user_1.id, self.review["last_revision"]["id"]) rated_at = vote_1_data.pop("rated_at") self.assertDictEqual( vote_1_data, { "user_id": UUID(self.user_1.id), "revision_id": self.review["last_revision"]["id"], "vote": True, }) self.assertEqual(type(vote_1_data["user_id"]), UUID) self.assertEqual(type(vote_1_data["revision_id"]), int) self.assertEqual(type(rated_at), datetime) vote.submit(self.user_2.id, self.review["last_revision"]["id"], False) vote_2_data = vote.get(self.user_2.id, self.review["last_revision"]["id"]) vote_2_data.pop("rated_at") self.assertDictEqual( vote_2_data, { "user_id": UUID(self.user_2.id), "revision_id": self.review["last_revision"]["id"], "vote": False, })
def review_vote_delete_handler(review_id, user): """Delete your vote for a specified review. **OAuth scope:** vote **Request Example:** .. code-block:: bash $ curl "https://critiquebrainz.org/ws/1/review/9cb11424-d070-4ac1-8771-a8703ae5cccd/vote" \\ -X DELETE \\ -H "Authorization: Bearer <access token>" **Response Example:** .. code-block:: json { "message": "Request processed successfully" } :resheader Content-Type: *application/json* """ review = get_review_or_404(review_id) if review["is_hidden"]: raise NotFound("Review has been hidden.") try: vote = db_vote.get(user_id=user.id, revision_id=review["last_revision"]["id"]) except db_exceptions.NoDataFoundException: raise InvalidRequest("Review is not rated yet.") db_vote.delete(user_id=vote["user_id"], revision_id=vote["revision_id"]) return jsonify(message="Request processed successfully")
def review_vote_entity_handler(review_id, user): """Get your vote for a specified review. **Request Example:** .. code-block:: bash $ curl "https://critiquebrainz.org/ws/1/review/9cb11424-d070-4ac1-8771-a8703ae5cccd/vote" \\ -X GET \\ -H "Authorization: Bearer <access token>" **Response Example:** .. code-block:: json { "vote": { "vote": true, "voted_at": "Thu, 22 Dec 2016 11:49:56 GMT" } } **OAuth scope:** vote :resheader Content-Type: *application/json* """ review = get_review_or_404(review_id) if review["is_hidden"]: raise NotFound("Review has been hidden.") try: vote = db_vote.get(user_id=user.id, revision_id=review["last_revision"]["id"]) except db_exceptions.NoDataFoundException: raise NotFound("Can't find your vote for this review.") return jsonify(vote)
def entity(id, rev=None): review = get_review_or_404(id) # Not showing review if it isn't published yet and not viewed by author. if review["is_draft"] and not (current_user.is_authenticated and current_user == review["user"]): raise NotFound(gettext("Can't find a review with the specified ID.")) if review["is_hidden"]: if not current_user.is_admin(): raise Forbidden( gettext("Review has been hidden. " "You need to be an administrator to view it.")) else: flash.warn(gettext("Review has been hidden.")) spotify_mappings = None soundcloud_url = None if review["entity_type"] == 'release_group': spotify_mappings = mbspotify.mappings(str(review["entity_id"])) soundcloud_url = soundcloud.get_url(str(review["entity_id"])) count = db_revision.get_count(id) if not rev: rev = count if rev < count: flash.info( gettext( 'You are viewing an old revision, the review has been updated since then.' )) elif rev > count: raise NotFound( gettext("The revision you are looking for does not exist.")) revision = db_revision.get(id, offset=count - rev)[0] if not review[ "is_draft"] and current_user.is_authenticated: # if user is logged in, get their vote for this review try: vote = db_vote.get(user_id=current_user.id, revision_id=revision['id']) except db_exceptions.NoDataFoundException: vote = None else: # otherwise set vote to None, its value will not be used vote = None if revision["text"] is None: review["text_html"] = None else: review["text_html"] = markdown(revision['text'], safe_mode="escape") user_all_reviews, review_count = db_review.list_reviews( # pylint: disable=unused-variable user_id=review["user_id"], sort="random", exclude=[review["id"]], ) other_reviews = user_all_reviews[:3] avg_rating = get_avg_rating(review["entity_id"], review["entity_type"]) return render_template('review/entity/%s.html' % review["entity_type"], review=review, spotify_mappings=spotify_mappings, soundcloud_url=soundcloud_url, vote=vote, other_reviews=other_reviews, avg_rating=avg_rating)
def vote_delete(id): review = get_review_or_404(id) if review["is_hidden"] and not current_user.is_admin(): raise NotFound(gettext("Review has been hidden.")) try: vote = db_vote.get(user_id=current_user.id, revision_id=review["last_revision"]["id"]) flash.success(gettext("You have deleted your vote for this review!")) db_vote.delete(user_id=vote["user_id"], revision_id=vote["revision_id"]) except db_exceptions.NoDataFoundException: flash.error(gettext("This review is not rated yet.")) return redirect(url_for('.entity', id=id))
def test_get(self): vote.submit(self.user_1.id, self.review["last_revision"]["id"], True) vote_1_data = vote.get(self.user_1.id, self.review["last_revision"]["id"]) rated_at = vote_1_data.pop("rated_at") self.assertDictEqual(vote_1_data, { "user_id": UUID(self.user_1.id), "revision_id": self.review["last_revision"]["id"], "vote": True, }) self.assertEqual(type(vote_1_data["user_id"]), UUID) self.assertEqual(type(vote_1_data["revision_id"]), int) self.assertEqual(type(rated_at), datetime) vote.submit(self.user_2.id, self.review["last_revision"]["id"], False) vote_2_data = vote.get(self.user_2.id, self.review["last_revision"]["id"]) vote_2_data.pop("rated_at") self.assertDictEqual(vote_2_data, { "user_id": UUID(self.user_2.id), "revision_id": self.review["last_revision"]["id"], "vote": False, })
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 })
def entity(id, rev=None): review = Review.query.get_or_404(str(id)) # Not showing review if it isn't published yet and not viewed by author. if review.is_draft and not (current_user.is_authenticated and current_user == review.user): raise NotFound(gettext("Can't find a review with the specified ID.")) if review.is_hidden: if not current_user.is_admin(): raise Forbidden( gettext("Review has been hidden. " "You need to be an administrator to view it.")) else: flash.warn(gettext("Review has been hidden.")) spotify_mappings = None soundcloud_url = None if review.entity_type == 'release_group': spotify_mappings = mbspotify.mappings(review.entity_id) soundcloud_url = soundcloud.get_url(review.entity_id) revisions = Revision.query.filter_by(review=review).order_by( desc(Revision.timestamp)) count = revisions.count() if not rev: rev = count if rev < count: flash.info( gettext( 'You are viewing an old revision, the review has been updated since then.' )) elif rev > count: raise NotFound( gettext("The revision you are looking for does not exist.")) revision = revisions.offset(count - rev).first() if not review.is_draft and current_user.is_authenticated: # if user is logged in, get their vote for this review try: vote = db_vote.get(user_id=current_user.id, revision_id=revision.id) except db_exceptions.NoDataFoundException: vote = None else: # otherwise set vote to None, its value will not be used vote = None review.text_html = markdown(revision.text, safe_mode="escape") return render_template('review/entity/%s.html' % review.entity_type, review=review, spotify_mappings=spotify_mappings, soundcloud_url=soundcloud_url, vote=vote)
def test_get_missing(self): with self.assertRaises(exceptions.NoDataFoundException): vote.get(self.user_1.id, self.review.last_revision.id)
def test_get_missing(self): with self.assertRaises(exceptions.NoDataFoundException): vote.get(self.user_1.id, self.review["last_revision"]["id"])