1
0
Fork 0
mirror of https://github.com/heartcombo/devise.git synced 2022-11-09 12:18:31 -05:00

Avoid sending confirmations to blank emails.

At times, validations may be skipped and no email address may be
provided. Such an instance comes when testing uniqueness validations of
specific attributes in a Devise model with confirmable, especially when
using Shoulda matchers.
This commit is contained in:
Kramer Campbell 2013-05-22 19:48:06 -07:00
parent 10c9a492ab
commit 17e85aa79d
2 changed files with 20 additions and 3 deletions

View file

@ -227,17 +227,17 @@ module Devise
end end
def postpone_email_change? def postpone_email_change?
postpone = self.class.reconfirmable && email_changed? && !@bypass_postpone postpone = self.class.reconfirmable && email_changed? && !@bypass_postpone && !self.email.blank?
@bypass_postpone = false @bypass_postpone = false
postpone postpone
end end
def reconfirmation_required? def reconfirmation_required?
self.class.reconfirmable && @reconfirmation_required self.class.reconfirmable && @reconfirmation_required && !self.email.blank?
end end
def send_confirmation_notification? def send_confirmation_notification?
confirmation_required? && !@skip_confirmation_notification confirmation_required? && !@skip_confirmation_notification && !self.email.blank?
end end
module ClassMethods module ClassMethods

View file

@ -114,6 +114,14 @@ class ConfirmableTest < ActiveSupport::TestCase
end end
end end
test 'should not send confirmation when no email is provided' do
assert_email_not_sent do
user = new_user
user.email = ''
user.save(:validate => false)
end
end
test 'should find a user to send confirmation instructions' do test 'should find a user to send confirmation instructions' do
user = create_user user = create_user
confirmation_user = User.send_confirmation_instructions(:email => user.email) confirmation_user = User.send_confirmation_instructions(:email => user.email)
@ -337,6 +345,15 @@ class ReconfirmableTest < ActiveSupport::TestCase
end end
end end
test 'should not send confirmation by email after changing to a blank email' do
admin = create_admin
assert admin.confirm!
assert_email_not_sent do
admin.email = ''
admin.save(:validate => false)
end
end
test 'should stay confirmed when email is changed' do test 'should stay confirmed when email is changed' do
admin = create_admin admin = create_admin
assert admin.confirm! assert admin.confirm!