mod actions: record the subject of the mod action.

Add a polymorphic `subject` field that records the subject of the mod
action. The subject is the post, user, comment, artist, etc the mod
action is for.

* The subject for the user ban and unban actions is the user, not the ban itself.
* The subject for the user feedback update and deletion actions is the user,
  not the feedback itself.
* The subject for the post undeletion action is the post, not the approval itself.
* The subject for the move favorites action is the source post where the
  favorites were moved from, not the destination post where the favorites
  were moved to.
* The subject for the post permanent delete action is nil, because the
  post itself is hard deleted.
* When a post is permanently deleted, all mod actions related to the
  post are deleted as well.
This commit is contained in:
evazion
2022-09-25 01:05:50 -05:00
parent 9026875776
commit 34057b25e1
38 changed files with 183 additions and 71 deletions

View File

@@ -216,6 +216,8 @@ class ForumPostsControllerTest < ActionDispatch::IntegrationTest
assert_redirected_to(forum_topic_path(@forum_topic, anchor: "forum_post_#{@forum_post.id}"))
assert_match(/updated forum ##{@forum_post.id}/, ModAction.last.description)
assert_equal(@forum_post, ModAction.last.subject)
assert_equal(@mod, ModAction.last.creator)
end
end
@@ -227,6 +229,8 @@ class ForumPostsControllerTest < ActionDispatch::IntegrationTest
assert_redirected_to(@forum_reply)
assert_equal(true, @forum_reply.reload.is_deleted?)
assert_match(/updated forum ##{@forum_reply.id}/, ModAction.last.description)
assert_equal(@forum_reply, ModAction.last.subject)
assert_equal(@mod, ModAction.last.creator)
end
should "not allow users to delete their own posts" do
@@ -247,7 +251,7 @@ class ForumPostsControllerTest < ActionDispatch::IntegrationTest
should "mark all pending moderation reports against the post as handled" do
forum_reply = as(@user) { create(:forum_post, topic: @forum_topic, creator: @user) }
report1 = create(:moderation_report, model: forum_reply, status: :pending)
report2 = create(:moderation_report, model: forum_reply, status: :rejected)
report2 = create(:moderation_report, model: forum_reply, status: :rejected, updater: @user)
delete_auth forum_post_path(forum_reply), @mod
assert_redirected_to(forum_post_path(forum_reply))
@@ -266,6 +270,8 @@ class ForumPostsControllerTest < ActionDispatch::IntegrationTest
assert_redirected_to(@forum_reply)
assert_equal(false, @forum_reply.reload.is_deleted?)
assert_match(/updated forum ##{@forum_reply.id}/, ModAction.last.description)
assert_equal(@forum_reply, ModAction.last.subject)
assert_equal(@mod, ModAction.last.creator)
end
should "not allow users to undelete their own posts" do