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

FEATURE: exclude muted categories from the “top” topics list.

diff --git a/lib/topic_query.rb b/lib/topic_query.rb
index 772ea5a..5f86586 100644
--- a/lib/topic_query.rb
+++ b/lib/topic_query.rb
@@ -265,6 +265,7 @@ class TopicQuery
   def list_top_for(period)
     score = "#{period}_score"
     create_list(:top, unordered: true) do |topics|
+      topics = remove_muted_categories(topics, @user)
       topics = topics.joins(:top_topic).where("top_topics.#{score} > 0")
       if period == :yearly && @user.try(:trust_level) == TrustLevel[0]
         topics.order(TopicQuerySQL.order_top_with_pinned_category_for(score))
diff --git a/spec/components/topic_query_spec.rb b/spec/components/topic_query_spec.rb
index 0bafbbb..d6e56a0 100644
--- a/spec/components/topic_query_spec.rb
+++ b/spec/components/topic_query_spec.rb
@@ -265,7 +265,7 @@ describe TopicQuery do
   end
 
   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)
       topic = Fabricate(:topic, category: category)
       CategoryUser.create!(user_id: user.id,
@@ -273,6 +273,8 @@ describe TopicQuery do
                            notification_level: CategoryUser.notification_levels[:muted])
       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)
+      TopTopic.create!(topic: topic, all_score: 1)
+      expect(topic_query.list_top_for(:all).topics.map(&:id)).not_to include(topic.id)
     end
   end
 

GitHub sha: 744bbf69

This commit has been mentioned on Discourse Meta. There might be relevant details there:

https://meta.discourse.org/t/muted-categories-not-respected-in-top-lists/150208/6