56 lines
1.8 KiB
Ruby
56 lines
1.8 KiB
Ruby
|
|
require "rails_helper"
|
||
|
|
|
||
|
|
RSpec.describe RetiredToken, type: :model do
|
||
|
|
let(:user) { User.create!(email: "test@example.com", password: "123456", password_confirmation: "123456") }
|
||
|
|
|
||
|
|
describe "validations" do
|
||
|
|
it "requires jti" do
|
||
|
|
token = RetiredToken.new(user: user, exp: 1.hour.from_now)
|
||
|
|
expect(token.valid?).to be false
|
||
|
|
expect(token.errors[:jti]).to include("can't be blank")
|
||
|
|
end
|
||
|
|
|
||
|
|
it "requires exp" do
|
||
|
|
token = RetiredToken.new(user: user, jti: SecureRandom.uuid)
|
||
|
|
expect(token.valid?).to be false
|
||
|
|
expect(token.errors[:exp]).to include("can't be blank")
|
||
|
|
end
|
||
|
|
|
||
|
|
it "requires unique jti" do
|
||
|
|
jti = SecureRandom.uuid
|
||
|
|
RetiredToken.create!(user: user, jti: jti, exp: 1.hour.from_now)
|
||
|
|
|
||
|
|
duplicate = RetiredToken.new(user: user, jti: jti, exp: 1.hour.from_now)
|
||
|
|
expect(duplicate.valid?).to be false
|
||
|
|
expect(duplicate.errors[:jti]).to include("has already been taken")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
describe ".retired?" do
|
||
|
|
it "returns true for retired tokens" do
|
||
|
|
jti = SecureRandom.uuid
|
||
|
|
RetiredToken.create!(user: user, jti: jti, exp: 1.hour.from_now)
|
||
|
|
|
||
|
|
expect(RetiredToken.retired?(jti)).to be true
|
||
|
|
end
|
||
|
|
|
||
|
|
it "returns false for non-retired tokens" do
|
||
|
|
expect(RetiredToken.retired?("non-existent-jti")).to be false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
describe ".cleanup_expired" do
|
||
|
|
it "removes expired tokens" do
|
||
|
|
expired_token = RetiredToken.create!(user: user, jti: SecureRandom.uuid, exp: 1.day.ago)
|
||
|
|
valid_token = RetiredToken.create!(user: user, jti: SecureRandom.uuid, exp: 1.hour.from_now)
|
||
|
|
|
||
|
|
expect {
|
||
|
|
RetiredToken.cleanup_expired
|
||
|
|
}.to change { RetiredToken.count }.by(-1)
|
||
|
|
|
||
|
|
expect(RetiredToken.exists?(expired_token.id)).to be false
|
||
|
|
expect(RetiredToken.exists?(valid_token.id)).to be true
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|