Force summary mode when user enters at the top of megalodoon topics.

This commit is contained in:
Guo Xiang Tan 2018-06-21 15:18:52 +08:00
parent f7d22bad90
commit 9a7a079f4d
4 changed files with 35 additions and 21 deletions

View File

@ -177,9 +177,9 @@ export default function transformPost(
const postStream = topic.get("postStream"); const postStream = topic.get("postStream");
postAtts.userFilters = postStream.userFilters; postAtts.userFilters = postStream.userFilters;
postAtts.topicSummaryEnabled = postStream.summary; postAtts.topicSummaryEnabled = postStream.summary || topic.force_summary_mode;
postAtts.topicWordCount = topic.word_count; postAtts.topicWordCount = topic.word_count;
postAtts.hasTopicSummary = topic.has_summary; postAtts.hasTopicSummary = topic.has_summary || topic.force_summary_mode;
} }
if (postAtts.isDeleted) { if (postAtts.isDeleted) {

View File

@ -68,6 +68,7 @@ class TopicViewSerializer < ApplicationSerializer
:participant_count, :participant_count,
:destination_category_id, :destination_category_id,
:pm_with_non_human_user, :pm_with_non_human_user,
:force_summary_mode,
# TODO: Split off into proper object / serializer # TODO: Split off into proper object / serializer
def details def details
@ -299,6 +300,10 @@ class TopicViewSerializer < ApplicationSerializer
object.topic.shared_draft.present? object.topic.shared_draft.present?
end end
def force_summary_mode
object.force_summary_mode?
end
private private
def private_message?(topic) def private_message?(topic)

View File

@ -405,6 +405,11 @@ class TopicView
end end
end end
def force_summary_mode?
@force_summary_mode ||=
(@topic.closed? && @topic.posts_count >= (MEGA_TOPIC_POSTS_COUNT * 2))
end
protected protected
def read_posts_set def read_posts_set
@ -482,7 +487,7 @@ class TopicView
@filtered_posts = unfiltered_posts @filtered_posts = unfiltered_posts
# Filters # Filters
if @filter == 'summary' || force_summary_mode? if @filter == 'summary' || ((@post_number.blank? || @post_number.to_i == 1) && force_summary_mode?)
@filtered_posts = @filtered_posts.summary(@topic.id) @filtered_posts = @filtered_posts.summary(@topic.id)
@contains_gaps = true unless force_summary_mode? @contains_gaps = true unless force_summary_mode?
end end
@ -572,9 +577,4 @@ class TopicView
def is_mega_topic? def is_mega_topic?
@topic.posts_count >= MEGA_TOPIC_POSTS_COUNT @topic.posts_count >= MEGA_TOPIC_POSTS_COUNT
end end
def force_summary_mode?
@force_summary_mode ||=
(@topic.closed? && @topic.posts_count >= (MEGA_TOPIC_POSTS_COUNT * 2))
end
end end

View File

@ -365,22 +365,31 @@ describe TopicView do
end end
describe 'when a megalodon topic is closed' do describe 'when a megalodon topic is closed' do
before do
@original_const = TopicView::MEGA_TOPIC_POSTS_COUNT
TopicView.send(:remove_const, "MEGA_TOPIC_POSTS_COUNT")
TopicView.const_set("MEGA_TOPIC_POSTS_COUNT", 1)
topic.update!(closed: true)
SiteSetting.summary_max_results = 2
end
after do
TopicView.send(:remove_const, "MEGA_TOPIC_POSTS_COUNT")
TopicView.const_set("MEGA_TOPIC_POSTS_COUNT", @original_const)
end
it 'should be forced into summary mode without gaps' do it 'should be forced into summary mode without gaps' do
begin topic_view = TopicView.new(topic.id, evil_trout, post_number: 1)
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])
end
expect(topic_view.contains_gaps?).to eq(false) it 'should not be forced into summary mode if post_number is not blank' do
expect(topic_view.posts).to eq([p5]) topic_view = TopicView.new(topic.id, evil_trout, post_number: 2)
ensure
TopicView.send(:remove_const, "MEGA_TOPIC_POSTS_COUNT") expect(topic_view.contains_gaps?).to eq(false)
TopicView.const_set("MEGA_TOPIC_POSTS_COUNT", original_const) expect(topic_view.posts).to eq([p1, p2, p3])
end
end end
end end