mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-27 01:43:22 +00:00
Extract methods in subscription_placement_job to fix rubocop complexity issues
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user