Selectively add reconfirmable field in tests when necessary.
This commit is contained in:
parent
a7c5a2e65d
commit
a1407565c8
|
@ -63,8 +63,12 @@ module Devise
|
|||
unless_confirmed do
|
||||
self.confirmation_token = nil
|
||||
self.confirmed_at = Time.now
|
||||
self.email = unconfirmed_email if unconfirmed_email.present?
|
||||
self.unconfirmed_email = nil
|
||||
|
||||
if Devise.reconfirmable
|
||||
self.email = unconfirmed_email if unconfirmed_email.present?
|
||||
self.unconfirmed_email = nil
|
||||
end
|
||||
|
||||
save
|
||||
end
|
||||
end
|
||||
|
@ -146,7 +150,7 @@ module Devise
|
|||
# Checks whether the record is confirmed or not or a new email has been added, yielding to the block
|
||||
# if it's already confirmed, otherwise adds an error to email.
|
||||
def unless_confirmed
|
||||
unless confirmed? && unconfirmed_email.blank?
|
||||
unless confirmed? && (Devise.reconfirmable ? unconfirmed_email.blank? : true)
|
||||
yield
|
||||
else
|
||||
self.errors.add(:email, :already_confirmed)
|
||||
|
|
|
@ -38,6 +38,10 @@ module Devise
|
|||
apply_devise_schema :confirmation_token, String
|
||||
apply_devise_schema :confirmed_at, DateTime
|
||||
apply_devise_schema :confirmation_sent_at, DateTime
|
||||
end
|
||||
|
||||
# Creates unconfirmed_email
|
||||
def reconfirmable
|
||||
apply_devise_schema :unconfirmed_email, String
|
||||
end
|
||||
|
||||
|
|
|
@ -186,10 +186,12 @@ class ConfirmationOnChangeTest < ConfirmationTest
|
|||
end
|
||||
|
||||
def setup
|
||||
add_unconfirmed_email_column
|
||||
Devise.reconfirmable = true
|
||||
end
|
||||
|
||||
def teardown
|
||||
remove_unconfirmed_email_column
|
||||
Devise.reconfirmable = false
|
||||
end
|
||||
|
||||
|
|
|
@ -237,12 +237,14 @@ class ConfirmableTest < ActiveSupport::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
class ConfirmableOnChangeTest < ConfirmableTest
|
||||
class ReconfirmableTest < ConfirmableTest
|
||||
def setup
|
||||
add_unconfirmed_email_column
|
||||
Devise.reconfirmable = true
|
||||
end
|
||||
|
||||
def teardown
|
||||
remove_unconfirmed_email_column
|
||||
Devise.reconfirmable = false
|
||||
end
|
||||
|
||||
|
|
|
@ -106,6 +106,8 @@ class ValidatableTest < ActiveSupport::TestCase
|
|||
end
|
||||
|
||||
test 'should check if email is unique in unconfirmed_email column' do
|
||||
add_unconfirmed_email_column
|
||||
|
||||
swap Devise, :reconfirmable => [:username, :email] do
|
||||
user = create_user
|
||||
user.update_attributes({:email => 'new_test@email.com'})
|
||||
|
@ -115,6 +117,8 @@ class ValidatableTest < ActiveSupport::TestCase
|
|||
user = new_user(:email => 'new_test@email.com')
|
||||
assert user.invalid?
|
||||
end
|
||||
|
||||
remove_unconfirmed_email_column
|
||||
end
|
||||
|
||||
test 'shuold not be included in objects with invalid API' do
|
||||
|
|
|
@ -57,4 +57,24 @@ class ActiveSupport::TestCase
|
|||
object.send :"#{key}=", value
|
||||
end
|
||||
end
|
||||
|
||||
def add_unconfirmed_email_column
|
||||
if DEVISE_ORM == :active_record
|
||||
ActiveRecord::Base.connection.add_column(:users, :unconfirmed_email, :string)
|
||||
User.reset_column_information
|
||||
elsif DEVISE_ORM == :mongoid
|
||||
User.field(:unconfirmed_email, :type => String)
|
||||
end
|
||||
end
|
||||
|
||||
def remove_unconfirmed_email_column
|
||||
if DEVISE_ORM == :active_record
|
||||
ActiveRecord::Base.connection.remove_column(:users, :unconfirmed_email)
|
||||
User.reset_column_information
|
||||
elsif DEVISE_ORM == :mongoid
|
||||
User.fields.delete(:unconfirmed_email)
|
||||
User.send(:undefine_attribute_methods)
|
||||
User.send(:define_attribute_methods, User.fields.keys)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue