FEATURE: Navigate to an approved queued topic from the review queue. (#12841)

Admins can visit an approved queued topic from the review queue by clicking their title. We no longer store the created post and topic ids in the reviewable's payload object. Instead, we set the `topic_id` and `target_id` attributes.
This commit is contained in:
Roman Rizzi 2021-05-26 15:43:18 -03:00 committed by GitHub
parent 8e1448487f
commit 83dd47f0b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 5 deletions

View File

@ -83,8 +83,10 @@ class ReviewableQueuedPost < Reviewable
return create_result(:failure) { |r| r.errors = creator.errors }
end
payload['created_post_id'] = created_post.id
payload['created_topic_id'] = created_post.topic_id unless topic_id
self.target = created_post
if topic_id.nil?
self.topic_id = created_post.topic_id
end
save
UserSilencer.unsilence(created_by, performed_by) if created_by.silenced?

View File

@ -0,0 +1,18 @@
# frozen_string_literal: true
class MoveApprovedQueuedPostsTopicAndPostData < ActiveRecord::Migration[6.1]
def up
DB.query_single <<~SQL
UPDATE reviewables r
SET topic_id = (payload->>'created_topic_id')::int, target_id = (payload->>'created_post_id')::int, target_type = 'Post'
WHERE r.type = 'ReviewableQueuedPost' AND r.status = 1
AND (r.payload->>'created_topic_id') IS NOT NULL
AND (r.payload->>'created_post_id') IS NOT NULL
AND topic_id IS NULL
AND target_id IS NULL
SQL
end
def down
end
end

View File

@ -61,7 +61,7 @@ RSpec.describe ReviewableQueuedPost, type: :model do
expect(result.created_post.custom_fields['hello']).to eq('world')
expect(result.created_post_topic).to eq(topic)
expect(result.created_post.user).to eq(reviewable.created_by)
expect(reviewable.payload['created_post_id']).to eq(result.created_post.id)
expect(reviewable.target_id).to eq(result.created_post.id)
expect(Topic.count).to eq(topic_count)
expect(Post.count).to eq(post_count + 1)
@ -183,8 +183,8 @@ RSpec.describe ReviewableQueuedPost, type: :model do
expect(result.created_post).to be_valid
expect(result.created_post_topic).to be_present
expect(result.created_post_topic).to be_valid
expect(reviewable.payload['created_post_id']).to eq(result.created_post.id)
expect(reviewable.payload['created_topic_id']).to eq(result.created_post_topic.id)
expect(reviewable.target_id).to eq(result.created_post.id)
expect(reviewable.topic_id).to eq(result.created_post_topic.id)
expect(Topic.count).to eq(topic_count + 1)
expect(Post.count).to eq(post_count + 1)