summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolò€ Rebughini <nicolo.rebughini@gmail.com>2021-02-26 11:50:51 +0100
committerNicolò€ Rebughini <nicolo.rebughini@gmail.com>2021-02-26 11:53:50 +0100
commitcfcb35e8b1211d7aac66c709610c1cdc707c5db8 (patch)
treed9fe44490be4b17a83fe44c3f339c203e70b53fb
parentf39f79dc97577016c0229598a3ef3d1d7d224553 (diff)
Add actionable? instance method to subscriptions
-rw-r--r--app/models/solidus_subscriptions/subscription.rb4
-rw-r--r--spec/models/solidus_subscriptions/subscription_spec.rb37
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