예제 #1
0
def review_delete_handler(review_id, user):
    """Delete review with a specified UUID.

    **OAuth scope:** review

    **Request Example:**

    .. code-block:: bash

        $ curl "https://critiquebrainz.org/ws/1/review/9cb11424-d070-4ac1-8771-a8703ae5cccd" \\
               -X DELETE \\
               -H "Authorization: Bearer <access token>"

    **Response Example:**

    .. code-block:: json

        {
          "message": "Request processed successfully"
        }

    :statuscode 200: success
    :statuscode 403: access denied
    :statuscode 404: review not found

    :resheader Content-Type: *application/json*
    """
    review = get_review_or_404(review_id)
    if review["is_hidden"]:
        raise NotFound("Review has been hidden.")
    if str(review["user_id"]) != user.id:
        raise AccessDenied
    db_review.delete(review_id)
    return jsonify(message='Request processed successfully')
    def test_importer(self):
        user = User(db_users.get_or_create(1, "Tester", new_user_data={
            "display_name": "test user",
        }))
        review = db_review.create(
            user_id=user.id,
            entity_id="e7aad618-fa86-3983-9e77-405e21796eca",
            entity_type="release_group",
            text="Testing",
            rating=5,
            is_draft=False,
            license_id=self.license["id"],
        )

        # Make dumps and delete entities
        self.runner.invoke(dump_manager.public, ['--location', self.tempdir])
        archives = get_archives(self.tempdir)
        db_review.delete(review['id'])
        db_users.delete(user.id)
        self.assertEqual(db_users.total_count(), 0)
        self.assertEqual(db_review.get_count(), 0)

        # Import dumps - cbdump.tar.bz2 and cbdump-reviews-all.tar.bz2 and check if data imported properly
        self.runner.invoke(dump_manager.importer, [archives['cbdump.tar.bz2']])
        self.assertEqual(db_users.total_count(), 1)

        self.runner.invoke(dump_manager.importer, [archives['cbdump-reviews-all.tar.bz2']])
        self.assertEqual(db_review.get_count(), 1)
예제 #3
0
    def test_update(self):
        """Test if rating and count are updated when review is updated, deleted or hidden"""

        # Check avg_rating when review is created
        review = db_review.create(
            entity_id="e7aad618-fa86-3983-9e77-405e21796eca",
            entity_type="release_group",
            text=u"Testing!",
            rating=5,
            user_id=self.user.id,
            is_draft=False,
            license_id=self.license["id"],
        )
        review_2 = db_review.create(
            entity_id="e7aad618-fa86-3983-9e77-405e21796eca",
            entity_type="release_group",
            text=u"Testing!",
            rating=4,
            user_id=self.user_2.id,
            is_draft=False,
            license_id=self.license["id"],
        )
        avg_rating = db_avg_rating.get(review["entity_id"],
                                       review["entity_type"])
        self.assertEqual(avg_rating["entity_id"], review["entity_id"])
        self.assertEqual(avg_rating["entity_type"], review["entity_type"])
        self.assertEqual(avg_rating["rating"], 4.5)
        self.assertEqual(avg_rating["count"], 2)

        # Check if avg_rating is updated after review_2 is hidden
        db_review.set_hidden_state(review_2["id"], is_hidden=True)
        avg_rating = db_avg_rating.get(review["entity_id"],
                                       review["entity_type"])
        self.assertEqual(avg_rating["rating"], 5.0)
        self.assertEqual(avg_rating["count"], 1)

        # Check if avg_rating is updated after review_2 is revealed
        db_review.set_hidden_state(review_2["id"], is_hidden=False)
        avg_rating = db_avg_rating.get(review["entity_id"],
                                       review["entity_type"])
        self.assertEqual(avg_rating["rating"], 4.5)
        self.assertEqual(avg_rating["count"], 2)

        # Check if avg_rating is updated after change in rating
        db_review.update(
            review_id=review_2["id"],
            drafted=review_2["is_draft"],
            text=u"Testing rating update",
            rating=None,
        )

        avg_rating = db_avg_rating.get(review["entity_id"],
                                       review["entity_type"])
        self.assertEqual(avg_rating["rating"], 5.0)
        self.assertEqual(avg_rating["count"], 1)

        # Check if avg_rating is updated after a review with rating is deleted
        db_review.delete(review["id"])
        with self.assertRaises(db_exceptions.NoDataFoundException):
            db_avg_rating.get(review["entity_id"], review["entity_type"])
