about summary refs log tree commit diff
path: root/spec/models
diff options
context:
space:
mode:
authorMatt Jankowski <mjankowski@thoughtbot.com>2017-05-05 14:56:00 -0400
committerGitHub <noreply@github.com>2017-05-05 14:56:00 -0400
commit484c9709b67685c95de351a39e3dfb140acd3681 (patch)
tree0d74cd725e46cd75ca1568d866d5d5ef906b8c0a /spec/models
parentd08f1112d517788fb66d2683766cc168bac48315 (diff)
Misc spec coverage improvements (#2821)
* Dont use raise_error by itself (avoids warning)

* Add coverage for AccountFilter

* Improve coverage and refactor for Subscription#lease_seconds

* Improve coverage and refactor for NotificationMailer

* Simplify assignment of min/max threshold on subscription
Diffstat (limited to 'spec/models')
-rw-r--r--spec/models/account_filter_spec.rb18
-rw-r--r--spec/models/subscription_spec.rb48
2 files changed, 63 insertions, 3 deletions
diff --git a/spec/models/account_filter_spec.rb b/spec/models/account_filter_spec.rb
index 1599c5ae8..52b4c4893 100644
--- a/spec/models/account_filter_spec.rb
+++ b/spec/models/account_filter_spec.rb
@@ -3,7 +3,7 @@ require 'rails_helper'
 describe AccountFilter do
   describe 'with empty params' do
     it 'defaults to alphabetic account list' do
-      filter = AccountFilter.new({})
+      filter = described_class.new({})
 
       expect(filter.results).to eq Account.alphabetic
     end
@@ -11,7 +11,7 @@ describe AccountFilter do
 
   describe 'with invalid params' do
     it 'raises with key error' do
-      filter = AccountFilter.new(wrong: true)
+      filter = described_class.new(wrong: true)
 
       expect { filter.results }.to raise_error(/wrong/)
     end
@@ -19,7 +19,7 @@ describe AccountFilter do
 
   describe 'with valid params' do
     it 'combines filters on Account' do
-      filter = AccountFilter.new(by_domain: 'test.com', silenced: true)
+      filter = described_class.new(by_domain: 'test.com', silenced: true)
 
       allow(Account).to receive(:where).and_return(Account.none)
       allow(Account).to receive(:silenced).and_return(Account.none)
@@ -27,5 +27,17 @@ describe AccountFilter do
       expect(Account).to have_received(:where).with(domain: 'test.com')
       expect(Account).to have_received(:silenced)
     end
+
+    describe 'that call account methods' do
+      %i(local remote silenced recent).each do |option|
+        it "delegates the #{option} option" do
+          allow(Account).to receive(option).and_return(Account.none)
+          filter = described_class.new({ option => true })
+          filter.results
+
+          expect(Account).to have_received(option)
+        end
+      end
+    end
   end
 end
diff --git a/spec/models/subscription_spec.rb b/spec/models/subscription_spec.rb
index 11fd8fadc..84096e6ae 100644
--- a/spec/models/subscription_spec.rb
+++ b/spec/models/subscription_spec.rb
@@ -16,4 +16,52 @@ RSpec.describe Subscription, type: :model do
       expect(subject.expired?).to be false
     end
   end
+
+  describe 'lease_seconds' do
+    it 'returns the time remaing until expiration' do
+      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
 end