2009-09-17 08:24:33 -04:00
|
|
|
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)
|
|
|
|
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)
|
2009-09-17 10:06:46 -04:00
|
|
|
User.any_instance.stubs(:random_string).returns('random_string')
|
|
|
|
expected_salt = ::Digest::SHA1.hexdigest("--#{now.utc}--random_string--12345--")
|
2009-09-17 08:24:33 -04:00
|
|
|
user = create_user
|
|
|
|
assert_equal expected_salt, user.password_salt
|
|
|
|
end
|
|
|
|
|
2009-09-17 10:06:46 -04:00
|
|
|
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
|
|
|
|
|
2009-09-17 08:24:33 -04:00
|
|
|
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 = '12345'
|
|
|
|
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 = 'digest_key'
|
|
|
|
user = create_user
|
|
|
|
expected_password = ::Digest::SHA1.hexdigest("--#{user.password_salt}--#{digest_key}--#{12345}--")
|
|
|
|
assert_equal expected_password, user.encrypted_password
|
|
|
|
end
|
2009-09-17 08:46:40 -04:00
|
|
|
|
2009-09-17 10:06:46 -04:00
|
|
|
test 'should test for a valid password' do
|
|
|
|
user = create_user
|
|
|
|
assert user.valid_password?('12345')
|
|
|
|
assert_not user.valid_password?('54321')
|
|
|
|
end
|
|
|
|
|
2009-09-17 08:46:40 -04:00
|
|
|
test 'should authenticate a valid user and return it' do
|
|
|
|
user = create_user
|
|
|
|
authenticated_user = User.authenticate('test@email.com', '12345')
|
|
|
|
assert_equal authenticated_user, user
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'should return nil when authenticating an invalid user' do
|
|
|
|
authenticated_user = User.authenticate('another.email@email.com', '12345')
|
|
|
|
assert_nil authenticated_user
|
|
|
|
end
|
2009-09-17 08:24:33 -04:00
|
|
|
end
|
|
|
|
|