mirror of
https://github.com/heartcombo/devise.git
synced 2026-04-28 03:00:29 -04:00
Restructuring directories for models and mailers.
This commit is contained in:
123
test/models/authenticable_test.rb
Normal file
123
test/models/authenticable_test.rb
Normal file
@@ -0,0 +1,123 @@
|
||||
require 'test_helper'
|
||||
require 'digest/sha1'
|
||||
|
||||
class AuthenticableTest < ActiveSupport::TestCase
|
||||
|
||||
test 'should respond to password and password confirmation' do
|
||||
user = new_user
|
||||
assert user.respond_to?(:password)
|
||||
assert user.respond_to?(:password_confirmation)
|
||||
end
|
||||
|
||||
test 'should have email acessible' do
|
||||
assert field_accessible?(:email)
|
||||
end
|
||||
|
||||
test 'should have password acessible' do
|
||||
assert field_accessible?(:password)
|
||||
end
|
||||
|
||||
test 'should have password confirmation accessible' do
|
||||
assert field_accessible?(:password_confirmation)
|
||||
end
|
||||
|
||||
test 'should not have password salt accessible' do
|
||||
assert_not field_accessible?(:password_salt)
|
||||
end
|
||||
|
||||
test 'should not have encrypted password accessible' do
|
||||
assert_not field_accessible?(:encrypted_password)
|
||||
end
|
||||
|
||||
test 'should generate password salt after set the password' do
|
||||
assert_present new_user.password_salt
|
||||
assert_present create_user.password_salt
|
||||
end
|
||||
|
||||
test 'should not generate salt while setting password to nil or blank string' do
|
||||
assert_nil new_user(:password => nil).password_salt
|
||||
assert_nil new_user(:password => '').password_salt
|
||||
end
|
||||
|
||||
test 'should not change password salt when updating' do
|
||||
user = create_user
|
||||
salt = user.password_salt
|
||||
user.expects(:password_salt=).never
|
||||
user.save!
|
||||
assert_equal salt, user.password_salt
|
||||
end
|
||||
|
||||
test 'should generate a sha1 hash for password salt' do
|
||||
now = Time.now
|
||||
Time.stubs(:now).returns(now)
|
||||
User.any_instance.stubs(:random_string).returns('random_string')
|
||||
user = create_user
|
||||
expected_salt = ::Digest::SHA1.hexdigest("--#{now.utc}--random_string--123456--")
|
||||
assert_equal expected_salt, user.password_salt
|
||||
end
|
||||
|
||||
test 'should never generate the same salt for different users' do
|
||||
password_salts = []
|
||||
10.times do
|
||||
salt = new_user.password_salt
|
||||
assert !password_salts.include?(salt)
|
||||
password_salts << salt
|
||||
end
|
||||
end
|
||||
|
||||
test 'should generate encrypted password after setting a password' do
|
||||
assert_present new_user.encrypted_password
|
||||
assert_present create_user.encrypted_password
|
||||
end
|
||||
|
||||
test 'should not generate encrypted password while setting password to nil or blank string' do
|
||||
assert_nil new_user(:password => nil).encrypted_password
|
||||
assert_nil new_user(:password => '').encrypted_password
|
||||
end
|
||||
|
||||
test 'should not encrypt password if it didn\'t change' do
|
||||
user = create_user
|
||||
encrypted_password = user.encrypted_password
|
||||
user.expects(:encrypted_password=).never
|
||||
user.password = '123456'
|
||||
assert_equal encrypted_password, user.encrypted_password
|
||||
end
|
||||
|
||||
test 'should encrypt password again if password has changed' do
|
||||
user = create_user
|
||||
encrypted_password = user.encrypted_password
|
||||
user.password = 'new_password'
|
||||
assert_not_equal encrypted_password, user.encrypted_password
|
||||
end
|
||||
|
||||
test 'should encrypt password using a sha1 hash' do
|
||||
digest_key = Devise::Authenticable::SECURE_AUTH_SITE_KEY
|
||||
user = create_user
|
||||
expected_password = ::Digest::SHA1.hexdigest("--#{user.password_salt}--#{digest_key}--123456--")
|
||||
assert_equal expected_password, user.encrypted_password
|
||||
end
|
||||
|
||||
test 'should test for a valid password' do
|
||||
user = create_user
|
||||
assert user.valid_password?('123456')
|
||||
assert_not user.valid_password?('654321')
|
||||
end
|
||||
|
||||
test 'should authenticate a valid user with email and password and return it' do
|
||||
user = create_user
|
||||
authenticated_user = User.authenticate(user.email, user.password)
|
||||
assert_equal authenticated_user, user
|
||||
end
|
||||
|
||||
test 'should return nil when authenticating an invalid user by email' do
|
||||
user = create_user
|
||||
authenticated_user = User.authenticate('another.email@email.com', user.password)
|
||||
assert_nil authenticated_user
|
||||
end
|
||||
|
||||
test 'should return nil when authenticating an invalid user by password' do
|
||||
user = create_user
|
||||
authenticated_user = User.authenticate(user.email, 'another_password')
|
||||
assert_nil authenticated_user
|
||||
end
|
||||
end
|
||||
94
test/models/confirmable_test.rb
Normal file
94
test/models/confirmable_test.rb
Normal file
@@ -0,0 +1,94 @@
|
||||
require 'test_helper'
|
||||
|
||||
class ConfirmableTest < ActiveSupport::TestCase
|
||||
|
||||
def setup
|
||||
# Todo: refactor this!
|
||||
User.send :include, ::Devise::Confirmable unless User.included_modules.include?(::Devise::Confirmable)
|
||||
setup_mailer
|
||||
end
|
||||
|
||||
test 'should not have confirmed at accessible' do
|
||||
assert_not field_accessible?(:confirmed_at)
|
||||
end
|
||||
|
||||
test 'should confirm a user updating confirmed at' do
|
||||
user = create_user
|
||||
assert_nil user.confirmed_at
|
||||
assert user.confirm!
|
||||
assert_not_nil user.confirmed_at
|
||||
end
|
||||
|
||||
test 'should verify whether a user is confirmed or not' do
|
||||
assert_not new_user.confirmed?
|
||||
user = create_user
|
||||
assert_not user.confirmed?
|
||||
user.confirm!
|
||||
assert user.confirmed?
|
||||
end
|
||||
|
||||
test 'should not confirm a user already confirmed and add an error to email' do
|
||||
user = create_user
|
||||
assert user.confirm!
|
||||
assert_nil user.errors[:email]
|
||||
assert_not user.confirm!
|
||||
assert_not_nil user.errors[:email]
|
||||
assert_equal 'already confirmed', user.errors[:email]
|
||||
end
|
||||
|
||||
test 'should find and confirm an user automatically' do
|
||||
user = create_user
|
||||
confirmed_user = User.find_and_confirm(user.perishable_token)
|
||||
assert_not_nil confirmed_user
|
||||
assert_equal confirmed_user, user
|
||||
assert user.reload.confirmed?
|
||||
end
|
||||
|
||||
test 'should return a new user with errors if no user exists while trying to confirm' do
|
||||
confirmed_user = User.find_and_confirm('invalid_perishable_token')
|
||||
assert confirmed_user.new_record?
|
||||
end
|
||||
|
||||
test 'should return errors for a new user when trying to confirm' do
|
||||
confirmed_user = User.find_and_confirm('invalid_perishable_token')
|
||||
assert_not_nil confirmed_user.errors[:perishable_token]
|
||||
assert_equal "invalid confirmation", confirmed_user.errors[:perishable_token]
|
||||
end
|
||||
|
||||
test 'should generate errors for a user email if user is already confirmed' do
|
||||
user = create_user
|
||||
user.confirm!
|
||||
confirmed_user = User.find_and_confirm(user.perishable_token)
|
||||
assert confirmed_user.confirmed?
|
||||
assert confirmed_user.errors[:email]
|
||||
end
|
||||
|
||||
test 'should not authenticate a user not confirmed' do
|
||||
user = create_user
|
||||
authenticated_user = User.authenticate(user.email, user.password)
|
||||
assert_nil authenticated_user
|
||||
end
|
||||
|
||||
test 'should authenticate a confirmed user' do
|
||||
user = create_user
|
||||
user.confirm!
|
||||
authenticated_user = User.authenticate(user.email, user.password)
|
||||
assert_not_nil authenticated_user
|
||||
assert_equal authenticated_user, user
|
||||
end
|
||||
|
||||
test 'should send confirmation instructions by email' do
|
||||
assert_email_sent do
|
||||
create_user
|
||||
end
|
||||
end
|
||||
|
||||
test 'should not send confirmation when trying to save an invalid user' do
|
||||
assert_email_not_sent do
|
||||
user = new_user
|
||||
user.stubs(:valid?).returns(false)
|
||||
user.save
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
64
test/models/perishable_test.rb
Normal file
64
test/models/perishable_test.rb
Normal file
@@ -0,0 +1,64 @@
|
||||
require 'test_helper'
|
||||
|
||||
class PerishableTest < ActiveSupport::TestCase
|
||||
|
||||
def setup
|
||||
User.send :include, ::Devise::Perishable unless User.included_modules.include?(::Devise::Perishable)
|
||||
end
|
||||
|
||||
test 'should not have perishable token accessible' do
|
||||
assert_not field_accessible?(:perishable_token)
|
||||
end
|
||||
|
||||
test 'should generate perishable token after creating a record' do
|
||||
assert_nil new_user.perishable_token
|
||||
assert_not_nil create_user.perishable_token
|
||||
end
|
||||
|
||||
test 'should reset perisable token each time' do
|
||||
user = new_user
|
||||
3.times do
|
||||
token = user.perishable_token
|
||||
user.reset_perishable_token
|
||||
assert_not_equal token, user.perishable_token
|
||||
end
|
||||
end
|
||||
|
||||
test 'should reset perishable token and save the record' do
|
||||
user = new_user
|
||||
user.reset_perishable_token!
|
||||
assert !user.new_record?
|
||||
end
|
||||
|
||||
test 'should save without validations when reseting perisable token' do
|
||||
user = new_user
|
||||
user.expects(:valid?).never
|
||||
user.reset_perishable_token!
|
||||
end
|
||||
|
||||
test 'should never generate the same perishable token for different users' do
|
||||
perishable_tokens = []
|
||||
10.times do
|
||||
token = create_user.perishable_token
|
||||
assert !perishable_tokens.include?(token)
|
||||
perishable_tokens << token
|
||||
end
|
||||
end
|
||||
|
||||
test 'should not change perishable token when updating' do
|
||||
user = create_user
|
||||
token = user.perishable_token
|
||||
user.expects(:perishable_token=).never
|
||||
user.save!
|
||||
assert_equal token, user.perishable_token
|
||||
end
|
||||
|
||||
test 'should generate a sha1 hash for perishable token' do
|
||||
now = Time.now
|
||||
Time.stubs(:now).returns(now)
|
||||
User.any_instance.stubs(:random_string).returns('random_string')
|
||||
expected_token = ::Digest::SHA1.hexdigest("--#{now.utc}--random_string--123456--")
|
||||
user = create_user
|
||||
assert_equal expected_token, user.perishable_token
|
||||
end
|
||||
end
|
||||
90
test/models/recoverable_test.rb
Normal file
90
test/models/recoverable_test.rb
Normal file
@@ -0,0 +1,90 @@
|
||||
require 'test_helper'
|
||||
|
||||
class RecoverableTest < ActiveSupport::TestCase
|
||||
|
||||
def setup
|
||||
User.send :include, ::Devise::Recoverable unless User.included_modules.include?(::Devise::Recoverable)
|
||||
@user = create_user
|
||||
setup_mailer
|
||||
end
|
||||
|
||||
test 'should reset password and password confirmation from params' do
|
||||
@user.reset_password('56789', '98765')
|
||||
assert_equal '56789', @user.password
|
||||
assert_equal '98765', @user.password_confirmation
|
||||
end
|
||||
|
||||
test 'should reset password and save the record' do
|
||||
assert @user.reset_password!('56789', '56789')
|
||||
end
|
||||
|
||||
test 'should not reset password with invalid data' do
|
||||
@user.stubs(:valid?).returns(false)
|
||||
assert_not @user.reset_password!('56789', '98765')
|
||||
end
|
||||
|
||||
test 'should reset perishable token and send instructions by email' do
|
||||
assert_email_sent do
|
||||
token = @user.perishable_token
|
||||
@user.send_reset_password_instructions
|
||||
assert_not_equal token, @user.perishable_token
|
||||
end
|
||||
end
|
||||
|
||||
test 'should find a user to send instructions by email' do
|
||||
reset_password_user = User.find_and_send_reset_password_instructions(@user.email)
|
||||
assert_not_nil reset_password_user
|
||||
assert_equal reset_password_user, @user
|
||||
end
|
||||
|
||||
test 'should return a new user if no email was found' do
|
||||
reset_password_user = User.find_and_send_reset_password_instructions("invalid@email.com")
|
||||
assert_not_nil reset_password_user
|
||||
assert reset_password_user.new_record?
|
||||
end
|
||||
|
||||
test 'should add error to new user email if no email was found' do
|
||||
reset_password_user = User.find_and_send_reset_password_instructions("invalid@email.com")
|
||||
assert reset_password_user.errors[:email]
|
||||
assert_equal 'not found', reset_password_user.errors[:email]
|
||||
end
|
||||
|
||||
test 'should reset perishable token before send the reset instructions email' do
|
||||
token = @user.perishable_token
|
||||
reset_password_user = User.find_and_send_reset_password_instructions(@user.email)
|
||||
assert_not_equal token, @user.reload.perishable_token
|
||||
end
|
||||
|
||||
test 'should send email instructions to the user reset it\'s password' do
|
||||
assert_email_sent do
|
||||
User.find_and_send_reset_password_instructions(@user.email)
|
||||
end
|
||||
end
|
||||
|
||||
test 'should find a user to reset it\'s password based on perishable_token' do
|
||||
reset_password_user = User.find_and_reset_password(@user.perishable_token)
|
||||
assert_not_nil reset_password_user
|
||||
assert_equal reset_password_user, @user
|
||||
end
|
||||
|
||||
test 'should return a new user when trying to reset it\'s password if no perishable_token is found' do
|
||||
reset_password_user = User.find_and_reset_password('invalid_token')
|
||||
assert_not_nil reset_password_user
|
||||
assert reset_password_user.new_record?
|
||||
end
|
||||
|
||||
test 'should add error to new user email if no perishable token was found' do
|
||||
reset_password_user = User.find_and_reset_password("invalid_token")
|
||||
assert reset_password_user.errors[:perishable_token]
|
||||
assert_equal 'invalid confirmation', reset_password_user.errors[:perishable_token]
|
||||
end
|
||||
|
||||
test 'should reset successfully user password given the new password and confirmation' do
|
||||
old_password = @user.password
|
||||
reset_password_user = User.find_and_reset_password(@user.perishable_token, 'new_password', 'new_password')
|
||||
@user.reload
|
||||
assert_not @user.valid_password?(old_password)
|
||||
assert @user.valid_password?('new_password')
|
||||
end
|
||||
end
|
||||
|
||||
104
test/models/validatable_test.rb
Normal file
104
test/models/validatable_test.rb
Normal file
@@ -0,0 +1,104 @@
|
||||
require 'test_helper'
|
||||
|
||||
class ValidatableTest < ActiveSupport::TestCase
|
||||
|
||||
def setup
|
||||
User.send :include, ::Devise::Validatable unless User.included_modules.include?(::Devise::Validatable)
|
||||
end
|
||||
|
||||
test 'should require email to be set' do
|
||||
user = new_user(:email => nil)
|
||||
assert user.invalid?
|
||||
assert user.errors[:email]
|
||||
assert_equal 'can\'t be blank', user.errors[:email]
|
||||
end
|
||||
|
||||
test 'should require uniqueness of email, allowing blank' do
|
||||
existing_user = create_user
|
||||
user = new_user(:email => '')
|
||||
assert user.invalid?
|
||||
assert_not_equal 'has already been taken', user.errors[:email]
|
||||
user.email = existing_user.email
|
||||
assert user.invalid?
|
||||
assert user.errors[:email]
|
||||
assert_equal 1, user.errors[:email].to_a.size
|
||||
assert_equal 'has already been taken', user.errors[:email]
|
||||
end
|
||||
|
||||
test 'should require correct email format, allowing blank' do
|
||||
user = new_user(:email => '')
|
||||
assert user.invalid?
|
||||
assert_not_equal 'is invalid', user.errors[:email]
|
||||
%w(invalid_email_format email@invalid invalid$character@mail.com other@not 123).each do |email|
|
||||
user.email = email
|
||||
assert user.invalid?, 'should be invalid with email ' << email
|
||||
assert user.errors[:email]
|
||||
assert_equal 1, user.errors[:email].to_a.size
|
||||
assert_equal 'is invalid', user.errors[:email]
|
||||
end
|
||||
end
|
||||
|
||||
test 'should accept valid emails' do
|
||||
%w(a.b.c@example.com test_mail@gmail.com any@any.net email@test.br 123@mail.test).each do |email|
|
||||
user = new_user(:email => email)
|
||||
assert user.valid?, 'should be valid with email ' << email
|
||||
assert_nil user.errors[:email]
|
||||
end
|
||||
end
|
||||
|
||||
test 'should require password to be set when creating a new record' do
|
||||
user = new_user(:password => '', :password_confirmation => '')
|
||||
assert user.invalid?
|
||||
assert user.errors[:password]
|
||||
assert_equal 'can\'t be blank', user.errors[:password]
|
||||
end
|
||||
|
||||
test 'should require confirmation to be set when creating a new record' do
|
||||
user = new_user(:password => 'new_password', :password_confirmation => 'blabla')
|
||||
assert user.invalid?
|
||||
assert user.errors[:password]
|
||||
assert_equal 'doesn\'t match confirmation', user.errors[:password]
|
||||
end
|
||||
|
||||
test 'should require password when updating/reseting password' do
|
||||
user = create_user
|
||||
user.password = ''
|
||||
user.password_confirmation = ''
|
||||
assert user.invalid?
|
||||
assert user.errors[:password]
|
||||
assert_equal 'can\'t be blank', user.errors[:password]
|
||||
end
|
||||
|
||||
test 'should require confirmation when updating/reseting password' do
|
||||
user = create_user
|
||||
user.password_confirmation = 'another_password'
|
||||
assert user.invalid?
|
||||
assert user.errors[:password]
|
||||
assert_equal 'doesn\'t match confirmation', user.errors[:password]
|
||||
end
|
||||
|
||||
test 'should require a password with minimum of 6 characters' do
|
||||
user = new_user(:password => '12345', :password_confirmation => '12345')
|
||||
assert user.invalid?
|
||||
assert user.errors[:password]
|
||||
assert_equal 'is too short (minimum is 6 characters)', user.errors[:password]
|
||||
end
|
||||
|
||||
test 'should require a password with maximum of 20 characters long' do
|
||||
user = new_user(:password => 'x'*21, :password_confirmation => 'x'*21)
|
||||
assert user.invalid?
|
||||
assert user.errors[:password]
|
||||
assert_equal 'is too long (maximum is 20 characters)', user.errors[:password]
|
||||
end
|
||||
|
||||
test 'should not require password length when it\'s not changed' do
|
||||
user = create_user.reload
|
||||
user.password = user.password_confirmation = nil
|
||||
assert user.valid?
|
||||
user.password_confirmation = 'confirmation'
|
||||
assert user.invalid?
|
||||
assert user.errors[:password]
|
||||
assert_not user.errors[:password].to_a.include?('is too short (minimum is 6 characters)')
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user