Files
fizzy/test/models/magic_link_test.rb
T
2025-10-31 16:22:12 +01:00

59 lines
2.1 KiB
Ruby

require "test_helper"
class MagicLinkTest < ActiveSupport::TestCase
test "new" do
magic_link = MagicLink.create!(membership: memberships(:kevin_in_37signals))
assert magic_link.code.present?
assert_equal MagicLink::CODE_LENGTH, magic_link.code.length
assert magic_link.expires_at.present?
assert_in_delta MagicLink::EXPIRATION_TIME.from_now, magic_link.expires_at, 1.second
end
test "active" do
active_link = MagicLink.create!(membership: memberships(:kevin_in_37signals))
expired_link = MagicLink.create!(membership: memberships(:kevin_in_37signals))
expired_link.update_column(:expires_at, 1.hour.ago)
assert_includes MagicLink.active, active_link
assert_not_includes MagicLink.active, expired_link
end
test "stale" do
active_link = MagicLink.create!(membership: memberships(:kevin_in_37signals))
expired_link = MagicLink.create!(membership: memberships(:kevin_in_37signals))
expired_link.update_column(:expires_at, 1.hour.ago)
assert_includes MagicLink.stale, expired_link
assert_not_includes MagicLink.stale, active_link
end
test "consume" do
magic_link = MagicLink.create!(membership: memberships(:kevin_in_37signals))
code_with_spaces = magic_link.code.downcase.chars.join(" ")
membership = MagicLink.consume(code_with_spaces)
assert_equal memberships(:kevin_in_37signals), membership
assert_not MagicLink.exists?(magic_link.id)
expired_link = MagicLink.create!(membership: memberships(:kevin_in_37signals))
expired_link.update_column(:expires_at, 1.hour.ago)
assert_nil MagicLink.consume(expired_link.code)
assert MagicLink.exists?(expired_link.id)
assert_nil MagicLink.consume("INVALID")
assert_nil MagicLink.consume(nil)
end
test "cleanup" do
active_link = MagicLink.create!(membership: memberships(:kevin_in_37signals))
expired_link = MagicLink.create!(membership: memberships(:kevin_in_37signals))
expired_link.update_column(:expires_at, 1.hour.ago)
MagicLink.cleanup
assert MagicLink.exists?(active_link.id)
assert_not MagicLink.exists?(expired_link.id)
end
end