appeals: crosspost appeals to deletion appeal thread.
Crosspost pending appeals to the deletion appeal thread. We do this once per hour so we can batch together multiple appeals into one post.
This commit is contained in:
@@ -4,6 +4,7 @@ module DanbooruMaintenance
|
||||
def hourly
|
||||
safely { Upload.prune! }
|
||||
safely { PostPruner.prune! }
|
||||
safely { PostAppealForumUpdater.update_forum! }
|
||||
safely { regenerate_post_counts! }
|
||||
end
|
||||
|
||||
|
||||
26
app/logical/post_appeal_forum_updater.rb
Normal file
26
app/logical/post_appeal_forum_updater.rb
Normal file
@@ -0,0 +1,26 @@
|
||||
module PostAppealForumUpdater
|
||||
APPEAL_TOPIC_TITLE = "Deletion appeal thread"
|
||||
|
||||
def self.update_forum!
|
||||
return if pending_appeals.empty?
|
||||
|
||||
CurrentUser.scoped(User.system) do
|
||||
topic = ForumTopic.order(:id).create_with(creator: User.system).find_or_create_by!(title: APPEAL_TOPIC_TITLE)
|
||||
ForumPost.create!(creator: User.system, topic: topic, body: forum_post_body)
|
||||
end
|
||||
end
|
||||
|
||||
def self.pending_appeals
|
||||
PostAppeal.pending.where(created_at: (1.hour.ago..Time.zone.now)).order(post_id: :asc)
|
||||
end
|
||||
|
||||
def self.forum_post_body
|
||||
pending_appeals.map do |appeal|
|
||||
if appeal.reason.present?
|
||||
"post ##{appeal.post_id}: #{appeal.reason}"
|
||||
else
|
||||
"post ##{appeal.post_id}"
|
||||
end
|
||||
end.join("\n")
|
||||
end
|
||||
end
|
||||
@@ -38,4 +38,32 @@ class DanbooruMaintenanceTest < ActiveSupport::TestCase
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "PostAppealForumUpdater" do
|
||||
should "work when there are no pending appeals" do
|
||||
assert_nothing_raised do
|
||||
PostAppealForumUpdater.update_forum!
|
||||
end
|
||||
end
|
||||
|
||||
should "post pending appeals to the deletion appeal thread" do
|
||||
@topic = as(create(:user)) { create(:forum_topic, title: PostAppealForumUpdater::APPEAL_TOPIC_TITLE) }
|
||||
@appeal1 = create(:post_appeal, reason: "test")
|
||||
@appeal2 = create(:post_appeal, reason: "")
|
||||
@appeal3 = create(:post_appeal, created_at: 2.hours.ago)
|
||||
|
||||
PostAppealForumUpdater.update_forum!
|
||||
|
||||
assert_equal(@topic.id, ForumPost.last.topic_id)
|
||||
assert_equal("post ##{@appeal1.post_id}: #{@appeal1.reason}\npost ##{@appeal2.post_id}", ForumPost.last.body)
|
||||
end
|
||||
|
||||
should "create the deletion appeal thread if it doesn't already exist" do
|
||||
@appeal = create(:post_appeal, reason: "")
|
||||
PostAppealForumUpdater.update_forum!
|
||||
|
||||
assert_equal(PostAppealForumUpdater::APPEAL_TOPIC_TITLE, ForumPost.last.topic.title)
|
||||
assert_equal("post ##{@appeal.post_id}", ForumPost.last.body)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user