From 961d87937b55535ff3ffd041dbc78af82d644daa Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Wed, 26 Mar 2014 12:44:00 +0100 Subject: [PATCH 1/3] Add the tests for user search. --- spec/models/user_spec.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index fd8d7133ae..cb0bf9ba51 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -292,6 +292,18 @@ describe User do end end + describe 'search' do + let(:user1) { create(:user, username: 'James', email: 'james@testing.com') } + let(:user2) { create(:user, username: 'jameson', email: 'jameson@example.com') } + + it "should be case insensitive" do + User.search(user1.username.upcase).to_a.should == [user1] + User.search(user1.username.downcase).to_a.should == [user1] + User.search(user2.username.upcase).to_a.should == [user2] + User.search(user2.username.downcase).to_a.should == [user2] + end + end + describe 'by_username_or_id' do let(:user1) { create(:user, username: 'foo') } From 1aabfcb92d41f690e6756a7f057e85f17e30a0db Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Wed, 26 Mar 2014 12:45:39 +0100 Subject: [PATCH 2/3] Change the user search query to be case insensitive. --- CHANGELOG | 1 + app/models/user.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 0b295e4d75..06d19df7a3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ v 6.8.0 - Ability to at mention users that are participating in issue and merge req. discussion - 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) + - Make user search case-insensitive (Christopher Arnold) v 6.7.2 - Fix upgrader script diff --git a/app/models/user.rb b/app/models/user.rb index d9f420759d..25c10a6faa 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -204,7 +204,7 @@ class User < ActiveRecord::Base end def search query - where("name LIKE :query OR email LIKE :query OR username LIKE :query", query: "%#{query}%") + where("lower(name) LIKE :query OR lower(email) LIKE :query OR lower(username) LIKE :query", query: "%#{query.downcase}%") end def by_username_or_id(name_or_id) From 466203eb0c386b4b64512dc44cf7efa6221718df Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Wed, 26 Mar 2014 12:56:25 +0100 Subject: [PATCH 3/3] Additional check in the test. --- spec/models/user_spec.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index cb0bf9ba51..fef6314f23 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -301,6 +301,8 @@ describe User do User.search(user1.username.downcase).to_a.should == [user1] User.search(user2.username.upcase).to_a.should == [user2] User.search(user2.username.downcase).to_a.should == [user2] + User.search(user1.username.downcase).to_a.count.should == 2 + User.search(user2.username.downcase).to_a.count.should == 1 end end