FIX: Include deleted topics in the post serializer

This commit is contained in:
Vinoth Kannan 2018-02-21 14:31:52 +05:30
parent b16471edfb
commit 1446753fd2
2 changed files with 29 additions and 6 deletions

View File

@ -82,7 +82,7 @@ class PostSerializer < BasicPostSerializer
end end
def topic_slug def topic_slug
object.topic && object.topic.slug topic&.slug
end end
def include_topic_title? def include_topic_title?
@ -98,15 +98,15 @@ class PostSerializer < BasicPostSerializer
end end
def topic_title def topic_title
object.topic.title topic&.title
end end
def topic_html_title def topic_html_title
object.topic.fancy_title topic&.fancy_title
end end
def category_id def category_id
object.topic.category_id topic&.category_id
end end
def moderator? def moderator?
@ -376,6 +376,12 @@ class PostSerializer < BasicPostSerializer
private private
def topic
@topic = object.topic
@topic ||= Topic.with_deleted.find(object.topic_id) if scope.is_staff?
@topic
end
def post_actions def post_actions
@post_actions ||= (@topic_view&.all_post_actions || {})[object.id] @post_actions ||= (@topic_view&.all_post_actions || {})[object.id]
end end

View File

@ -3,10 +3,13 @@ require 'rails_helper'
RSpec.describe WebHookPostSerializer do RSpec.describe WebHookPostSerializer do
let(:admin) { Fabricate(:admin) } let(:admin) { Fabricate(:admin) }
let(:post) { Fabricate(:post) } let(:post) { Fabricate(:post) }
let(:serializer) { WebHookPostSerializer.new(post, scope: Guardian.new(admin), root: false) }
def serialized_for_user(u)
WebHookPostSerializer.new(post, scope: Guardian.new(u), root: false).as_json
end
it 'should only include the required keys' do it 'should only include the required keys' do
count = serializer.as_json.keys.count count = serialized_for_user(admin).keys.count
difference = count - 41 difference = count - 41
expect(difference).to eq(0), lambda { expect(difference).to eq(0), lambda {
@ -21,4 +24,18 @@ RSpec.describe WebHookPostSerializer do
message << "\nPlease verify if those key(s) are required as part of the web hook's payload." message << "\nPlease verify if those key(s) are required as part of the web hook's payload."
} }
end end
it 'should only include deleted topic title for staffs' do
topic = post.topic
PostDestroyer.new(Discourse.system_user, post).destroy
post.reload
[nil, post.user, Fabricate(:user)].each do |user|
expect(serialized_for_user(user)[:topic_title]).to eq(nil)
end
[Fabricate(:moderator), admin].each do |user|
expect(serialized_for_user(user)[:topic_title]).to eq(topic.title)
end
end
end end