summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/jobs/solidus_subscriptions/process_installments_job.rb19
-rw-r--r--spec/jobs/solidus_subscriptions/process_installments_job_spec.rb27
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