summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Speicher <rspeicher@gmail.com>2015-07-23 17:16:39 -0400
committerRobert Speicher <rspeicher@gmail.com>2015-07-23 17:16:39 -0400
commit5ce6d18681ee7b74ba0c443672224dd580bd34b0 (patch)
treec001072e30cfafb32b8ffb0a982476868ca91331
parenta364d4260d357c10d45108da8f8ab55426c64fa2 (diff)
downloadgitlab-ce-rs-issue-2012.tar.gz
Add User.find_by_username!rs-issue-2012
-rw-r--r--app/controllers/users_controller.rb2
-rw-r--r--app/models/user.rb4
-rw-r--r--spec/models/user_spec.rb12
3 files changed, 17 insertions, 1 deletions
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index a67325ae659..2bb5c338cf6 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -50,7 +50,7 @@ class UsersController < ApplicationController
private
def set_user
- @user = User.find_by!('lower(username) = ?', params[:username].downcase)
+ @user = User.find_by_username!(params[:username])
unless current_user || @user.public_profile?
return authenticate_user!
diff --git a/app/models/user.rb b/app/models/user.rb
index fb330ff7185..4a10520b209 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -274,6 +274,10 @@ class User < ActiveRecord::Base
value: login.to_s.downcase).first
end
+ def find_by_username!(username)
+ find_by!('lower(username) = ?', username.downcase)
+ end
+
def by_username_or_id(name_or_id)
where('users.username = ? OR users.id = ?', name_or_id.to_s, name_or_id.to_i).first
end
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 16902317f10..76f16323e2f 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -442,6 +442,18 @@ describe User do
end
end
+ describe '.find_by_username!' do
+ it 'raises RecordNotFound' do
+ expect { described_class.find_by_username!('JohnDoe') }.
+ to raise_error(ActiveRecord::RecordNotFound)
+ end
+
+ it 'is case-insensitive' do
+ user = create(:user, username: 'JohnDoe')
+ expect(described_class.find_by_username!('JOHNDOE')).to eq user
+ end
+ end
+
describe 'all_ssh_keys' do
it { is_expected.to have_many(:keys).dependent(:destroy) }