FEATURE: Forced summary mode for megalodon topics.

This is mainly done for performance reasons and megalodon
topics are usually a byproduct of imports where site setting
limits are not respected.
This commit is contained in:
Guo Xiang Tan 2018-06-21 14:00:20 +08:00
parent ac80360bea
commit f7d22bad90
3 changed files with 28 additions and 3 deletions

View File

@ -355,7 +355,7 @@ class Post < ActiveRecord::Base
SELECT posts.id
FROM posts
WHERE posts.topic_id = #{topic_id.to_i}
AND post_number = 1
AND posts.post_number = 1
) UNION
(
SELECT p1.id

View File

@ -482,9 +482,9 @@ class TopicView
@filtered_posts = unfiltered_posts
# Filters
if @filter == 'summary'
if @filter == 'summary' || force_summary_mode?
@filtered_posts = @filtered_posts.summary(@topic.id)
@contains_gaps = true
@contains_gaps = true unless force_summary_mode?
end
if @best.present?
@ -572,4 +572,9 @@ class TopicView
def is_mega_topic?
@topic.posts_count >= MEGA_TOPIC_POSTS_COUNT
end
def force_summary_mode?
@force_summary_mode ||=
(@topic.closed? && @topic.posts_count >= (MEGA_TOPIC_POSTS_COUNT * 2))
end
end

View File

@ -364,6 +364,26 @@ describe TopicView do
end
end
describe 'when a megalodon topic is closed' do
it 'should be forced into summary mode without gaps' do
begin
original_const = TopicView::MEGA_TOPIC_POSTS_COUNT
TopicView.send(:remove_const, "MEGA_TOPIC_POSTS_COUNT")
TopicView.const_set("MEGA_TOPIC_POSTS_COUNT", 1)
SiteSetting.summary_max_results = 2
topic.update!(closed: true)
topic_view = TopicView.new(topic.id, evil_trout)
expect(topic_view.contains_gaps?).to eq(false)
expect(topic_view.posts).to eq([p5])
ensure
TopicView.send(:remove_const, "MEGA_TOPIC_POSTS_COUNT")
TopicView.const_set("MEGA_TOPIC_POSTS_COUNT", original_const)
end
end
end
it "#restricts to correct topic" do
t2 = Fabricate(:topic)