mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-13 04:00:21 +00:00
Extract schedule syncing logic into OrderCycleForm
This commit is contained in:
@@ -211,46 +211,6 @@ module Admin
|
||||
end
|
||||
end
|
||||
|
||||
describe "updating schedules" do
|
||||
let(:user) { create(:user, enterprise_limit: 10) }
|
||||
let!(:managed_coordinator) { create(:enterprise, owner: user) }
|
||||
let!(:managed_enterprise) { create(:enterprise, owner: user) }
|
||||
let!(:coordinated_order_cycle) { create(:simple_order_cycle, coordinator: managed_coordinator ) }
|
||||
let!(:coordinated_order_cycle2) { create(:simple_order_cycle, coordinator: managed_enterprise ) }
|
||||
let!(:uncoordinated_order_cycle) { create(:simple_order_cycle, coordinator: create(:enterprise) ) }
|
||||
let!(:coordinated_schedule) { create(:schedule, order_cycles: [coordinated_order_cycle] ) }
|
||||
let!(:coordinated_schedule2) { create(:schedule, order_cycles: [coordinated_order_cycle2] ) }
|
||||
let!(:uncoordinated_schedule) { create(:schedule, order_cycles: [uncoordinated_order_cycle] ) }
|
||||
|
||||
context "where I manage the order_cycle's coordinator" do
|
||||
render_views
|
||||
|
||||
before do
|
||||
controller.stub spree_current_user: user
|
||||
end
|
||||
|
||||
it "allows me to assign only schedules that already I coordinate to the order cycle" do
|
||||
schedule_ids = [coordinated_schedule2.id, uncoordinated_schedule.id]
|
||||
spree_put :update, format: :json, id: coordinated_order_cycle.id, order_cycle: { schedule_ids: schedule_ids }
|
||||
expect(assigns(:order_cycle)).to eq coordinated_order_cycle
|
||||
# coordinated_order_cycle2 is added
|
||||
expect(coordinated_order_cycle.reload.schedules).to include coordinated_schedule2
|
||||
# coordinated_order_cycle is removed, uncoordinated_order_cycle is NOT added
|
||||
expect(coordinated_order_cycle.reload.schedules).to_not include coordinated_schedule, uncoordinated_schedule
|
||||
end
|
||||
|
||||
it "syncs proxy orders when schedule_ids change" do
|
||||
syncer_mock = double(:syncer)
|
||||
allow(OpenFoodNetwork::ProxyOrderSyncer).to receive(:new) { syncer_mock }
|
||||
expect(syncer_mock).to receive(:sync!).exactly(2).times
|
||||
|
||||
spree_put :update, format: :json, id: coordinated_order_cycle.id, order_cycle: { schedule_ids: [coordinated_schedule.id, coordinated_schedule2.id] }
|
||||
spree_put :update, format: :json, id: coordinated_order_cycle.id, order_cycle: { schedule_ids: [coordinated_schedule.id] }
|
||||
spree_put :update, format: :json, id: coordinated_order_cycle.id, order_cycle: { schedule_ids: [coordinated_schedule.id] }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "bulk_update" do
|
||||
let(:oc) { create(:simple_order_cycle) }
|
||||
let!(:coordinator) { oc.coordinator }
|
||||
|
||||
@@ -3,7 +3,7 @@ describe OrderCycleForm do
|
||||
describe "creating a new order cycle from params" do
|
||||
let(:shop) { create(:enterprise) }
|
||||
let(:order_cycle) { OrderCycle.new }
|
||||
let(:form) { OrderCycleForm.new(order_cycle, params) }
|
||||
let(:form) { OrderCycleForm.new(order_cycle, params, shop.owner) }
|
||||
|
||||
context "when creation is successful" do
|
||||
let(:params) { { order_cycle: { name: "Test Order Cycle", coordinator_id: shop.id } } }
|
||||
@@ -29,7 +29,7 @@ describe OrderCycleForm do
|
||||
describe "updating an existing order cycle from params" do
|
||||
let(:shop) { create(:enterprise) }
|
||||
let(:order_cycle) { create(:simple_order_cycle, name: "Old Name") }
|
||||
let(:form) { OrderCycleForm.new(order_cycle, params) }
|
||||
let(:form) { OrderCycleForm.new(order_cycle, params, shop.owner) }
|
||||
|
||||
context "when update is successful" do
|
||||
let(:params) { { order_cycle: { name: "Test Order Cycle", coordinator_id: shop.id } } }
|
||||
@@ -52,4 +52,57 @@ describe OrderCycleForm do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "updating schedules" do
|
||||
let(:user) { create(:user, enterprise_limit: 10) }
|
||||
let!(:managed_coordinator) { create(:enterprise, owner: user) }
|
||||
let!(:managed_enterprise) { create(:enterprise, owner: user) }
|
||||
let!(:coordinated_order_cycle) { create(:simple_order_cycle, coordinator: managed_coordinator ) }
|
||||
let!(:coordinated_order_cycle2) { create(:simple_order_cycle, coordinator: managed_enterprise ) }
|
||||
let!(:uncoordinated_order_cycle) { create(:simple_order_cycle, coordinator: create(:enterprise) ) }
|
||||
let!(:coordinated_schedule) { create(:schedule, order_cycles: [coordinated_order_cycle] ) }
|
||||
let!(:coordinated_schedule2) { create(:schedule, order_cycles: [coordinated_order_cycle2] ) }
|
||||
let!(:uncoordinated_schedule) { create(:schedule, order_cycles: [uncoordinated_order_cycle] ) }
|
||||
|
||||
context "where I manage the order_cycle's coordinator" do
|
||||
let(:form) { OrderCycleForm.new(coordinated_order_cycle, params, user) }
|
||||
let(:syncer_mock) { instance_double(OpenFoodNetwork::ProxyOrderSyncer, sync!: true) }
|
||||
|
||||
before do
|
||||
allow(OpenFoodNetwork::ProxyOrderSyncer).to receive(:new) { syncer_mock }
|
||||
end
|
||||
|
||||
context "and I add an schedule that I own, and remove another that I own" do
|
||||
let(:params) { { order_cycle: { schedule_ids: [coordinated_schedule2.id] } } }
|
||||
|
||||
it "associates the order cycle to the schedule" do
|
||||
expect(form.save).to be true
|
||||
expect(coordinated_order_cycle.reload.schedules).to include coordinated_schedule2
|
||||
expect(coordinated_order_cycle.reload.schedules).to_not include coordinated_schedule
|
||||
expect(syncer_mock).to have_received(:sync!)
|
||||
end
|
||||
end
|
||||
|
||||
context "and I add a schedule that I don't own" do
|
||||
let(:params) { { order_cycle: { schedule_ids: [coordinated_schedule.id, uncoordinated_schedule.id] } } }
|
||||
|
||||
it "ignores the schedule that I don't own" do
|
||||
expect(form.save).to be true
|
||||
expect(coordinated_order_cycle.reload.schedules).to include coordinated_schedule
|
||||
expect(coordinated_order_cycle.reload.schedules).to_not include uncoordinated_schedule
|
||||
expect(syncer_mock).to_not have_received(:sync!)
|
||||
end
|
||||
end
|
||||
|
||||
context "when I make no changes to the schedule ids" do
|
||||
let(:params) { { order_cycle: { schedule_ids: [coordinated_schedule.id] } } }
|
||||
|
||||
it "ignores the schedule that I don't own" do
|
||||
expect(form.save).to be true
|
||||
expect(coordinated_order_cycle.reload.schedules).to include coordinated_schedule
|
||||
expect(syncer_mock).to_not have_received(:sync!)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user