예제 #4
0
def review_delete_handler(review_id, user):
    """Delete review with a specified UUID.

    **OAuth scope:** review

    **Request Example:**

    .. code-block:: bash

        $ curl "https://critiquebrainz.org/ws/1/review/9cb11424-d070-4ac1-8771-a8703ae5cccd" \\
               -X DELETE \\
               -H "Authorization: Bearer <access token>"

    **Response Example:**

    .. code-block:: json

        {
          "message": "Request processed successfully"
        }

    :statuscode 200: success
    :statuscode 403: access denied
    :statuscode 404: review not found

    :resheader Content-Type: *application/json*
    """
    review = get_review_or_404(review_id)
    if review["is_hidden"]:
        raise NotFound("Review has been hidden.")
    if str(review["user_id"]) != user.id:
        raise AccessDenied
    db_review.delete(review_id)
    return jsonify(message='Request processed successfully')
예제 #5
0
def delete(id):
    review = get_review_or_404(id)
    if review["user"] != current_user and not current_user.is_admin():
        raise Unauthorized(gettext("Only the author or an admin can delete this review."))
    if request.method == 'POST':
        db_review.delete(review["id"])
        flash.success(gettext("Review has been deleted."))
        return redirect(url_for('user.reviews', user_id=current_user.id))
    return render_template('review/delete.html', review=review)
예제 #6
0
    def test_update(self):
        """Test if rating and count are updated when review is updated, deleted or hidden"""

        # Check avg_rating when review is created
        review = db_review.create(
            entity_id="e7aad618-fa86-3983-9e77-405e21796eca",
            entity_type="release_group",
            text=u"Testing!",
            rating=5,
            user_id=self.user.id,
            is_draft=False,
            license_id=self.license["id"],
        )
        review_2 = db_review.create(
            entity_id="e7aad618-fa86-3983-9e77-405e21796eca",
            entity_type="release_group",
            text=u"Testing!",
            rating=4,
            user_id=self.user_2.id,
            is_draft=False,
            license_id=self.license["id"],
        )
        avg_rating = db_avg_rating.get(review["entity_id"], review["entity_type"])
        self.assertEqual(avg_rating["entity_id"], review["entity_id"])
        self.assertEqual(avg_rating["entity_type"], review["entity_type"])
        self.assertEqual(avg_rating["rating"], 4.5)
        self.assertEqual(avg_rating["count"], 2)

        # Check if avg_rating is updated after review_2 is hidden
        db_review.set_hidden_state(review_2["id"], is_hidden=True)
        avg_rating = db_avg_rating.get(review["entity_id"], review["entity_type"])
        self.assertEqual(avg_rating["rating"], 5.0)
        self.assertEqual(avg_rating["count"], 1)

        # Check if avg_rating is updated after review_2 is revealed
        db_review.set_hidden_state(review_2["id"], is_hidden=False)
        avg_rating = db_avg_rating.get(review["entity_id"], review["entity_type"])
        self.assertEqual(avg_rating["rating"], 4.5)
        self.assertEqual(avg_rating["count"], 2)

        # Check if avg_rating is updated after change in rating
        db_review.update(
            review_id=review_2["id"],
            drafted=review_2["is_draft"],
            text=u"Testing rating update",
            rating=None,
        )

        avg_rating = db_avg_rating.get(review["entity_id"], review["entity_type"])
        self.assertEqual(avg_rating["rating"], 5.0)
        self.assertEqual(avg_rating["count"], 1)

        # Check if avg_rating is updated after a review with rating is deleted
        db_review.delete(review["id"])
        with self.assertRaises(db_exceptions.NoDataFoundException):
            db_avg_rating.get(review["entity_id"], review["entity_type"])
예제 #7
0
 def test_review_deletion(self):
     review = db_review.create(
         user_id=self.user.id,
         entity_id="e7aad618-fa86-3983-9e77-405e21796eca",
         entity_type="release_group",
         text="Testing",
         is_draft=False,
         license_id=self.license["id"],
     )
     self.assertEqual(db_review.list_reviews()[1], 1)
     db_review.delete(review["id"])
     self.assertEqual(db_review.list_reviews()[1], 0)
예제 #8
0
 def test_review_deletion(self):
     review = db_review.create(
         user_id=self.user.id,
         entity_id="e7aad618-fa86-3983-9e77-405e21796eca",
         entity_type="release_group",
         text="Testing",
         is_draft=False,
         license_id=self.license["id"],
     )
     self.assertEqual(db_review.list_reviews()[1], 1)
     db_review.delete(review["id"])
     self.assertEqual(db_review.list_reviews()[1], 0)
예제 #9
0
    def test_delete(self):
        """Test delete function that deletes avg_rating given entity_id and entity_type"""

        review = db_review.create(
            entity_id="e7aad618-fa86-3983-9e77-405e21796eca",
            entity_type="release_group",
            text=u"Testing!",
            rating=5,
            user_id=self.user.id,
            is_draft=False,
            license_id=self.license["id"],
        )
        avg_rating = db_avg_rating.get(review["entity_id"], review["entity_type"])
        self.assertEqual(avg_rating["count"], 1)
        db_review.delete(review["id"])
        with self.assertRaises(db_exceptions.NoDataFoundException):
            db_avg_rating.get(review["entity_id"], review["entity_type"])
