From 0a74bb83732df5bfc2753b9e69179cb02011f435 Mon Sep 17 00:00:00 2001 From: Rob Harrington Date: Fri, 9 Dec 2016 00:54:50 +1100 Subject: [PATCH] Running StandingOrderSyncJob when order cycles added to a schedule via SchedulesController --- app/controllers/admin/schedules_controller.rb | 17 ++++++++++++++--- .../admin/schedules_controller_spec.rb | 16 ++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/app/controllers/admin/schedules_controller.rb b/app/controllers/admin/schedules_controller.rb index eea64f7fc9..2d2dbac2e4 100644 --- a/app/controllers/admin/schedules_controller.rb +++ b/app/controllers/admin/schedules_controller.rb @@ -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 diff --git a/spec/controllers/admin/schedules_controller_spec.rb b/spec/controllers/admin/schedules_controller_spec.rb index cb06e178b8..bb6c9b4399 100644 --- a/spec/controllers/admin/schedules_controller_spec.rb +++ b/spec/controllers/admin/schedules_controller_spec.rb @@ -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