mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 10:20:58 -06:00
DEV: Refactor user search spec to use prefabrication
Break up single large example into multiple examples, using fab! to maintain performance. On my machine, this speeds up the test slightly, and also makes it more readable.
This commit is contained in:
parent
b3cd83460b
commit
e9897d295f
@ -4,24 +4,23 @@ require 'rails_helper'
|
|||||||
|
|
||||||
describe UserSearch do
|
describe UserSearch do
|
||||||
|
|
||||||
let(:topic) { Fabricate :topic }
|
fab!(:indexer) { SearchIndexer.enable } # Enable before fab! topics/users
|
||||||
let(:topic2) { Fabricate :topic }
|
before { SearchIndexer.enable } # Enable for each test
|
||||||
let(:topic3) { Fabricate :topic }
|
|
||||||
let(:topic4) { Fabricate :topic }
|
|
||||||
let(:user1) { Fabricate :user, username: "mrb", name: "Michael Madsen", last_seen_at: 10.days.ago }
|
|
||||||
let(:user2) { Fabricate :user, username: "mrblue", name: "Eddie Code", last_seen_at: 9.days.ago }
|
|
||||||
let(:user3) { Fabricate :user, username: "mrorange", name: "Tim Roth", last_seen_at: 8.days.ago }
|
|
||||||
let(:user4) { Fabricate :user, username: "mrpink", name: "Steve Buscemi", last_seen_at: 7.days.ago }
|
|
||||||
let(:user5) { Fabricate :user, username: "mrbrown", name: "Quentin Tarantino", last_seen_at: 6.days.ago }
|
|
||||||
let(:user6) { Fabricate :user, username: "mrwhite", name: "Harvey Keitel", last_seen_at: 5.days.ago }
|
|
||||||
let!(:inactive) { Fabricate :user, username: "Ghost", active: false }
|
|
||||||
let(:admin) { Fabricate :admin, username: "theadmin" }
|
|
||||||
let(:moderator) { Fabricate :moderator, username: "themod" }
|
|
||||||
let(:staged) { Fabricate :staged }
|
|
||||||
|
|
||||||
before do
|
fab!(:topic) { Fabricate :topic }
|
||||||
SearchIndexer.enable
|
fab!(:topic2) { Fabricate :topic }
|
||||||
end
|
fab!(:topic3) { Fabricate :topic }
|
||||||
|
fab!(:topic4) { Fabricate :topic }
|
||||||
|
fab!(:user1) { Fabricate :user, username: "mrb", name: "Michael Madsen", last_seen_at: 10.days.ago }
|
||||||
|
fab!(:user2) { Fabricate :user, username: "mrblue", name: "Eddie Code", last_seen_at: 9.days.ago }
|
||||||
|
fab!(:user3) { Fabricate :user, username: "mrorange", name: "Tim Roth", last_seen_at: 8.days.ago }
|
||||||
|
fab!(:user4) { Fabricate :user, username: "mrpink", name: "Steve Buscemi", last_seen_at: 7.days.ago }
|
||||||
|
fab!(:user5) { Fabricate :user, username: "mrbrown", name: "Quentin Tarantino", last_seen_at: 6.days.ago }
|
||||||
|
fab!(:user6) { Fabricate :user, username: "mrwhite", name: "Harvey Keitel", last_seen_at: 5.days.ago }
|
||||||
|
fab!(:inactive) { Fabricate :user, username: "Ghost", active: false }
|
||||||
|
fab!(:admin) { Fabricate :admin, username: "theadmin" }
|
||||||
|
fab!(:moderator) { Fabricate :moderator, username: "themod" }
|
||||||
|
fab!(:staged) { Fabricate :staged }
|
||||||
|
|
||||||
def search_for(*args)
|
def search_for(*args)
|
||||||
UserSearch.new(*args).search
|
UserSearch.new(*args).search
|
||||||
@ -90,23 +89,17 @@ describe UserSearch do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context "with seed data" do
|
context "with seed data" do
|
||||||
|
fab!(:post1) { Fabricate :post, user: user1, topic: topic }
|
||||||
|
fab!(:post2) { Fabricate :post, user: user2, topic: topic2 }
|
||||||
|
fab!(:post3) { Fabricate :post, user: user3, topic: topic }
|
||||||
|
fab!(:post4) { Fabricate :post, user: user4, topic: topic }
|
||||||
|
fab!(:post5) { Fabricate :post, user: user5, topic: topic3 }
|
||||||
|
fab!(:post6) { Fabricate :post, user: user6, topic: topic }
|
||||||
|
fab!(:post7) { Fabricate :post, user: staged, topic: topic4 }
|
||||||
|
|
||||||
before do
|
before { user6.update(suspended_at: 1.day.ago, suspended_till: 1.year.from_now) }
|
||||||
|
|
||||||
Fabricate :post, user: user1, topic: topic
|
it "can search by name and username" do
|
||||||
Fabricate :post, user: user2, topic: topic2
|
|
||||||
Fabricate :post, user: user3, topic: topic
|
|
||||||
Fabricate :post, user: user4, topic: topic
|
|
||||||
Fabricate :post, user: user5, topic: topic3
|
|
||||||
Fabricate :post, user: user6, topic: topic
|
|
||||||
Fabricate :post, user: staged, topic: topic4
|
|
||||||
|
|
||||||
user6.update(suspended_at: 1.day.ago, suspended_till: 1.year.from_now)
|
|
||||||
end
|
|
||||||
|
|
||||||
# this is a seriously expensive integration test,
|
|
||||||
# re-creating this entire test db is too expensive reuse
|
|
||||||
it "operates correctly" do
|
|
||||||
# normal search
|
# normal search
|
||||||
results = search_for(user1.name.split(" ").first)
|
results = search_for(user1.name.split(" ").first)
|
||||||
expect(results.size).to eq(1)
|
expect(results.size).to eq(1)
|
||||||
@ -126,7 +119,9 @@ describe UserSearch do
|
|||||||
results = search_for(user4.username.upcase)
|
results = search_for(user4.username.upcase)
|
||||||
expect(results.size).to eq(1)
|
expect(results.size).to eq(1)
|
||||||
expect(results.first).to eq(user4)
|
expect(results.first).to eq(user4)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "handles substring search correctly" do
|
||||||
# substrings
|
# substrings
|
||||||
# only staff members see suspended users in results
|
# only staff members see suspended users in results
|
||||||
results = search_for("mr")
|
results = search_for("mr")
|
||||||
@ -147,7 +142,9 @@ describe UserSearch do
|
|||||||
|
|
||||||
results = search_for("MRB", searching_user: admin, limit: 2)
|
results = search_for("MRB", searching_user: admin, limit: 2)
|
||||||
expect(results.size).to eq(2)
|
expect(results.size).to eq(2)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "prioritises topic participants" do
|
||||||
# topic priority
|
# topic priority
|
||||||
results = search_for(user1.username, topic_id: topic.id)
|
results = search_for(user1.username, topic_id: topic.id)
|
||||||
expect(results.first).to eq(user1)
|
expect(results.first).to eq(user1)
|
||||||
@ -157,7 +154,9 @@ describe UserSearch do
|
|||||||
|
|
||||||
results = search_for(user1.username, topic_id: topic3.id)
|
results = search_for(user1.username, topic_id: topic3.id)
|
||||||
expect(results[1]).to eq(user5)
|
expect(results[1]).to eq(user5)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "only searches by name when enabled" do
|
||||||
# When searching by name is enabled, it returns the record
|
# When searching by name is enabled, it returns the record
|
||||||
SiteSetting.enable_names = true
|
SiteSetting.enable_names = true
|
||||||
results = search_for("Tarantino")
|
results = search_for("Tarantino")
|
||||||
@ -173,11 +172,15 @@ describe UserSearch do
|
|||||||
SiteSetting.enable_names = false
|
SiteSetting.enable_names = false
|
||||||
results = search_for("Tarantino")
|
results = search_for("Tarantino")
|
||||||
expect(results.size).to eq(0)
|
expect(results.size).to eq(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "prioritises exact matches" do
|
||||||
# find an exact match first
|
# find an exact match first
|
||||||
results = search_for("mrB")
|
results = search_for("mrB")
|
||||||
expect(results.first.username).to eq(user1.username)
|
expect(results.first.username).to eq(user1.username)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not include self, staged or inactive" do
|
||||||
# don't return inactive users
|
# don't return inactive users
|
||||||
results = search_for(inactive.username)
|
results = search_for(inactive.username)
|
||||||
expect(results).to be_blank
|
expect(results).to be_blank
|
||||||
|
Loading…
Reference in New Issue
Block a user