예제 #10
0
def rate():
    form = RatingEditForm()
    if form.validate_on_submit():
        if current_user.is_blocked:
            flash.error(
                gettext("You are not allowed to rate any entity because your "
                        "account has been blocked by a moderator."))
            return redirect(
                url_for('{}.entity'.format(form.entity_type.data),
                        id=form.entity_id.data))
        reviews, review_count = db_review.list_reviews(
            entity_id=form.entity_id.data,
            entity_type=form.entity_type.data,
            user_id=current_user.id,
        )
        review = reviews[0] if review_count else None

        if not review and form.rating.data is None:
            raise BadRequest(
                "Cannot create a review with no rating and no text!")

        if not review and form.rating.data is not None:
            db_review.create(
                user_id=current_user.id,
                entity_id=form.entity_id.data,
                entity_type=form.entity_type.data,
                rating=form.rating.data,
                is_draft=False,
            )
        elif review and review['text'] is None and form.rating.data is None:
            db_review.delete(review['id'])
        elif review and review['rating'] != form.rating.data:
            db_review.update(
                review_id=review['id'],
                drafted=review['is_draft'],
                text=review['text'],
                rating=form.rating.data,
            )
        # TODO(code-master5): Make this message specify the entity
        flash.success("We have updated your rating for this entity!")
    else:
        flash.error("Error! Could not update the rating...")
    return redirect(
        url_for('{}.entity'.format(form.entity_type.data),
                id=form.entity_id.data))
예제 #11
0
    def test_delete(self):
        """Test delete function that deletes avg_rating given entity_id and entity_type"""

        review = db_review.create(
            entity_id="e7aad618-fa86-3983-9e77-405e21796eca",
            entity_type="release_group",
            text=u"Testing!",
            rating=5,
            user_id=self.user.id,
            is_draft=False,
            license_id=self.license["id"],
        )
        avg_rating = db_avg_rating.get(review["entity_id"],
                                       review["entity_type"])
        self.assertEqual(avg_rating["count"], 1)
        db_review.delete(review["id"])
        with self.assertRaises(db_exceptions.NoDataFoundException):
            db_avg_rating.get(review["entity_id"], review["entity_type"])
예제 #12
0
 def test_reviewed_entities(self):
     review = db_review.create(
         user_id=self.user.id,
         entity_id="e7aad618-fa86-3983-9e77-405e21796eca",
         entity_type="release_group",
         text="Awesome",
         is_draft=False,
         license_id=self.license["id"],
     )
     reviewed_entities = db_review.reviewed_entities(
         entity_ids=["e7aad618-fa86-3983-9e77-405e21796eca", "deae6fc2-a675-4f35-9565-d2aaea4872c7"],
         entity_type="release_group",
     )
     self.assertListEqual(reviewed_entities, ["e7aad618-fa86-3983-9e77-405e21796eca"])
     db_review.delete(review["id"])
     reviewed_entities = db_review.reviewed_entities(
         entity_ids=["e7aad618-fa86-3983-9e77-405e21796eca"],
         entity_type="release_group",
     )
     self.assertListEqual(reviewed_entities, [])
예제 #13
0
def rate():
    form = RatingEditForm()
    if form.validate_on_submit():
        if current_user.is_blocked:
            flash.error(gettext("You are not allowed to rate any entity because your "
                                "account has been blocked by a moderator."))
            return redirect(url_for('{}.entity'.format(form.entity_type.data), id=form.entity_id.data))
        reviews, review_count = db_review.list_reviews(
            entity_id=form.entity_id.data,
            entity_type=form.entity_type.data,
            user_id=current_user.id,
        )
        review = reviews[0] if review_count else None

        if not review and form.rating.data is None:
            raise BadRequest("Cannot create a review with no rating and no text!")

        if not review and form.rating.data is not None:
            db_review.create(
                user_id=current_user.id,
                entity_id=form.entity_id.data,
                entity_type=form.entity_type.data,
                rating=form.rating.data,
                is_draft=False,
            )
        elif review and review['text'] is None and form.rating.data is None:
            db_review.delete(review['id'])
        elif review and review['rating'] != form.rating.data:
            db_review.update(
                review_id=review['id'],
                drafted=review['is_draft'],
                text=review['text'],
                rating=form.rating.data,
            )
        # TODO(code-master5): Make this message specify the entity
        flash.success("We have updated your rating for this entity!")
    else:
        flash.error("Error! Could not update the rating...")
    return redirect(url_for('{}.entity'.format(form.entity_type.data), id=form.entity_id.data))