mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-30 21:27:17 +00:00
Update each backorder only once in bulk cancel
This commit is contained in:
@@ -5,6 +5,15 @@
|
||||
class AmendBackorderJob < ApplicationJob
|
||||
sidekiq_options retry: 0
|
||||
|
||||
def self.schedule_bulk_update_for(orders)
|
||||
# We can have one backorder per order cycle and distributor.
|
||||
groups = orders.group_by { |order| [order.order_cycle, order.distributor] }
|
||||
groups.each_value do |orders_with_same_backorder|
|
||||
# We need to trigger only one update per backorder.
|
||||
perform_later(orders_with_same_backorder.first)
|
||||
end
|
||||
end
|
||||
|
||||
def perform(order)
|
||||
OrderLocker.lock_order_and_variants(order) do
|
||||
amend_backorder(order)
|
||||
|
||||
@@ -15,8 +15,7 @@ module Orders
|
||||
order.send_cancellation_email = @send_cancellation_email
|
||||
order.restock_items = @restock_items
|
||||
order.cancel
|
||||
AmendBackorderJob.perform_later(order)
|
||||
end
|
||||
end.tap { |orders| AmendBackorderJob.schedule_bulk_update_for(orders) }
|
||||
# rubocop:enable Rails/FindEach
|
||||
end
|
||||
|
||||
|
||||
@@ -50,6 +50,29 @@ RSpec.describe AmendBackorderJob do
|
||||
chia_seed.on_hand = 7
|
||||
end
|
||||
|
||||
describe ".schedule_bulk_update_for" do
|
||||
let(:order_same_oc) {
|
||||
create(
|
||||
:completed_order_with_totals,
|
||||
distributor: order.distributor,
|
||||
order_cycle: order.order_cycle,
|
||||
)
|
||||
}
|
||||
let(:order_other_oc) { create(:completed_order_with_totals) }
|
||||
|
||||
it "enqueues only one job per backorder" do
|
||||
expect {
|
||||
AmendBackorderJob.schedule_bulk_update_for([order, order_same_oc])
|
||||
}.to enqueue_job(AmendBackorderJob).exactly(:once)
|
||||
end
|
||||
|
||||
it "enqueues a job for each backorder" do
|
||||
expect {
|
||||
AmendBackorderJob.schedule_bulk_update_for([order, order_other_oc])
|
||||
}.to enqueue_job(AmendBackorderJob).exactly(:twice)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#amend_backorder" do
|
||||
it "updates an order" do
|
||||
stub_request(:get, catalog_url).to_return(body: catalog_json)
|
||||
|
||||
Reference in New Issue
Block a user