correct random suggested topic selection
This commit is contained in:
parent
e858def372
commit
92daf44daf
|
@ -4,7 +4,6 @@ class RandomTopicSelector
|
|||
BACKFILL_LOW_WATER_MARK = 500
|
||||
|
||||
def self.backfill(category=nil)
|
||||
|
||||
exclude = category.try(:topic_id)
|
||||
|
||||
# don't leak private categories into the "everything" group
|
||||
|
@ -20,8 +19,11 @@ class RandomTopicSelector
|
|||
options[:category] = category.id if category
|
||||
|
||||
query = TopicQuery.new(user, options)
|
||||
|
||||
|
||||
results = query.latest_results.order('RANDOM()')
|
||||
.where(closed: false, archived: false)
|
||||
.where("topics.created_at > ?", SiteSetting.suggested_topics_max_days_old.days.ago)
|
||||
.limit(BACKFILL_SIZE)
|
||||
.reorder('RANDOM()')
|
||||
.pluck(:id)
|
||||
|
|
|
@ -25,10 +25,6 @@ class SuggestedTopicsBuilder
|
|||
if @category_id && SiteSetting.limit_suggested_to_category?
|
||||
results = results.where(category_id: @category_id)
|
||||
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) }
|
||||
|
||||
unless results.empty?
|
||||
|
|
|
@ -95,21 +95,6 @@ describe SuggestedTopicsBuilder do
|
|||
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
|
||||
let!(:category) { Fabricate(:category) }
|
||||
|
||||
|
|
|
@ -620,6 +620,26 @@ describe TopicQuery do
|
|||
expect(suggested_topics).to be_blank
|
||||
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
|
||||
let!(:partially_read) { Fabricate(:post, user: creator).topic }
|
||||
let!(:new_topic) { Fabricate(:post, user: creator).topic }
|
||||
|
|
Loading…
Reference in New Issue