diff options
author | Nicolò€ Rebughini <nicolo.rebughini@gmail.com> | 2021-02-26 11:50:51 +0100 |
---|---|---|
committer | Nicolò€ Rebughini <nicolo.rebughini@gmail.com> | 2021-02-26 11:53:50 +0100 |
commit | cfcb35e8b1211d7aac66c709610c1cdc707c5db8 (patch) | |
tree | d9fe44490be4b17a83fe44c3f339c203e70b53fb | |
parent | f39f79dc97577016c0229598a3ef3d1d7d224553 (diff) |
Add actionable? instance method to subscriptions
-rw-r--r-- | app/models/solidus_subscriptions/subscription.rb | 4 | ||||
-rw-r--r-- | spec/models/solidus_subscriptions/subscription_spec.rb | 37 |
2 files changed, 41 insertions, 0 deletions
diff --git a/app/models/solidus_subscriptions/subscription.rb b/app/models/solidus_subscriptions/subscription.rb index 3190ab6..5b16681 100644 --- a/app/models/solidus_subscriptions/subscription.rb +++ b/app/models/solidus_subscriptions/subscription.rb @@ -266,6 +266,10 @@ module SolidusSubscriptions Time.zone.now > (failing_since + SolidusSubscriptions.configuration.maximum_reprocessing_time) end + def actionable? + actionable_date && actionable_date <= Time.zone.today && ["canceled", "inactive"].exclude?(state) + end + private def check_successive_skips_exceeded diff --git a/spec/models/solidus_subscriptions/subscription_spec.rb b/spec/models/solidus_subscriptions/subscription_spec.rb index 6acc1b3..b95caa6 100644 --- a/spec/models/solidus_subscriptions/subscription_spec.rb +++ b/spec/models/solidus_subscriptions/subscription_spec.rb @@ -756,4 +756,41 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do end end end + + describe '#actionable?' do + context 'when the actionable date is nil' do + it 'is not actionable' do + subscription = build_stubbed(:subscription, actionable_date: nil) + + expect(subscription).not_to be_actionable + end + end + + context 'when the actionable date is in the future' do + it 'is not actionable' do + subscription = build_stubbed(:subscription, actionable_date: Time.zone.today + 5.days) + + expect(subscription).not_to be_actionable + end + end + + context 'when the state is either canceled or inactive' do + it 'is not actionable' do + canceled_subscription = build_stubbed(:subscription, :canceled) + inactive_subscription = build_stubbed(:subscription, :inactive) + + [canceled_subscription, inactive_subscription].each do |subscription| + expect(subscription).not_to be_actionable + end + end + end + + context 'when the active subscription actionable date is today or in the past' do + it 'is actionable' do + subscription = build_stubbed(:subscription, actionable_date: Time.zone.today) + + expect(subscription).to be_actionable + end + end + end end |