Commit 7ddbc92abcade8e5b1810f7d4a2b863e7ce74e94

Authored by Dmitriy Zaporozhets
2 parents afcaf662 466203eb

Merge branch 'case_insensitive_user_search' into 'master'

Case insensitive user search

As per implementation by Christopher Arnold.
1 v 6.8.0 1 v 6.8.0
2 - Ability to at mention users that are participating in issue and merge req. discussion 2 - Ability to at mention users that are participating in issue and merge req. discussion
3 - Enabled GZip Compression for assets in example Nginx, make sure that Nginx is compiled with --with-http_gzip_static_module flag (this is default in Ubuntu) 3 - Enabled GZip Compression for assets in example Nginx, make sure that Nginx is compiled with --with-http_gzip_static_module flag (this is default in Ubuntu)
  4 + - Make user search case-insensitive (Christopher Arnold)
4 5
5 v 6.7.2 6 v 6.7.2
6 - Fix upgrader script 7 - Fix upgrader script
app/models/user.rb
@@ -204,7 +204,7 @@ class User < ActiveRecord::Base @@ -204,7 +204,7 @@ class User < ActiveRecord::Base
204 end 204 end
205 205
206 def search query 206 def search query
207 - where("name LIKE :query OR email LIKE :query OR username LIKE :query", query: "%#{query}%") 207 + where("lower(name) LIKE :query OR lower(email) LIKE :query OR lower(username) LIKE :query", query: "%#{query.downcase}%")
208 end 208 end
209 209
210 def by_username_or_id(name_or_id) 210 def by_username_or_id(name_or_id)
spec/models/user_spec.rb
@@ -292,6 +292,20 @@ describe User do @@ -292,6 +292,20 @@ describe User do
292 end 292 end
293 end 293 end
294 294
  295 + describe 'search' do
  296 + let(:user1) { create(:user, username: 'James', email: 'james@testing.com') }
  297 + let(:user2) { create(:user, username: 'jameson', email: 'jameson@example.com') }
  298 +
  299 + it "should be case insensitive" do
  300 + User.search(user1.username.upcase).to_a.should == [user1]
  301 + User.search(user1.username.downcase).to_a.should == [user1]
  302 + User.search(user2.username.upcase).to_a.should == [user2]
  303 + User.search(user2.username.downcase).to_a.should == [user2]
  304 + User.search(user1.username.downcase).to_a.count.should == 2
  305 + User.search(user2.username.downcase).to_a.count.should == 1
  306 + end
  307 + end
  308 +
295 describe 'by_username_or_id' do 309 describe 'by_username_or_id' do
296 let(:user1) { create(:user, username: 'foo') } 310 let(:user1) { create(:user, username: 'foo') }
297 311