Files
api/spec/models/refresh_token_spec.rb
T

72 lines
2.3 KiB
Ruby
Raw Normal View History

2026-05-18 13:17:28 -04:00
require "rails_helper"
RSpec.describe RefreshToken, type: :model do
let(:user) { User.create!(email: "test@example.com", password: "123456", password_confirmation: "123456") }
describe "validations" do
it "generates token automatically" do
token = RefreshToken.create!(user: user)
expect(token.token).to be_present
end
it "sets expiration automatically" do
token = RefreshToken.create!(user: user)
expect(token.expires_at).to be_present
expect(token.expires_at).to be > Time.current
end
it "requires unique token" do
token1 = RefreshToken.create!(user: user)
token2 = RefreshToken.new(user: user, token: token1.token, expires_at: 7.days.from_now)
expect(token2.valid?).to be false
expect(token2.errors[:token]).to include("has already been taken")
end
end
describe "#active?" do
it "returns true for non-revoked, non-expired tokens" do
token = RefreshToken.create!(user: user)
expect(token.active?).to be true
end
it "returns false for revoked tokens" do
token = RefreshToken.create!(user: user, revoked: true)
expect(token.active?).to be false
end
it "returns false for expired tokens" do
token = RefreshToken.create!(user: user, expires_at: 1.day.ago)
expect(token.active?).to be false
end
end
describe "#revoke!" do
it "marks token as revoked" do
token = RefreshToken.create!(user: user)
expect(token.revoked).to be false
token.revoke!
expect(token.revoked).to be true
end
end
describe ".cleanup_old_tokens" do
it "removes expired and revoked tokens" do
old_expired = RefreshToken.create!(user: user, expires_at: 31.days.ago)
old_revoked = RefreshToken.create!(user: user, revoked: true, created_at: 31.days.ago, expires_at: 1.day.from_now)
recent_revoked = RefreshToken.create!(user: user, revoked: true, expires_at: 1.day.from_now)
valid_token = RefreshToken.create!(user: user)
expect {
RefreshToken.cleanup_old_tokens
}.to change { RefreshToken.count }.by(-2)
expect(RefreshToken.exists?(old_expired.id)).to be false
expect(RefreshToken.exists?(old_revoked.id)).to be false
expect(RefreshToken.exists?(recent_revoked.id)).to be true
expect(RefreshToken.exists?(valid_token.id)).to be true
end
end
end