diff options
author | Alessandro Desantis <desa.alessandro@gmail.com> | 2020-12-14 17:04:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-14 17:04:47 +0100 |
commit | 982e340b73a63089907a3e68ebd7395f16892fa2 (patch) | |
tree | e737b463dfcba8f726e21b9c3e3465f6a2b4f96f | |
parent | d4743d79536be77bcf1fa0fb5ff055ba6145396a (diff) | |
parent | 595891ac6a7f6641b04f5cd4e1ecaa21c0ed7eb6 (diff) |
Merge pull request #178 from seand7565/fix_subscription_cancel
Update cancel method on subscription to respect minimum date
-rw-r--r-- | Gemfile | 2 | ||||
-rw-r--r-- | README.md | 12 | ||||
-rw-r--r-- | app/models/solidus_subscriptions/subscription.rb | 3 | ||||
-rw-r--r-- | lib/solidus_subscriptions/configuration.rb | 2 | ||||
-rw-r--r-- | spec/models/solidus_subscriptions/subscription_spec.rb | 16 |
5 files changed, 33 insertions, 2 deletions
@@ -14,6 +14,8 @@ gem 'rails', '>0.a' # Provides basic authentication functionality for testing parts of your engine gem 'solidus_auth_devise' +gem 'canonical-rails', '0.2.9' + case ENV['DB'] when 'mysql' gem 'mysql2' @@ -130,6 +130,18 @@ SolidusSubscriptions.configure do |config| end ``` +### Minimum cancellation notice + +The minimum cancellation notice is set to 0 days by default - users can cancel their subscription whenever they like. To change this, you can configure the extension like this: + +```ruby +SolidusSubscriptions.configure do |config| + # ... + + config.minimum_cancellation_notice = 10.days +end +``` + ## Development ### Testing the extension diff --git a/app/models/solidus_subscriptions/subscription.rb b/app/models/solidus_subscriptions/subscription.rb index 3028b7f..4168973 100644 --- a/app/models/solidus_subscriptions/subscription.rb +++ b/app/models/solidus_subscriptions/subscription.rb @@ -150,7 +150,8 @@ module SolidusSubscriptions def can_be_canceled? return true if actionable_date.nil? - (actionable_date - SolidusSubscriptions.configuration.minimum_cancellation_notice).future? + cancel_by = actionable_date - SolidusSubscriptions.configuration.minimum_cancellation_notice + cancel_by.future? || cancel_by.today? end def skip(check_skip_limits: true) diff --git a/lib/solidus_subscriptions/configuration.rb b/lib/solidus_subscriptions/configuration.rb index f09740b..52c8fd4 100644 --- a/lib/solidus_subscriptions/configuration.rb +++ b/lib/solidus_subscriptions/configuration.rb @@ -43,7 +43,7 @@ module SolidusSubscriptions end def minimum_cancellation_notice - @minimum_cancellation_notice ||= 1.day + @minimum_cancellation_notice ||= 0.days end def processing_queue diff --git a/spec/models/solidus_subscriptions/subscription_spec.rb b/spec/models/solidus_subscriptions/subscription_spec.rb index d7ec367..5d855db 100644 --- a/spec/models/solidus_subscriptions/subscription_spec.rb +++ b/spec/models/solidus_subscriptions/subscription_spec.rb @@ -87,8 +87,13 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do around { |e| Timecop.freeze { e.run } } + before do + allow(SolidusSubscriptions.configuration).to receive(:minimum_cancellation_notice) { minimum_cancellation_notice } + end + context 'the subscription can be canceled' do let(:actionable_date) { 1.month.from_now } + let(:minimum_cancellation_notice) { 1.day } it 'is canceled' do subject @@ -103,6 +108,7 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do context 'the subscription cannot be canceled' do let(:actionable_date) { Date.current } + let(:minimum_cancellation_notice) { 1.day } it 'is pending cancelation' do subject @@ -114,6 +120,16 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do expect(subscription.events.last).to have_attributes(event_type: 'subscription_canceled') end end + + context 'when the minimum cancellation date is 0.days' do + let(:actionable_date) { Date.current } + let(:minimum_cancellation_notice) { 0.days } + + it 'is canceled' do + subject + expect(subscription).to be_canceled + end + end end describe '#skip' do |