Extract methods in subscription_placement_job to fix rubocop complexity issues

This commit is contained in:
luisramos0
2019-12-05 12:13:10 +00:00
parent 01d69c89aa
commit 3b399b899c
3 changed files with 23 additions and 18 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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