2013-02-07 06:50:59 -05:00
require 'spec_helper'
describe UserSearch do
2014-05-13 11:44:06 -04:00
let ( :topic ) { Fabricate :topic }
let ( :topic2 ) { Fabricate :topic }
let ( :topic3 ) { Fabricate :topic }
2014-05-15 12:22:35 +10:00
let ( :user1 ) { Fabricate :user , username : " mrb " , name : " Michael Madsen " , last_seen_at : 10 . days . ago }
2014-07-05 09:11:41 +10:00
let ( :user2 ) { Fabricate :user , username : " mrblue " , name : " Eddie Code " , last_seen_at : 9 . days . ago }
2014-05-15 12:22:35 +10:00
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 }
2014-08-13 13:30:25 -04:00
let! ( :inactive ) { Fabricate :user , username : " Ghost " , active : false }
2014-05-13 11:44:06 -04:00
let ( :admin ) { Fabricate :admin , username : " theadmin " }
let ( :moderator ) { Fabricate :moderator , username : " themod " }
2013-02-07 06:50:59 -05:00
before do
2014-07-05 09:11:41 +10:00
ActiveRecord :: Base . observers . enable :all
2013-02-07 06:50:59 -05:00
Fabricate :post , user : user1 , topic : topic
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
2014-05-13 11:44:06 -04:00
user6 . update_attributes ( suspended_at : 1 . day . ago , suspended_till : 1 . year . from_now )
2013-02-07 06:50:59 -05:00
end
2013-10-30 15:45:13 -04:00
def search_for ( * args )
UserSearch . new ( * args ) . search
end
2013-04-22 11:05:54 +10:00
# this is a seriously expensive integration test, re-creating this entire test db is too expensive
# reuse
it " operates correctly " do
2014-07-05 09:11:41 +10:00
2013-04-22 11:05:54 +10:00
# normal search
2013-10-30 15:45:13 -04:00
results = search_for ( user1 . name . split ( " " ) . first )
2013-04-22 11:05:54 +10:00
results . size . should == 1
results . first . should == user1
# lower case
2013-10-30 15:45:13 -04:00
results = search_for ( user1 . name . split ( " " ) . first . downcase )
2013-04-22 11:05:54 +10:00
results . size . should == 1
results . first . should == user1
# username
2013-10-30 15:45:13 -04:00
results = search_for ( user4 . username )
2013-04-22 11:05:54 +10:00
results . size . should == 1
results . first . should == user4
# case insensitive
2013-10-30 15:45:13 -04:00
results = search_for ( user4 . username . upcase )
2013-04-22 11:05:54 +10:00
results . size . should == 1
results . first . should == user4
# substrings
2014-05-13 11:44:06 -04:00
# only staff members see suspended users in results
2013-10-30 15:45:13 -04:00
results = search_for ( " mr " )
2014-05-13 11:44:06 -04:00
results . size . should == 5
results . should_not include ( user6 )
search_for ( " mr " , searching_user : user1 ) . size . should == 5
results = search_for ( " mr " , searching_user : admin )
2013-04-22 11:05:54 +10:00
results . size . should == 6
2014-05-13 11:44:06 -04:00
results . should include ( user6 )
search_for ( " mr " , searching_user : moderator ) . size . should == 6
2013-04-22 11:05:54 +10:00
2014-05-13 11:44:06 -04:00
results = search_for ( " mrb " , searching_user : admin )
2013-04-22 11:05:54 +10:00
results . size . should == 3
2014-05-13 11:44:06 -04:00
results = search_for ( " MR " , searching_user : admin )
2013-04-22 11:05:54 +10:00
results . size . should == 6
2014-05-15 12:22:35 +10:00
results = search_for ( " MRB " , searching_user : admin , limit : 2 )
results . size . should == 2
2013-04-22 11:05:54 +10:00
# topic priority
2014-05-13 11:44:06 -04:00
results = search_for ( " mrb " , topic_id : topic . id )
2013-04-22 11:05:54 +10:00
results . first . should == user1
2014-05-13 11:44:06 -04:00
results = search_for ( " mrb " , topic_id : topic2 . id )
2014-05-15 12:22:35 +10:00
results [ 1 ] . should == user2
2013-02-07 06:50:59 -05:00
2014-05-13 11:44:06 -04:00
results = search_for ( " mrb " , topic_id : topic3 . id )
2014-05-15 12:22:35 +10:00
results [ 1 ] . should == user5
2013-10-30 15:45:13 -04:00
# When searching by name is enabled, it returns the record
2014-05-15 12:22:35 +10:00
SiteSetting . enable_names = true
2013-10-30 15:45:13 -04:00
results = search_for ( " Tarantino " )
results . size . should == 1
2014-07-05 09:11:41 +10:00
results = search_for ( " coding " )
results . size . should == 0
results = search_for ( " z " )
results . size . should == 0
2013-10-30 15:45:13 -04:00
# When searching by name is disabled, it will not return the record
2014-05-15 12:22:35 +10:00
SiteSetting . enable_names = false
2013-10-30 15:45:13 -04:00
results = search_for ( " Tarantino " )
results . size . should == 0
2014-05-15 12:22:35 +10:00
# find an exact match first
results = search_for ( " mrB " )
results . first . should == user1
2014-08-13 13:30:25 -04:00
# don't return inactive users
results = search_for ( " Ghost " )
results . should be_blank
2013-02-07 06:50:59 -05:00
end
end