Restructuring directories for models and mailers.

This commit is contained in:
Carlos A. da Silva
2009-09-20 10:35:26 -03:00
parent 8e0c38b47a
commit 3655fe9096
15 changed files with 11 additions and 17 deletions

View 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

View 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

View 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

View 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

View 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