diff options
author | Steve Halasz <stevehalasz@gmail.com> | 2016-10-27 15:46:28 -0400 |
---|---|---|
committer | Steve Halasz <stevehalasz@gmail.com> | 2016-10-27 15:46:28 -0400 |
commit | 36ec5eaf85702179633e30c1caff747f2b6865f8 (patch) | |
tree | 2c9693fced26f58acd77fe33e9f45ae10fc4b8e2 | |
parent | 132e3f547194de1923db258d4022b7f473f176e0 (diff) | |
download | gitlab-ce-36ec5eaf85702179633e30c1caff747f2b6865f8.tar.gz |
Only show one error message for an invalid email
If notification_email is blank, it's set from email. If an admin
attempted to create a user with an invalid email, an error would be
displayed for both fields. Only validate the notification_email if it's
different from email.
-rw-r--r-- | app/models/user.rb | 4 | ||||
-rw-r--r-- | spec/controllers/admin/users_controller_spec.rb | 11 |
2 files changed, 14 insertions, 1 deletions
diff --git a/app/models/user.rb b/app/models/user.rb index f367f4616fb..ae951f19d24 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -93,8 +93,10 @@ class User < ActiveRecord::Base # # Validations # + # Note: devise :validatable above adds validations for :email and :password validates :name, presence: true - validates :notification_email, presence: true, email: true + validates :notification_email, presence: true + validates :notification_email, email: true, if: ->(user) { user.notification_email != user.email } validates :public_email, presence: true, uniqueness: true, email: true, allow_blank: true validates :bio, length: { maximum: 255 }, allow_blank: true validates :projects_limit, presence: true, numericality: { greater_than_or_equal_to: 0 } diff --git a/spec/controllers/admin/users_controller_spec.rb b/spec/controllers/admin/users_controller_spec.rb index 33fe3c73822..2ab2ca1b667 100644 --- a/spec/controllers/admin/users_controller_spec.rb +++ b/spec/controllers/admin/users_controller_spec.rb @@ -114,6 +114,17 @@ describe Admin::UsersController do end end + describe 'POST create' do + it 'creates the user' do + expect{ post :create, user: attributes_for(:user) }.to change{ User.count }.by(1) + end + + it 'shows only one error message for an invalid email' do + post :create, user: attributes_for(:user, email: 'bogus') + expect(assigns[:user].errors).to contain_exactly("Email is invalid") + end + end + describe 'POST update' do context 'when the password has changed' do def update_password(user, password, password_confirmation = nil) |