2010-03-26 10:27:19 +00:00
|
|
|
require 'test_helper'
|
2009-10-20 02:31:33 +00:00
|
|
|
|
2011-12-04 22:58:19 +00:00
|
|
|
class RememberableTest < ActiveSupport::TestCase
|
|
|
|
def resource_class
|
|
|
|
User
|
|
|
|
end
|
|
|
|
|
|
|
|
def create_resource
|
|
|
|
create_user
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'remember_me should not generate a new token if using salt' do
|
|
|
|
user = create_user
|
|
|
|
user.expects(:valid?).never
|
|
|
|
user.remember_me!
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'forget_me should not clear remember token if using salt' do
|
|
|
|
user = create_user
|
|
|
|
user.remember_me!
|
|
|
|
user.expects(:valid?).never
|
|
|
|
user.forget_me!
|
|
|
|
end
|
|
|
|
|
2013-08-19 18:48:36 +00:00
|
|
|
test 'can generate remember token' do
|
|
|
|
user = create_user
|
|
|
|
user.singleton_class.send(:attr_accessor, :remember_token)
|
|
|
|
User.to_adapter.expects(:find_first).returns(nil)
|
|
|
|
user.remember_me!
|
|
|
|
assert user.remember_token
|
|
|
|
end
|
|
|
|
|
2011-12-04 22:58:19 +00:00
|
|
|
test 'serialize into cookie' do
|
|
|
|
user = create_user
|
|
|
|
user.remember_me!
|
|
|
|
assert_equal [user.to_key, user.authenticatable_salt], User.serialize_into_cookie(user)
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'serialize from cookie' do
|
|
|
|
user = create_user
|
|
|
|
user.remember_me!
|
|
|
|
assert_equal user, User.serialize_from_cookie(user.to_key, user.authenticatable_salt)
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'raises a RuntimeError if authenticatable_salt is nil' do
|
|
|
|
user = User.new
|
|
|
|
user.encrypted_password = nil
|
|
|
|
assert_raise RuntimeError do
|
|
|
|
user.rememberable_value
|
|
|
|
end
|
|
|
|
end
|
2009-10-20 02:31:33 +00:00
|
|
|
|
2010-09-25 10:37:06 +00:00
|
|
|
test 'should respond to remember_me attribute' do
|
|
|
|
assert resource_class.new.respond_to?(:remember_me)
|
|
|
|
assert resource_class.new.respond_to?(:remember_me=)
|
2009-10-20 02:31:33 +00:00
|
|
|
end
|
|
|
|
|
2014-04-04 18:45:52 +00:00
|
|
|
test 'forget_me should clear remember_created_at if expire_all_remember_me_on_sign_out is true' do
|
|
|
|
swap Devise, expire_all_remember_me_on_sign_out: true do
|
|
|
|
resource = create_resource
|
|
|
|
resource.remember_me!
|
|
|
|
assert_not_nil resource.remember_created_at
|
|
|
|
|
|
|
|
resource.forget_me!
|
|
|
|
assert_nil resource.remember_created_at
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'forget_me should not clear remember_created_at if expire_all_remember_me_on_sign_out is false' do
|
|
|
|
swap Devise, expire_all_remember_me_on_sign_out: false do
|
|
|
|
resource = create_resource
|
|
|
|
resource.remember_me!
|
|
|
|
|
|
|
|
assert_not_nil resource.remember_created_at
|
|
|
|
|
|
|
|
resource.forget_me!
|
|
|
|
assert_not_nil resource.remember_created_at
|
|
|
|
end
|
2009-10-22 11:09:34 +00:00
|
|
|
end
|
2012-02-20 11:54:45 +00:00
|
|
|
|
2011-04-23 00:56:54 +00:00
|
|
|
test 'forget_me should not try to update resource if it has been destroyed' do
|
|
|
|
resource = create_resource
|
|
|
|
resource.expects(:remember_created_at).never
|
|
|
|
resource.expects(:save).never
|
2013-04-13 13:57:10 +00:00
|
|
|
|
|
|
|
resource.destroy
|
2011-04-23 00:56:54 +00:00
|
|
|
resource.forget_me!
|
|
|
|
end
|
2009-10-22 11:09:34 +00:00
|
|
|
|
2010-09-25 10:37:06 +00:00
|
|
|
test 'remember is expired if not created at timestamp is set' do
|
|
|
|
assert create_resource.remember_expired?
|
2009-10-20 02:31:33 +00:00
|
|
|
end
|
|
|
|
|
2010-09-25 10:37:06 +00:00
|
|
|
test 'serialize should return nil if no resource is found' do
|
2010-10-03 17:37:40 +00:00
|
|
|
assert_nil resource_class.serialize_from_cookie([0], "123")
|
2009-10-20 02:31:33 +00:00
|
|
|
end
|
2009-10-20 10:59:01 +00:00
|
|
|
|
2010-09-25 10:37:06 +00:00
|
|
|
test 'remember me return nil if is a valid resource with invalid token' do
|
|
|
|
resource = create_resource
|
2010-10-03 17:37:40 +00:00
|
|
|
assert_nil resource_class.serialize_from_cookie([resource.id], "123")
|
2009-10-20 10:59:01 +00:00
|
|
|
end
|
2009-10-22 11:09:34 +00:00
|
|
|
|
|
|
|
test 'remember for should fallback to devise remember for default configuration' do
|
2014-02-25 16:42:55 +00:00
|
|
|
swap Devise, remember_for: 1.day do
|
2010-09-25 10:37:06 +00:00
|
|
|
resource = create_resource
|
|
|
|
resource.remember_me!
|
|
|
|
assert_not resource.remember_expired?
|
2009-10-22 11:09:34 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'remember expires at should sum date of creation with remember for configuration' do
|
2014-02-25 16:42:55 +00:00
|
|
|
swap Devise, remember_for: 3.days do
|
2010-09-25 10:37:06 +00:00
|
|
|
resource = create_resource
|
|
|
|
resource.remember_me!
|
|
|
|
assert_equal 3.days.from_now.to_date, resource.remember_expires_at.to_date
|
2009-11-25 01:19:12 +00:00
|
|
|
|
|
|
|
Devise.remember_for = 5.days
|
2010-09-25 10:37:06 +00:00
|
|
|
assert_equal 5.days.from_now.to_date, resource.remember_expires_at.to_date
|
2009-11-25 01:19:12 +00:00
|
|
|
end
|
2009-10-22 11:09:34 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
test 'remember should be expired if remember_for is zero' do
|
2014-02-25 16:42:55 +00:00
|
|
|
swap Devise, remember_for: 0.days do
|
2009-11-25 01:19:12 +00:00
|
|
|
Devise.remember_for = 0.days
|
2010-09-25 10:37:06 +00:00
|
|
|
resource = create_resource
|
|
|
|
resource.remember_me!
|
|
|
|
assert resource.remember_expired?
|
2009-11-25 01:19:12 +00:00
|
|
|
end
|
2009-10-22 11:09:34 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
test 'remember should be expired if it was created before limit time' do
|
2014-02-25 16:42:55 +00:00
|
|
|
swap Devise, remember_for: 1.day do
|
2010-09-25 10:37:06 +00:00
|
|
|
resource = create_resource
|
|
|
|
resource.remember_me!
|
|
|
|
resource.remember_created_at = 2.days.ago
|
|
|
|
resource.save
|
|
|
|
assert resource.remember_expired?
|
2009-11-25 01:19:12 +00:00
|
|
|
end
|
2009-10-22 11:09:34 +00:00
|
|
|
end
|
|
|
|
|
2013-04-18 04:54:38 +00:00
|
|
|
test 'remember should not be expired if it was created within the limit time' do
|
2014-02-25 16:42:55 +00:00
|
|
|
swap Devise, remember_for: 30.days do
|
2010-09-25 10:37:06 +00:00
|
|
|
resource = create_resource
|
|
|
|
resource.remember_me!
|
|
|
|
resource.remember_created_at = (30.days.ago + 2.minutes)
|
|
|
|
resource.save
|
|
|
|
assert_not resource.remember_expired?
|
2009-11-25 01:19:12 +00:00
|
|
|
end
|
2009-10-22 11:09:34 +00:00
|
|
|
end
|
2010-06-30 01:54:19 +00:00
|
|
|
|
2010-07-23 14:31:42 +00:00
|
|
|
test 'if extend_remember_period is false, remember_me! should generate a new timestamp if expired' do
|
2014-02-25 16:42:55 +00:00
|
|
|
swap Devise, remember_for: 5.minutes do
|
2010-09-25 10:37:06 +00:00
|
|
|
resource = create_resource
|
|
|
|
resource.remember_me!(false)
|
|
|
|
assert resource.remember_created_at
|
2010-07-23 14:31:42 +00:00
|
|
|
|
2010-09-25 10:37:06 +00:00
|
|
|
resource.remember_created_at = old = 10.minutes.ago
|
|
|
|
resource.save
|
2010-07-23 14:31:42 +00:00
|
|
|
|
2010-09-25 10:37:06 +00:00
|
|
|
resource.remember_me!(false)
|
|
|
|
assert_not_equal old.to_i, resource.remember_created_at.to_i
|
2010-07-23 14:31:42 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'if extend_remember_period is false, remember_me! should not generate a new timestamp' do
|
2014-02-25 16:42:55 +00:00
|
|
|
swap Devise, remember_for: 1.year do
|
2010-09-25 10:37:06 +00:00
|
|
|
resource = create_resource
|
|
|
|
resource.remember_me!(false)
|
|
|
|
assert resource.remember_created_at
|
2010-07-23 14:31:42 +00:00
|
|
|
|
2010-09-25 10:37:06 +00:00
|
|
|
resource.remember_created_at = old = 10.minutes.ago.utc
|
|
|
|
resource.save
|
2010-07-23 14:31:42 +00:00
|
|
|
|
2010-09-25 10:37:06 +00:00
|
|
|
resource.remember_me!(false)
|
|
|
|
assert_equal old.to_i, resource.remember_created_at.to_i
|
2010-07-23 14:31:42 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'if extend_remember_period is true, remember_me! should always generate a new timestamp' do
|
2014-02-25 16:42:55 +00:00
|
|
|
swap Devise, remember_for: 1.year do
|
2010-09-25 10:37:06 +00:00
|
|
|
resource = create_resource
|
|
|
|
resource.remember_me!(true)
|
|
|
|
assert resource.remember_created_at
|
2010-07-23 14:31:42 +00:00
|
|
|
|
2010-09-25 10:37:06 +00:00
|
|
|
resource.remember_created_at = old = 10.minutes.ago
|
|
|
|
resource.save
|
2010-07-23 14:31:42 +00:00
|
|
|
|
2010-09-25 10:37:06 +00:00
|
|
|
resource.remember_me!(true)
|
|
|
|
assert_not_equal old, resource.remember_created_at
|
2010-07-23 14:31:42 +00:00
|
|
|
end
|
|
|
|
end
|
2012-02-20 11:54:45 +00:00
|
|
|
|
2013-04-18 04:54:38 +00:00
|
|
|
test 'should have the required_fields array' do
|
2012-02-20 11:54:45 +00:00
|
|
|
assert_same_content Devise::Models::Rememberable.required_fields(User), [
|
2012-03-30 07:13:28 +00:00
|
|
|
:remember_created_at
|
2012-02-20 11:54:45 +00:00
|
|
|
]
|
|
|
|
end
|
2010-09-25 10:37:06 +00:00
|
|
|
end
|