Fix #5415 - Deleted comments get removed properly when tombstones

The original wrapper existed and should be been removed, this fix
now ensures the TextComment removes the Comment wrapper to prevent
the deleted (comments which are tombstones) existing.
This commit is contained in:
Jessica Tallon 2016-02-29 14:35:30 +00:00
parent 7fa67404ee
commit 2104c3e0f2
2 changed files with 42 additions and 0 deletions

View File

@ -1008,6 +1008,17 @@ class TextComment(Base, TextCommentMixin, CommentingMixin):
cascade="all, delete-orphan"))
deletion_mode = Base.SOFT_DELETE
def soft_delete(self, *args, **kwargs):
# Find the GMR for this model.
gmr = GenericModelReference.query.filter_by(
obj_pk=self.id,
model_type=self.__tablename__
).first()
# Delete the Comment object for this comment
Comment.query.filter_by(comment_id=gmr.id).delete()
return super(TextComment, self).soft_delete(*args, **kwargs)
def serialize(self, request):
""" Unserialize to python dictionary for API """
target = self.get_reply_to()

View File

@ -138,3 +138,34 @@ def test_garbage_collection_task(test_app):
# Now validate the image has been deleted
assert MediaEntry.query.filter_by(id=entry_id).first() is None
def test_comments_removed_when_graveyarded(test_app):
""" Checks comments which are tombstones are removed from collection """
user = fixture_add_user()
media = fixture_media_entry(
uploader=user.id,
expunge=False,
fake_upload=False
)
# Add the TextComment
comment = TextComment()
comment.actor = user.id
comment.content = u"This is a comment that will be deleted."
comment.save()
# Add a link for the comment
link = Comment()
link.target = media
link.comment = comment
link.save()
# First double check it's there and all is well...
assert Comment.query.filter_by(target_id=link.target_id).first() is not None
# Now delete the comment.
comment.delete()
# Verify this also deleted the Comment link, ergo there is no comment left.
assert Comment.query.filter_by(target_id=link.target_id).first() is None