test: cover OrmSecureTokenTest and teardown

This commit is contained in:
dualfroz committed 2026-09-13 16:33:10 +02:00
1 parent 71db0110af
commit c791df50e0
1 file changed
+72
+72
View File
@@ -0,0 +1,72 @@
require 'minitest/autorun'
require 'prism'
require 'tmpdir'
class OrmSecureTokenTest < Minitest::Test
def setup
@dir = Dir.mktmpdir('prism-secure-token-store')
@store = Prism::Orm::Store.new(File.join(@dir, 'test.pstore'))
@store.create_table(:api_keys, %w[id name token auth_token])
api_key_class = Class.new(Prism::Orm::Model) do
table_name :api_keys
has_secure_token
has_secure_token :auth_token, length: 6
end
api_key_class.store = @store
Object.const_set(:SecureTokenKey, api_key_class)
end
def teardown
FileUtils.remove_entry(@dir)
Object.send(:remove_const, :SecureTokenKey) if Object.const_defined?(:SecureTokenKey)
end
def test_token_is_generated_on_create
key = SecureTokenKey.create!(name: 'ci')
refute_nil key.token
refute_empty key.token
end
def test_two_records_get_different_tokens
first = SecureTokenKey.create!(name: 'a')
second = SecureTokenKey.create!(name: 'b')
refute_equal first.token, second.token
end
def test_an_explicitly_assigned_token_is_kept_on_create
key = SecureTokenKey.create!(name: 'ci', token: 'my-own-token')
assert_equal 'my-own-token', key.token
end
def test_token_survives_a_reload
key = SecureTokenKey.create!(name: 'ci')
token = key.token
reloaded = SecureTokenKey.find(key.id)
assert_equal token, reloaded.token
end
def test_regenerate_bang_persists_a_new_token
key = SecureTokenKey.create!(name: 'ci')
original = key.token
key.regenerate_token!
refute_equal original, key.token
assert_equal key.token, SecureTokenKey.find(key.id).token
end
def test_second_attribute_on_the_same_model_gets_its_own_independent_token
key = SecureTokenKey.create!(name: 'ci')
refute_equal key.token, key.auth_token
original_auth_token = key.auth_token
key.regenerate_token!
assert_equal original_auth_token, key.auth_token
end
def test_generate_produces_a_urlsafe_string_of_the_requested_byte_length
token = Prism::Orm::SecureToken.generate(6)
assert_match(/\A[A-Za-z0-9_-]+\z/, token)
end
def test_secure_token_attributes_lists_every_declared_attribute
assert_equal %i[token auth_token], SecureTokenKey.secure_token_attributes
end
end