correct random suggested topic selection

This commit is contained in:
Sam 2016-07-04 10:34:54 +10:00
parent e858def372
commit 92daf44daf
4 changed files with 23 additions and 20 deletions

View file

@ -4,7 +4,6 @@ class RandomTopicSelector
BACKFILL_LOW_WATER_MARK = 500 BACKFILL_LOW_WATER_MARK = 500
def self.backfill(category=nil) def self.backfill(category=nil)
exclude = category.try(:topic_id) exclude = category.try(:topic_id)
# don't leak private categories into the "everything" group # don't leak private categories into the "everything" group
@ -20,8 +19,11 @@ class RandomTopicSelector
options[:category] = category.id if category options[:category] = category.id if category
query = TopicQuery.new(user, options) query = TopicQuery.new(user, options)
results = query.latest_results.order('RANDOM()') results = query.latest_results.order('RANDOM()')
.where(closed: false, archived: false) .where(closed: false, archived: false)
.where("topics.created_at > ?", SiteSetting.suggested_topics_max_days_old.days.ago)
.limit(BACKFILL_SIZE) .limit(BACKFILL_SIZE)
.reorder('RANDOM()') .reorder('RANDOM()')
.pluck(:id) .pluck(:id)

View file

@ -25,10 +25,6 @@ class SuggestedTopicsBuilder
if @category_id && SiteSetting.limit_suggested_to_category? if @category_id && SiteSetting.limit_suggested_to_category?
results = results.where(category_id: @category_id) results = results.where(category_id: @category_id)
end end
# Suggested topics should not be more than n days old
results = results.where("topics.created_at > ?", SiteSetting.suggested_topics_max_days_old.days.ago)
results = results.to_a.reject { |topic| @category_topic_ids.include?(topic.id) } results = results.to_a.reject { |topic| @category_topic_ids.include?(topic.id) }
unless results.empty? unless results.empty?

View file

@ -95,21 +95,6 @@ describe SuggestedTopicsBuilder do
end end
end end
context "adding topics that are more than n days old" do
let!(:new_topic) { Fabricate(:topic, created_at: 2.days.ago) }
let!(:old_topic) { Fabricate(:topic, created_at: 3.years.ago) }
it "adds topics based on suggested_topics_max_days_old setting" do
SiteSetting.suggested_topics_max_days_old = 365
builder.add_results(Topic)
expect(builder.size).to eq(1)
expect(builder).not_to be_full
expect(builder.excluded_topic_ids.include?(old_topic.id)).to eq(false)
expect(builder.excluded_topic_ids.include?(new_topic.id)).to eq(true)
end
end
context "category definition topics" do context "category definition topics" do
let!(:category) { Fabricate(:category) } let!(:category) { Fabricate(:category) }

View file

@ -620,6 +620,26 @@ describe TopicQuery do
expect(suggested_topics).to be_blank expect(suggested_topics).to be_blank
end end
context 'random suggested' do
let!(:new_topic) { Fabricate(:topic, created_at: 2.days.ago) }
let!(:old_topic) { Fabricate(:topic, created_at: 3.years.ago) }
it 'respects suggested_topics_max_days_old' do
SiteSetting.suggested_topics_max_days_old = 1365
tt = topic
RandomTopicSelector.clear_cache!
expect(topic_query.list_suggested_for(tt).topics.length).to eq(2)
SiteSetting.suggested_topics_max_days_old = 365
RandomTopicSelector.clear_cache!
expect(topic_query.list_suggested_for(tt).topics.length).to eq(1)
end
end
context 'with some existing topics' do context 'with some existing topics' do
let!(:partially_read) { Fabricate(:post, user: creator).topic } let!(:partially_read) { Fabricate(:post, user: creator).topic }
let!(:new_topic) { Fabricate(:post, user: creator).topic } let!(:new_topic) { Fabricate(:post, user: creator).topic }