FEATURE: exclude muted categories from the "top" topics list.

This commit is contained in:
Vinoth Kannan 2020-05-08 00:34:53 +05:30
parent 4891276742
commit 744bbf6904
2 changed files with 4 additions and 1 deletions

View File

@ -265,6 +265,7 @@ class TopicQuery
def list_top_for(period) def list_top_for(period)
score = "#{period}_score" score = "#{period}_score"
create_list(:top, unordered: true) do |topics| create_list(:top, unordered: true) do |topics|
topics = remove_muted_categories(topics, @user)
topics = topics.joins(:top_topic).where("top_topics.#{score} > 0") topics = topics.joins(:top_topic).where("top_topics.#{score} > 0")
if period == :yearly && @user.try(:trust_level) == TrustLevel[0] if period == :yearly && @user.try(:trust_level) == TrustLevel[0]
topics.order(TopicQuerySQL.order_top_with_pinned_category_for(score)) topics.order(TopicQuerySQL.order_top_with_pinned_category_for(score))

View File

@ -265,7 +265,7 @@ describe TopicQuery do
end end
context 'muted categories' do context 'muted categories' do
it 'is removed from new and latest lists' do it 'is removed from top, new and latest lists' do
category = Fabricate(:category_with_definition) category = Fabricate(:category_with_definition)
topic = Fabricate(:topic, category: category) topic = Fabricate(:topic, category: category)
CategoryUser.create!(user_id: user.id, CategoryUser.create!(user_id: user.id,
@ -273,6 +273,8 @@ describe TopicQuery do
notification_level: CategoryUser.notification_levels[:muted]) notification_level: CategoryUser.notification_levels[:muted])
expect(topic_query.list_new.topics.map(&:id)).not_to include(topic.id) expect(topic_query.list_new.topics.map(&:id)).not_to include(topic.id)
expect(topic_query.list_latest.topics.map(&:id)).not_to include(topic.id) expect(topic_query.list_latest.topics.map(&:id)).not_to include(topic.id)
TopTopic.create!(topic: topic, all_score: 1)
expect(topic_query.list_top_for(:all).topics.map(&:id)).not_to include(topic.id)
end end
end end