FIX: categories page would sometimes show no topics, even if there are some visible topics to show

This commit is contained in:
Neil Lalonde 2015-09-21 15:14:05 -04:00
parent 6e384cd4c7
commit 2ae032c9b0
3 changed files with 14 additions and 5 deletions

View file

@ -19,14 +19,21 @@ class CategoryFeaturedTopic < ActiveRecord::Base
def self.feature_topics_for(c, existing=nil)
return if c.blank?
query = TopicQuery.new(CategoryFeaturedTopic.fake_admin,
query_opts = {
per_page: SiteSetting.category_featured_topics,
except_topic_ids: [c.topic_id],
visible: true,
no_definitions: true)
no_definitions: true
}
# Add topics, even if they're in secured categories:
query = TopicQuery.new(CategoryFeaturedTopic.fake_admin, query_opts)
results = query.list_category_topic_ids(c).uniq
# Add some topics that are visible to everyone:
anon_query = TopicQuery.new(nil, query_opts.merge({except_topic_ids: [c.topic_id] + results}))
results += anon_query.list_category_topic_ids(c).uniq
return if results == existing
CategoryFeaturedTopic.transaction do

View file

@ -44,7 +44,7 @@ class TopicQuery
def initialize(user=nil, options={})
options.assert_valid_keys(VALID_OPTIONS)
@options = options
@options = options.dup
@user = user
end

View file

@ -34,9 +34,10 @@ describe CategoryFeaturedTopic do
it 'should feature stuff in the correct order' do
SiteSetting.stubs(:category_featured_topics).returns(3)
SiteSetting.stubs(:category_featured_topics).returns(2)
category = Fabricate(:category)
t5 = Fabricate(:topic, category_id: category.id, bumped_at: 12.minutes.ago)
t4 = Fabricate(:topic, category_id: category.id, bumped_at: 10.minutes.ago)
t3 = Fabricate(:topic, category_id: category.id, bumped_at: 7.minutes.ago)
t2 = Fabricate(:topic, category_id: category.id, bumped_at: 4.minutes.ago)
@ -45,9 +46,10 @@ describe CategoryFeaturedTopic do
CategoryFeaturedTopic.feature_topics_for(category)
# Should find more than we need: pinned topics first, then category_featured_topics * 2
expect(
CategoryFeaturedTopic.where(category_id: category.id).pluck(:topic_id)
).to eq([pinned.id, t2.id, t1.id, t3.id])
).to eq([pinned.id, t2.id, t1.id, t3.id, t4.id])
end
end