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)
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"])
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)
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)
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"])
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))
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, [])
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))