diff options
-rw-r--r-- | app/jobs/solidus_subscriptions/process_installments_job.rb | 19 | ||||
-rw-r--r-- | spec/jobs/solidus_subscriptions/process_installments_job_spec.rb | 27 |
2 files changed, 46 insertions, 0 deletions
diff --git a/app/jobs/solidus_subscriptions/process_installments_job.rb b/app/jobs/solidus_subscriptions/process_installments_job.rb new file mode 100644 index 0000000..6d4cc8f --- /dev/null +++ b/app/jobs/solidus_subscriptions/process_installments_job.rb @@ -0,0 +1,19 @@ +# This job is responsible for creating a consolidated installment from a +# list of installments and processing it. + +module SolidusSubscriptions + class ProcessInstallmentsJob < ActiveJob::Base + queue_as Config.processing_queue + + # Process a collection of installments + # + # @param [Array<SolidusSubscriptions::Installment>] :installments, The + # installments to be processed together and fulfilled by the same order + # + # @return [Spree::Order] The order which fulfills the list of installments + def perform(installments) + return if installments.empty? + ConsolidatedInstallment.new(installments).process + end + end +end diff --git a/spec/jobs/solidus_subscriptions/process_installments_job_spec.rb b/spec/jobs/solidus_subscriptions/process_installments_job_spec.rb new file mode 100644 index 0000000..31a9af6 --- /dev/null +++ b/spec/jobs/solidus_subscriptions/process_installments_job_spec.rb @@ -0,0 +1,27 @@ +require 'rails_helper' + +RSpec.describe SolidusSubscriptions::ProcessInstallmentsJob do + let(:root_order) { create :completed_order_with_pending_payment } + let(:installments) do + traits = { + subscription_traits: [{ + line_item_traits: [{ + spree_line_item: root_order.line_items.first + }] + }] + } + + create_list(:installment, 2, traits) + end + + describe '#perform' do + subject { described_class.new.perform(installments) } + + it 'processes the consolidated installment' do + expect_any_instance_of(SolidusSubscriptions::ConsolidatedInstallment). + to receive(:process).once + + subject + end + end +end |