diff options
author | Douwe Maan <douwe@gitlab.com> | 2015-07-24 09:29:58 +0000 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2015-07-24 09:29:58 +0000 |
commit | 0c1d912559fa1cd6b209af609ee192a5cd10c455 (patch) | |
tree | a314504cb9ca6a1d9d92a0a70b67b042d3e2ea94 | |
parent | 7e262ebf157f2af4658485aae7073d315648cfa7 (diff) | |
parent | 5ce6d18681ee7b74ba0c443672224dd580bd34b0 (diff) | |
download | gitlab-ce-0c1d912559fa1cd6b209af609ee192a5cd10c455.tar.gz |
Merge branch 'rs-issue-2012' into 'master'
Make username parameter for Users#show case-insensitive
Closes #2012
See merge request !996
-rw-r--r-- | app/models/user.rb | 4 | ||||
-rw-r--r-- | spec/controllers/users_controller_spec.rb | 35 | ||||
-rw-r--r-- | spec/models/user_spec.rb | 12 |
3 files changed, 41 insertions, 10 deletions
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/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index d47a37914df..9f89101d7f7 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -1,25 +1,38 @@ require 'spec_helper' describe UsersController do - let(:user) { create(:user, username: 'user1', name: 'User 1', email: 'user1@gitlab.com') } - - before do - sign_in(user) - end + let(:user) { create(:user) } describe 'GET #show' do - render_views + it 'is case-insensitive' do + user = create(:user, username: 'CamelCaseUser') + sign_in(user) + + get :show, username: user.username.downcase - it 'renders the show template' do - get :show, username: user.username - expect(response.status).to eq(200) - expect(response).to render_template('show') + expect(response).to be_success + end + + context 'with rendered views' do + render_views + + it 'renders the show template' do + sign_in(user) + + get :show, username: user.username + + expect(response).to be_success + expect(response).to render_template('show') + end end end describe 'GET #calendar' do it 'renders calendar' do + sign_in(user) + get :calendar, username: user.username + expect(response).to render_template('calendar') end end @@ -30,6 +43,8 @@ describe UsersController do before do allow_any_instance_of(User).to receive(:contributed_projects_ids).and_return([project.id]) + + sign_in(user) project.team << [user, :developer] 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) } |