2019-04-29 19:27:42 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2013-07-12 13:38:20 -05:00
|
|
|
require 'suggested_topics_builder'
|
|
|
|
|
2022-07-27 21:27:38 -05:00
|
|
|
RSpec.describe SuggestedTopicsBuilder do
|
2019-05-06 22:12:20 -05:00
|
|
|
fab!(:topic) { Fabricate(:topic) }
|
2013-08-27 19:51:49 -05:00
|
|
|
let(:builder) { SuggestedTopicsBuilder.new(topic) }
|
2013-07-12 13:38:20 -05:00
|
|
|
|
|
|
|
before do
|
2017-07-07 01:09:14 -05:00
|
|
|
SiteSetting.suggested_topics = 5
|
2013-07-12 13:38:20 -05:00
|
|
|
end
|
|
|
|
|
2022-07-27 11:14:14 -05:00
|
|
|
describe "splicing category results" do
|
2013-08-27 19:51:49 -05:00
|
|
|
def fake_topic(topic_id, category_id)
|
|
|
|
build(:topic, id: topic_id, category_id: category_id)
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:builder) do
|
2017-07-27 20:20:09 -05:00
|
|
|
SuggestedTopicsBuilder.new(fake_topic(1, 1))
|
2013-08-27 19:51:49 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "prioritizes category correctly" do
|
2017-07-27 20:20:09 -05:00
|
|
|
builder.splice_results([fake_topic(2, 2)], :high)
|
|
|
|
builder.splice_results([fake_topic(3, 1)], :high)
|
|
|
|
builder.splice_results([fake_topic(4, 1)], :high)
|
2013-08-27 19:51:49 -05:00
|
|
|
|
2017-07-27 20:20:09 -05:00
|
|
|
expect(builder.results.map(&:id)).to eq([3, 4, 2])
|
2013-08-27 19:51:49 -05:00
|
|
|
|
|
|
|
# we have 2 items in category 1
|
2015-01-09 10:34:37 -06:00
|
|
|
expect(builder.category_results_left).to eq(3)
|
2013-08-27 19:51:49 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "inserts using default approach for non high priority" do
|
2017-07-27 20:20:09 -05:00
|
|
|
builder.splice_results([fake_topic(2, 2)], :high)
|
|
|
|
builder.splice_results([fake_topic(3, 1)], :low)
|
2013-08-27 19:51:49 -05:00
|
|
|
|
2017-07-27 20:20:09 -05:00
|
|
|
expect(builder.results.map(&:id)).to eq([2, 3])
|
2013-08-27 19:51:49 -05:00
|
|
|
end
|
2014-01-13 14:02:08 -06:00
|
|
|
|
|
|
|
it "inserts multiple results and puts topics in the correct order" do
|
2017-07-27 20:20:09 -05:00
|
|
|
builder.splice_results([fake_topic(2, 1), fake_topic(3, 2), fake_topic(4, 1)], :high)
|
|
|
|
expect(builder.results.map(&:id)).to eq([2, 4, 3])
|
2014-01-13 14:02:08 -06:00
|
|
|
end
|
2013-08-27 19:51:49 -05:00
|
|
|
end
|
|
|
|
|
2013-07-12 13:38:20 -05:00
|
|
|
it "has the correct defaults" do
|
2015-01-09 10:34:37 -06:00
|
|
|
expect(builder.excluded_topic_ids.include?(topic.id)).to eq(true)
|
|
|
|
expect(builder.results_left).to eq(5)
|
|
|
|
expect(builder.size).to eq(0)
|
|
|
|
expect(builder).not_to be_full
|
2013-07-12 13:38:20 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "returns full correctly" do
|
|
|
|
builder.stubs(:results_left).returns(0)
|
2015-01-09 10:34:37 -06:00
|
|
|
expect(builder).to be_full
|
2013-07-12 13:38:20 -05:00
|
|
|
end
|
|
|
|
|
2022-07-27 11:14:14 -05:00
|
|
|
describe "adding results" do
|
2013-07-12 13:38:20 -05:00
|
|
|
it "adds nothing with nil results" do
|
|
|
|
builder.add_results(nil)
|
2015-01-09 10:34:37 -06:00
|
|
|
expect(builder.results_left).to eq(5)
|
|
|
|
expect(builder.size).to eq(0)
|
|
|
|
expect(builder).not_to be_full
|
2013-07-12 13:38:20 -05:00
|
|
|
end
|
|
|
|
|
2022-07-27 11:14:14 -05:00
|
|
|
context "when adding topics" do
|
2019-05-06 22:12:20 -05:00
|
|
|
fab!(:other_topic) { Fabricate(:topic) }
|
2013-07-12 13:38:20 -05:00
|
|
|
|
|
|
|
before do
|
|
|
|
# Add all topics
|
|
|
|
builder.add_results(Topic)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "added the result correctly" do
|
2015-01-09 10:34:37 -06:00
|
|
|
expect(builder.size).to eq(1)
|
|
|
|
expect(builder.results_left).to eq(4)
|
|
|
|
expect(builder).not_to be_full
|
|
|
|
expect(builder.excluded_topic_ids.include?(topic.id)).to eq(true)
|
|
|
|
expect(builder.excluded_topic_ids.include?(other_topic.id)).to eq(true)
|
2013-07-12 13:38:20 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-07-27 11:14:14 -05:00
|
|
|
context "when adding topics that are not open" do
|
2019-05-06 22:12:20 -05:00
|
|
|
fab!(:archived_topic) { Fabricate(:topic, archived: true) }
|
|
|
|
fab!(:closed_topic) { Fabricate(:topic, closed: true) }
|
|
|
|
fab!(:invisible_topic) { Fabricate(:topic, visible: false) }
|
2013-07-12 13:38:20 -05:00
|
|
|
|
2014-02-04 11:26:38 -06:00
|
|
|
it "adds archived and closed, but not invisible topics" do
|
2013-07-12 13:38:20 -05:00
|
|
|
builder.add_results(Topic)
|
2015-01-09 10:34:37 -06:00
|
|
|
expect(builder.size).to eq(2)
|
|
|
|
expect(builder).not_to be_full
|
2013-07-12 13:38:20 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-07-27 11:14:14 -05:00
|
|
|
context "when category definition topics" do
|
2019-08-06 05:26:54 -05:00
|
|
|
fab!(:category) { Fabricate(:category_with_definition) }
|
2013-11-21 15:43:22 -06:00
|
|
|
|
|
|
|
it "doesn't add a category definition topic" do
|
2015-01-09 10:34:37 -06:00
|
|
|
expect(category.topic_id).to be_present
|
2013-11-21 15:43:22 -06:00
|
|
|
builder.add_results(Topic)
|
2015-01-09 10:34:37 -06:00
|
|
|
expect(builder.size).to eq(0)
|
|
|
|
expect(builder).not_to be_full
|
2013-11-21 15:43:22 -06:00
|
|
|
end
|
|
|
|
end
|
2013-07-12 13:38:20 -05:00
|
|
|
end
|
|
|
|
end
|