FIX: `topic_destroyed` web hook couldn't find topic.

This commit is contained in:
Guo Xiang Tan 2018-05-28 17:06:47 +08:00
parent ed2ae3cb0a
commit 81b5d61fa7
2 changed files with 18 additions and 8 deletions

View File

@ -37,15 +37,16 @@ class TopicView
wpcf.flatten.uniq wpcf.flatten.uniq
end end
def initialize(topic_id, user = nil, options = {}) def initialize(topic_or_topic_id, user = nil, options = {})
@message_bus_last_id = MessageBus.last_id("/topic/#{topic_id}") @topic = find_topic(topic_or_topic_id)
@user = user @user = user
@guardian = Guardian.new(@user) @guardian = Guardian.new(@user)
@topic = find_topic(topic_id)
@print = options[:print].present?
check_and_raise_exceptions check_and_raise_exceptions
@message_bus_last_id = MessageBus.last_id("/topic/#{@topic.id}")
@print = options[:print].present?
options.each do |key, value| options.each do |key, value|
self.instance_variable_set("@#{key}".to_sym, value) self.instance_variable_set("@#{key}".to_sym, value)
end end
@ -435,11 +436,15 @@ class TopicView
@posts @posts
end end
def find_topic(topic_id) def find_topic(topic_or_topic_id)
if topic_or_topic_id.is_a?(Topic)
topic_or_topic_id
else
# with_deleted covered in #check_and_raise_exceptions # with_deleted covered in #check_and_raise_exceptions
finder = Topic.with_deleted.where(id: topic_id).includes(:category) finder = Topic.with_deleted.where(id: topic_or_topic_id).includes(:category)
finder.first finder.first
end end
end
def unfiltered_posts def unfiltered_posts
result = filter_post_types(@topic.posts) result = filter_post_types(@topic.posts)

View File

@ -13,6 +13,11 @@ describe TopicView do
expect { TopicView.new(1231232, evil_trout) }.to raise_error(Discourse::NotFound) expect { TopicView.new(1231232, evil_trout) }.to raise_error(Discourse::NotFound)
end end
it "accepts a topic or a topic id" do
expect(TopicView.new(topic, evil_trout).topic).to eq(topic)
expect(TopicView.new(topic.id, evil_trout).topic).to eq(topic)
end
# see also spec/controllers/topics_controller_spec.rb TopicsController::show::permission errors # see also spec/controllers/topics_controller_spec.rb TopicsController::show::permission errors
it "raises an error if the user can't see the topic" do it "raises an error if the user can't see the topic" do
Guardian.any_instance.expects(:can_see?).with(topic).returns(false) Guardian.any_instance.expects(:can_see?).with(topic).returns(false)