mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-27 09:36:19 -05:00
correct random suggested topic selection
This commit is contained in:
parent
e858def372
commit
92daf44daf
4 changed files with 23 additions and 20 deletions
|
@ -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)
|
||||||
|
|
|
@ -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?
|
||||||
|
|
|
@ -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) }
|
||||||
|
|
||||||
|
|
|
@ -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 }
|
||||||
|
|
Loading…
Reference in a new issue