diff --git a/.rubocop_manual_todo.yml b/.rubocop_manual_todo.yml index 1644580ae5..e4baf8d472 100644 --- a/.rubocop_manual_todo.yml +++ b/.rubocop_manual_todo.yml @@ -389,7 +389,6 @@ Metrics/AbcSize: - app/helpers/spree/admin/base_helper.rb - app/helpers/spree/admin/zones_helper.rb - app/helpers/spree/orders_helper.rb - - app/jobs/subscription_placement_job.rb - app/mailers/producer_mailer.rb - app/models/calculator/flat_percent_per_item.rb - app/models/column_preference.rb diff --git a/app/jobs/subscription_placement_job.rb b/app/jobs/subscription_placement_job.rb index 3cc1a5d6ea..b66c06abba 100644 --- a/app/jobs/subscription_placement_job.rb +++ b/app/jobs/subscription_placement_job.rb @@ -5,9 +5,7 @@ class SubscriptionPlacementJob ids = proxy_orders.pluck(:id) proxy_orders.update_all(placed_at: Time.zone.now) ProxyOrder.where(id: ids).each do |proxy_order| - Rails.logger.info "Placing Order for Proxy Order #{proxy_order.id}" - proxy_order.initialise_order! - process(proxy_order.order) + place_order_for(proxy_order) end send_placement_summary_emails @@ -29,16 +27,18 @@ class SubscriptionPlacementJob .joins(:subscription).merge(Subscription.not_canceled.not_paused) end - def process(order) + def place_order_for(proxy_order) + Rails.logger.info "Placing Order for Proxy Order #{proxy_order.id}" + proxy_order.initialise_order! + place_order(proxy_order.order) + end + + def place_order(order) record_order(order) return record_issue(:complete, order) if order.completed? changes = cap_quantity_and_store_changes(order) - if order.line_items.where('quantity > 0').empty? - order.reload.adjustments.destroy_all - order.update! - return send_empty_email(order, changes) - end + return handle_empty_order(order, changes) if order.line_items.where('quantity > 0').empty? move_to_completion(order) send_placement_email(order, changes) @@ -59,6 +59,12 @@ class SubscriptionPlacementJob changes end + def handle_empty_order(order, changes) + order.reload.adjustments.destroy_all + order.update! + send_empty_email(order, changes) + end + def move_to_completion(order) AdvanceOrderService.new(order).call! end diff --git a/spec/jobs/subscription_placement_job_spec.rb b/spec/jobs/subscription_placement_job_spec.rb index bd008682e3..d298726369 100644 --- a/spec/jobs/subscription_placement_job_spec.rb +++ b/spec/jobs/subscription_placement_job_spec.rb @@ -45,7 +45,7 @@ describe SubscriptionPlacementJob do before do allow(job).to receive(:proxy_orders) { ProxyOrder.where(id: proxy_order.id) } - allow(job).to receive(:process) + allow(job).to receive(:place_order) end it "marks placeable proxy_orders as processed by setting placed_at" do @@ -55,7 +55,7 @@ describe SubscriptionPlacementJob do it "processes placeable proxy_orders" do job.perform - expect(job).to have_received(:process).with(proxy_order.reload.order) + expect(job).to have_received(:place_order).with(proxy_order.reload.order) end end end @@ -143,7 +143,7 @@ describe SubscriptionPlacementJob do it "records an issue and ignores it" do ActionMailer::Base.deliveries.clear expect(job).to receive(:record_issue).with(:complete, order).once - expect{ job.send(:process, order) }.to_not change{ order.reload.state } + expect{ job.send(:place_order, order) }.to_not change{ order.reload.state } expect(order.payments.first.state).to eq "checkout" expect(ActionMailer::Base.deliveries.count).to be 0 end @@ -156,7 +156,7 @@ describe SubscriptionPlacementJob do end it "uses the same shipping method after advancing the order" do - job.send(:process, order) + job.send(:place_order, order) expect(order.state).to eq "complete" order.reload expect(order.shipping_method).to eq(shipping_method) @@ -169,7 +169,7 @@ describe SubscriptionPlacementJob do end it "does not place the order, clears, all adjustments, and sends an empty_order email" do - expect{ job.send(:process, order) }.to_not change{ order.reload.completed_at }.from(nil) + expect{ job.send(:place_order, order) }.to_not change{ order.reload.completed_at }.from(nil) expect(order.adjustments).to be_empty expect(order.total).to eq 0 expect(order.adjustment_total).to eq 0 @@ -182,13 +182,13 @@ describe SubscriptionPlacementJob do it "processes the order to completion, but does not process the payment" do # If this spec starts complaining about no shipping methods being available # on CI, there is probably another spec resetting the currency though Rails.cache.clear - expect{ job.send(:process, order) }.to change{ order.reload.completed_at }.from(nil) + expect{ job.send(:place_order, order) }.to change{ order.reload.completed_at }.from(nil) expect(order.completed_at).to be_within(5.seconds).of Time.zone.now expect(order.payments.first.state).to eq "checkout" end it "does not enqueue confirmation emails" do - expect{ job.send(:process, order) }.to_not enqueue_job ConfirmOrderJob + expect{ job.send(:place_order, order) }.to_not enqueue_job ConfirmOrderJob expect(job).to have_received(:send_placement_email).with(order, anything).once end @@ -198,7 +198,7 @@ describe SubscriptionPlacementJob do it "records an error and does not attempt to send an email" do expect(job).to_not receive(:send_placement_email) expect(job).to receive(:record_and_log_error).once - job.send(:process, order) + job.send(:place_order, order) end end end