| 
									
										
										
										
											2016-11-28 13:36:47 +01:00
										 |  |  | require 'rails_helper' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RSpec.describe Subscription, type: :model do | 
					
						
							| 
									
										
										
										
											2017-05-03 01:21:22 +09:00
										 |  |  |   let(:alice) { Fabricate(:account, username: 'alice') } | 
					
						
							| 
									
										
										
										
											2017-01-20 01:00:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-03 01:21:22 +09: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 14:56:00 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe 'lease_seconds' do | 
					
						
							| 
									
										
										
										
											2018-09-13 18:53:09 -04:00
										 |  |  |     it 'returns the time remaining until expiration' do | 
					
						
							| 
									
										
										
										
											2017-05-05 14:56:00 -04: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 13:36:47 +01:00
										 |  |  | end |