Fix #1077 - Fix updating comment via API and add test
This commit is contained in:
parent
9a51bf1ebc
commit
9e715bb07f
@ -803,31 +803,25 @@ class MediaComment(Base, MediaCommentMixin):
|
|||||||
|
|
||||||
def unserialize(self, data, request):
|
def unserialize(self, data, request):
|
||||||
""" Takes API objects and unserializes on existing comment """
|
""" Takes API objects and unserializes on existing comment """
|
||||||
# Do initial checks to verify the object is correct
|
# Handle changing the reply ID
|
||||||
required_attributes = ["content", "inReplyTo"]
|
if "inReplyTo" in data:
|
||||||
for attr in required_attributes:
|
# Validate that the ID is correct
|
||||||
if attr not in data:
|
try:
|
||||||
|
media_id = int(extract_url_arguments(
|
||||||
|
url=data["inReplyTo"]["id"],
|
||||||
|
urlmap=request.app.url_map
|
||||||
|
)["id"])
|
||||||
|
except ValueError:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Validate inReplyTo has ID
|
media = MediaEntry.query.filter_by(id=media_id).first()
|
||||||
if "id" not in data["inReplyTo"]:
|
if media is None:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Validate that the ID is correct
|
self.media_entry = media.id
|
||||||
try:
|
|
||||||
media_id = int(extract_url_arguments(
|
|
||||||
url=data["inReplyTo"]["id"],
|
|
||||||
urlmap=request.app.url_map
|
|
||||||
)["id"])
|
|
||||||
except ValueError:
|
|
||||||
return False
|
|
||||||
|
|
||||||
media = MediaEntry.query.filter_by(id=media_id).first()
|
if "content" in data:
|
||||||
if media is None:
|
self.content = data["content"]
|
||||||
return False
|
|
||||||
|
|
||||||
self.media_entry = media.id
|
|
||||||
self.content = data["content"]
|
|
||||||
|
|
||||||
if "location" in data:
|
if "location" in data:
|
||||||
Location.create(data["location"], self)
|
Location.create(data["location"], self)
|
||||||
|
@ -360,9 +360,9 @@ def feed_endpoint(request, outbox=None):
|
|||||||
status=403
|
status=403
|
||||||
)
|
)
|
||||||
|
|
||||||
if not comment.unserialize(data["object"]):
|
if not comment.unserialize(data["object"], request):
|
||||||
return json_error(
|
return json_error(
|
||||||
"Invalid 'comment' with id '{0}'".format(obj_id)
|
"Invalid 'comment' with id '{0}'".format(obj["id"])
|
||||||
)
|
)
|
||||||
|
|
||||||
comment.save()
|
comment.save()
|
||||||
@ -382,7 +382,7 @@ def feed_endpoint(request, outbox=None):
|
|||||||
image = MediaEntry.query.filter_by(id=obj_id).first()
|
image = MediaEntry.query.filter_by(id=obj_id).first()
|
||||||
if image is None:
|
if image is None:
|
||||||
return json_error(
|
return json_error(
|
||||||
"No such 'image' with the id '{0}'.".format(obj_id)
|
"No such 'image' with the id '{0}'.".format(obj["id"])
|
||||||
)
|
)
|
||||||
|
|
||||||
# Check that the person trying to update the comment is
|
# Check that the person trying to update the comment is
|
||||||
|
@ -561,3 +561,40 @@ class TestAPI(object):
|
|||||||
assert "object" in delete
|
assert "object" in delete
|
||||||
assert delete["object"]["id"] == comment["object"]["id"]
|
assert delete["object"]["id"] == comment["object"]["id"]
|
||||||
assert delete["object"]["objectType"] == "comment"
|
assert delete["object"]["objectType"] == "comment"
|
||||||
|
|
||||||
|
def test_edit_comment(self, test_app):
|
||||||
|
""" Test that someone can update their own comment """
|
||||||
|
# First upload an image to comment against
|
||||||
|
response, data = self._upload_image(test_app, GOOD_JPG)
|
||||||
|
response, data = self._post_image_to_feed(test_app, data)
|
||||||
|
|
||||||
|
# Post a comment to edit
|
||||||
|
activity = {
|
||||||
|
"verb": "post",
|
||||||
|
"object": {
|
||||||
|
"objectType": "comment",
|
||||||
|
"content": "This is a comment",
|
||||||
|
"inReplyTo": data["object"],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
comment = self._activity_to_feed(test_app, activity)[1]
|
||||||
|
|
||||||
|
# Now create an update activity to change the content
|
||||||
|
activity = {
|
||||||
|
"verb": "update",
|
||||||
|
"object": {
|
||||||
|
"id": comment["object"]["id"],
|
||||||
|
"content": "This is my fancy new content string!",
|
||||||
|
"objectType": "comment",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
comment = self._activity_to_feed(test_app, activity)[1]
|
||||||
|
|
||||||
|
# Verify the comment reflects the changes
|
||||||
|
comment_id = int(comment["object"]["id"].split("/")[-2])
|
||||||
|
model = MediaComment.query.filter_by(id=comment_id).first()
|
||||||
|
|
||||||
|
assert model.content == activity["object"]["content"]
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user