91 lines
3.4 KiB
Ruby
91 lines
3.4 KiB
Ruby
|
require 'test_helper'
|
||
|
|
||
|
module ActsAsAuthenticTest
|
||
|
class PerishableTokenTest < ActiveSupport::TestCase
|
||
|
def test_perishable_token_valid_for_config
|
||
|
assert_equal 10.minutes.to_i, User.perishable_token_valid_for
|
||
|
assert_equal 10.minutes.to_i, Employee.perishable_token_valid_for
|
||
|
|
||
|
User.perishable_token_valid_for = 1.hour
|
||
|
assert_equal 1.hour.to_i, User.perishable_token_valid_for
|
||
|
User.perishable_token_valid_for 10.minutes
|
||
|
assert_equal 10.minutes.to_i, User.perishable_token_valid_for
|
||
|
end
|
||
|
|
||
|
def test_disable_perishable_token_maintenance_config
|
||
|
assert !User.disable_perishable_token_maintenance
|
||
|
assert !Employee.disable_perishable_token_maintenance
|
||
|
|
||
|
User.disable_perishable_token_maintenance = true
|
||
|
assert User.disable_perishable_token_maintenance
|
||
|
User.disable_perishable_token_maintenance false
|
||
|
assert !User.disable_perishable_token_maintenance
|
||
|
end
|
||
|
|
||
|
def test_validates_uniqueness_of_perishable_token
|
||
|
u = User.new
|
||
|
u.perishable_token = users(:ben).perishable_token
|
||
|
assert !u.valid?
|
||
|
assert u.errors[:perishable_token].size > 0
|
||
|
end
|
||
|
|
||
|
def test_before_save_reset_perishable_token
|
||
|
ben = users(:ben)
|
||
|
old_perishable_token = ben.perishable_token
|
||
|
assert ben.save
|
||
|
assert_not_equal old_perishable_token, ben.perishable_token
|
||
|
end
|
||
|
|
||
|
def test_reset_perishable_token
|
||
|
ben = users(:ben)
|
||
|
old_perishable_token = ben.perishable_token
|
||
|
|
||
|
assert ben.reset_perishable_token
|
||
|
assert_not_equal old_perishable_token, ben.perishable_token
|
||
|
|
||
|
ben.reload
|
||
|
assert_equal old_perishable_token, ben.perishable_token
|
||
|
|
||
|
assert ben.reset_perishable_token!
|
||
|
assert_not_equal old_perishable_token, ben.perishable_token
|
||
|
|
||
|
ben.reload
|
||
|
assert_not_equal old_perishable_token, ben.perishable_token
|
||
|
end
|
||
|
|
||
|
def test_find_using_perishable_token
|
||
|
ben = users(:ben)
|
||
|
assert_equal ben, User.find_using_perishable_token(ben.perishable_token)
|
||
|
end
|
||
|
|
||
|
def test_find_using_perishable_token_when_perished
|
||
|
ben = users(:ben)
|
||
|
ActiveRecord::Base.connection.execute("UPDATE users set updated_at = '#{1.week.ago.to_s(:db)}' where id = #{ben.id}")
|
||
|
assert_nil User.find_using_perishable_token(ben.perishable_token)
|
||
|
end
|
||
|
|
||
|
def test_find_using_perishable_token_when_perished
|
||
|
User.perishable_token_valid_for = 1.minute
|
||
|
ben = users(:ben)
|
||
|
ActiveRecord::Base.connection.execute("UPDATE users set updated_at = '#{2.minutes.ago.to_s(:db)}' where id = #{ben.id}")
|
||
|
assert_nil User.find_using_perishable_token(ben.perishable_token)
|
||
|
User.perishable_token_valid_for = 10.minutes
|
||
|
end
|
||
|
|
||
|
def test_find_using_perishable_token_when_passing_threshold
|
||
|
User.perishable_token_valid_for = 1.minute
|
||
|
ben = users(:ben)
|
||
|
ActiveRecord::Base.connection.execute("UPDATE users set updated_at = '#{10.minutes.ago.to_s(:db)}' where id = #{ben.id}")
|
||
|
assert_nil User.find_using_perishable_token(ben.perishable_token, 5.minutes)
|
||
|
assert_equal ben, User.find_using_perishable_token(ben.perishable_token, 20.minutes)
|
||
|
User.perishable_token_valid_for = 10.minutes
|
||
|
end
|
||
|
|
||
|
def test_find_perishable_token_with_bang
|
||
|
assert_raises ActiveRecord::RecordNotFound do
|
||
|
User.find_using_perishable_token!('some_bad_value')
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|