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()
# 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
+