diff options
Diffstat (limited to 'spec/jobs')
-rw-r--r-- | spec/jobs/solidus_subscriptions/process_subscription_job_spec.rb | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/spec/jobs/solidus_subscriptions/process_subscription_job_spec.rb b/spec/jobs/solidus_subscriptions/process_subscription_job_spec.rb new file mode 100644 index 0000000..1a3cf6f --- /dev/null +++ b/spec/jobs/solidus_subscriptions/process_subscription_job_spec.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: true + +RSpec.describe SolidusSubscriptions::ProcessSubscriptionJob do + context 'when clear_past_installments is enabled' do + it 'voids the actionable date of the unfulfilled installments' do + stub_config(clear_past_installments: true) + subscription = create(:subscription) + unfulfilled_installment = create(:installment, :failed, subscription: subscription) + + described_class.perform_now(subscription) + + expect(unfulfilled_installment.reload.actionable_date).to eq(nil) + end + end + + context 'when the subscription is actionable' do + it 'resets the successive_skip_count' do + subscription = create(:subscription, :actionable, successive_skip_count: 3) + + described_class.perform_now(subscription) + + expect(subscription.reload.successive_skip_count).to eq(0) + end + + it 'creates a new installment' do + subscription = create(:subscription, :actionable) + + described_class.perform_now(subscription) + + expect(subscription.installments.count).to eq(1) + end + + it 'advances the actionable date' do + subscription = create(:subscription, :actionable) + subscription.update_columns(interval_length: 1, interval_units: 'week') + old_actionable_date = subscription.reload.actionable_date + + described_class.perform_now(subscription) + + expect(subscription.reload.actionable_date.to_date).to eq((old_actionable_date + 1.week).to_date) + end + end + + context 'when the subscription is pending cancellation' do + it 'cancels the subscription' do + subscription = create( + :subscription, + :actionable, + :pending_cancellation, + ) + described_class.perform_now(subscription) + + expect(subscription.reload.state).to eq('canceled') + end + end + + context 'when the subscription is pending of deactivation' do + it 'deactivates the subscription' do + subscription = create( + :subscription, + :actionable, + interval_units: 'week', + interval_length: 2, + end_date: 3.days.from_now, + ) + described_class.perform_now(subscription) + + expect(subscription.reload.state).to eq('inactive') + end + end + + it 'schedules all the subscription actionable installments for processing' do + subscription = create(:subscription, :actionable) + unfulfilled_installment = create(:installment, :failed, subscription: subscription) + + described_class.perform_now(subscription) + + new_installment = subscription.reload.installments.last + [unfulfilled_installment, new_installment].each do |installment| + expect(SolidusSubscriptions::ProcessInstallmentJob).to have_been_enqueued.with(installment) + end + end +end |