2016-11-28 04:36:47 -08:00
|
|
|
require 'rails_helper'
|
|
|
|
|
|
|
|
RSpec.describe Subscription, type: :model do
|
2017-05-02 09:21:22 -07:00
|
|
|
let(:alice) { Fabricate(:account, username: 'alice') }
|
2017-01-19 16:00:14 -08:00
|
|
|
|
2017-05-02 09:21:22 -07:00
|
|
|
subject { Fabricate(:subscription, account: alice) }
|
|
|
|
|
|
|
|
describe '#expired?' do
|
|
|
|
it 'return true when expires_at is past' do
|
|
|
|
subject.expires_at = 2.days.ago
|
|
|
|
expect(subject.expired?).to be true
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'return false when expires_at is future' do
|
|
|
|
subject.expires_at = 2.days.from_now
|
|
|
|
expect(subject.expired?).to be false
|
|
|
|
end
|
|
|
|
end
|
2017-05-05 11:56:00 -07:00
|
|
|
|
|
|
|
describe 'lease_seconds' do
|
2018-09-13 15:53:09 -07:00
|
|
|
it 'returns the time remaining until expiration' do
|
2017-05-05 11:56:00 -07:00
|
|
|
datetime = 1.day.from_now
|
|
|
|
subscription = Subscription.new(expires_at: datetime)
|
|
|
|
travel_to(datetime - 12.hours) do
|
|
|
|
expect(subscription.lease_seconds).to eq(12.hours)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'lease_seconds=' do
|
|
|
|
it 'sets expires_at to min expiration when small value is provided' do
|
|
|
|
subscription = Subscription.new
|
|
|
|
datetime = 1.day.from_now
|
|
|
|
too_low = Subscription::MIN_EXPIRATION - 1000
|
|
|
|
travel_to(datetime) do
|
|
|
|
subscription.lease_seconds = too_low
|
|
|
|
end
|
|
|
|
|
|
|
|
expected = datetime + Subscription::MIN_EXPIRATION.seconds
|
|
|
|
expect(subscription.expires_at).to be_within(1.0).of(expected)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'sets expires_at to value when valid value is provided' do
|
|
|
|
subscription = Subscription.new
|
|
|
|
datetime = 1.day.from_now
|
|
|
|
valid = Subscription::MIN_EXPIRATION + 1000
|
|
|
|
travel_to(datetime) do
|
|
|
|
subscription.lease_seconds = valid
|
|
|
|
end
|
|
|
|
|
|
|
|
expected = datetime + valid.seconds
|
|
|
|
expect(subscription.expires_at).to be_within(1.0).of(expected)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'sets expires_at to max expiration when large value is provided' do
|
|
|
|
subscription = Subscription.new
|
|
|
|
datetime = 1.day.from_now
|
|
|
|
too_high = Subscription::MAX_EXPIRATION + 1000
|
|
|
|
travel_to(datetime) do
|
|
|
|
subscription.lease_seconds = too_high
|
|
|
|
end
|
|
|
|
|
|
|
|
expected = datetime + Subscription::MAX_EXPIRATION.seconds
|
|
|
|
expect(subscription.expires_at).to be_within(1.0).of(expected)
|
|
|
|
end
|
|
|
|
end
|
2016-11-28 04:36:47 -08:00
|
|
|
end
|