1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
# frozen_string_literal: true
require "cases/helper"
require "models/user"
class SecureTokenTest < ActiveRecord::TestCase
setup do
@user = User.new
end
def test_token_values_are_generated_for_specified_attributes_and_persisted_on_save
@user.save
assert_not_nil @user.token
assert_not_nil @user.auth_token
assert_equal 24, @user.token.size
assert_equal 36, @user.auth_token.size
end
def test_generating_token_on_initialize_does_not_affect_reading_from_the_column
model = Class.new(ActiveRecord::Base) do
self.table_name = "users"
has_secure_token on: :initialize
end
token = "abc123"
user = model.create!(token: token)
assert_equal token, user.token
assert_equal token, user.reload.token
assert_equal token, model.find(user.id).token
end
def test_generating_token_on_initialize_happens_only_once
model = Class.new(ActiveRecord::Base) do
self.table_name = "users"
has_secure_token on: :initialize
end
token = " "
user = model.new
user.update!(token: token)
assert_equal token, user.token
assert_equal token, user.reload.token
assert_equal token, model.find(user.id).token
end
def test_generating_token_on_initialize_is_skipped_if_column_was_not_selected
model = Class.new(ActiveRecord::Base) do
self.table_name = "users"
has_secure_token on: :initialize
end
model.create!
assert_nothing_raised do
model.select(:id).last
end
end
def test_regenerating_the_secure_token
@user.save
old_token = @user.token
old_auth_token = @user.auth_token
@user.regenerate_token
@user.regenerate_auth_token
assert_not_equal @user.token, old_token
assert_not_equal @user.auth_token, old_auth_token
assert_equal 24, @user.token.size
assert_equal 36, @user.auth_token.size
end
def test_token_value_not_overwritten_when_present
@user.token = "custom-secure-token"
@user.save
assert_equal "custom-secure-token", @user.token
end
def test_token_length_cannot_be_less_than_24_characters
assert_raises(ActiveRecord::SecureToken::MinimumLengthError) do
@user.class_eval do
has_secure_token :not_valid_token, length: 12
end
end
end
def test_token_on_callback
model = Class.new(ActiveRecord::Base) do
self.table_name = "users"
has_secure_token on: :initialize
end
user = model.new
assert_predicate user.token, :present?
end
def test_token_calls_the_setter_method
model = Class.new(ActiveRecord::Base) do
self.table_name = "users"
has_secure_token on: :initialize
attr_accessor :modified_token
def token=(value)
super
self.modified_token = "#{value}_modified"
end
end
user = model.new
assert_equal "#{user.token}_modified", user.modified_token
end
end
|