mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Running StandingOrderSyncJob when order cycles added to a schedule via SchedulesController
This commit is contained in:
@@ -3,6 +3,8 @@ require 'open_food_network/permissions'
|
||||
module Admin
|
||||
class SchedulesController < ResourceController
|
||||
before_filter :check_editable_order_cycle_ids, only: [:create, :update]
|
||||
create.after :sync_standing_orders
|
||||
update.after :sync_standing_orders
|
||||
|
||||
respond_to :json
|
||||
|
||||
@@ -37,9 +39,9 @@ module Admin
|
||||
def check_editable_order_cycle_ids
|
||||
return unless params[:schedule][:order_cycle_ids]
|
||||
requested = params[:schedule][:order_cycle_ids]
|
||||
existing = @schedule.persisted? ? @schedule.order_cycle_ids : []
|
||||
permitted = OrderCycle.where(id: params[:schedule][:order_cycle_ids] | existing).merge(OrderCycle.managed_by(spree_current_user)).pluck(:id)
|
||||
result = existing
|
||||
@existing_order_cycle_ids = @schedule.persisted? ? @schedule.order_cycle_ids : []
|
||||
permitted = OrderCycle.where(id: params[:schedule][:order_cycle_ids] | @existing_order_cycle_ids).merge(OrderCycle.managed_by(spree_current_user)).pluck(:id)
|
||||
result = @existing_order_cycle_ids
|
||||
result |= (requested & permitted) # add any requested & permitted ids
|
||||
result -= ((result & permitted) - requested) # remove any existing and permitted ids that were not specifically requested
|
||||
params[:schedule][:order_cycle_ids] = result
|
||||
@@ -50,5 +52,14 @@ module Admin
|
||||
return @permissions unless @permission.nil?
|
||||
@permissions = OpenFoodNetwork::Permissions.new(spree_current_user)
|
||||
end
|
||||
|
||||
def sync_standing_orders
|
||||
return unless params[:schedule][:order_cycle_ids]
|
||||
removed_ids = @existing_order_cycle_ids - @schedule.order_cycle_ids
|
||||
new_ids = @schedule.order_cycle_ids - @existing_order_cycle_ids
|
||||
if removed_ids.any? || new_ids.any?
|
||||
Delayed::Job.enqueue StandingOrderSyncJob.new(@schedule)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -88,6 +88,18 @@ describe Admin::SchedulesController, type: :controller do
|
||||
# coordinated_order_cycle is removed, uncoordinated_order_cycle2 is NOT added
|
||||
expect(coordinated_schedule.reload.order_cycles).to_not include coordinated_order_cycle, uncoordinated_order_cycle2
|
||||
end
|
||||
|
||||
it "enqueues a StandingOrderSyncJob when order_cycle_ids change" do
|
||||
expect do
|
||||
spree_put :update, format: :json, id: coordinated_schedule.id, schedule: { order_cycle_ids: [coordinated_order_cycle.id, coordinated_order_cycle2.id] }
|
||||
end.to enqueue_job StandingOrderSyncJob
|
||||
expect do
|
||||
spree_put :update, format: :json, id: coordinated_schedule.id, schedule: { order_cycle_ids: [coordinated_order_cycle.id,] }
|
||||
end.to enqueue_job StandingOrderSyncJob
|
||||
expect do
|
||||
spree_put :update, format: :json, id: coordinated_schedule.id, schedule: { order_cycle_ids: [coordinated_order_cycle.id] }
|
||||
end.to_not enqueue_job StandingOrderSyncJob
|
||||
end
|
||||
end
|
||||
|
||||
context "where I don't manage any of the schedule's coordinators" do
|
||||
@@ -138,6 +150,10 @@ describe Admin::SchedulesController, type: :controller do
|
||||
expect(schedule.order_cycles).to include coordinated_order_cycle
|
||||
expect(schedule.order_cycles).to_not include uncoordinated_order_cycle
|
||||
end
|
||||
|
||||
it "enqueues StandingOrderSyncJob" do
|
||||
expect { create_schedule params }.to enqueue_job StandingOrderSyncJob
|
||||
end
|
||||
end
|
||||
|
||||
context "where I don't manage any of the order cycles to be added to the schedules" do
|
||||
|
||||
Reference in New Issue
Block a user