FIX: Unlike own posts on ownership transfer (PR #10446)

If a user has liked a post that has passed the post_undo_action_window_mins system setting window and you transfer ownership of that post to that user you will be the owner of a post that you have liked, but cannot unlike resulting in a weird UI behavior. This commit fixes this issue.

The existing tests didn’t check for the timeout window for unliking posts so I added that in.

I couldn’t find a good way to do this logic inside of the guardian class so rather than duplicating behavior of the PostActionDestroyer class inside of the PostOwnerChanger I decided to pass in a “bypass” variable that could be used to check if the calling class is the ‘post_owner_changer’ and bypass the guardian instead. I went this route because the guardian can_delete_post_action method has no way of distinguishing how to allow a user to be able to unlike their own posts after the timeout window but only on a post owner change.

GitHub

This pull request has been mentioned on Discourse Meta. There might be relevant details there:

https://meta.discourse.org/t/unable-to-unlike-post-if-ownership-is-transferred-to-self/158526/3

I find bypass somewhat confusing as a variable name because it’s the name of the class calling it.

I suggested calling it parent_class. Or perhaps it should be an options hash with an argument named skip_delete_check which you could set to true when you call it. We have APIs like that in other service objects.