diff options
author | Robert Speicher <rspeicher@gmail.com> | 2015-07-23 17:16:39 -0400 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2015-07-23 17:16:39 -0400 |
commit | 5ce6d18681ee7b74ba0c443672224dd580bd34b0 (patch) | |
tree | c001072e30cfafb32b8ffb0a982476868ca91331 | |
parent | a364d4260d357c10d45108da8f8ab55426c64fa2 (diff) | |
download | gitlab-ce-rs-issue-2012.tar.gz |
Add User.find_by_username!rs-issue-2012
-rw-r--r-- | app/controllers/users_controller.rb | 2 | ||||
-rw-r--r-- | app/models/user.rb | 4 | ||||
-rw-r--r-- | spec/models/user_spec.rb | 12 |
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) } |