diff --git a/app/models/order_cycle.rb b/app/models/order_cycle.rb index c6e2d4a0aa..26fe34eec7 100644 --- a/app/models/order_cycle.rb +++ b/app/models/order_cycle.rb @@ -10,7 +10,8 @@ class OrderCycle < ApplicationRecord belongs_to :coordinator, class_name: 'Enterprise' has_many :coordinator_fee_refs, class_name: 'CoordinatorFee' - has_many :coordinator_fees, through: :coordinator_fee_refs, source: :enterprise_fee + has_many :coordinator_fees, through: :coordinator_fee_refs, source: :enterprise_fee, + dependent: :destroy has_many :exchanges, dependent: :destroy diff --git a/spec/controllers/admin/order_cycles_controller_spec.rb b/spec/controllers/admin/order_cycles_controller_spec.rb index 9ac31eb77a..747eb6107a 100644 --- a/spec/controllers/admin/order_cycles_controller_spec.rb +++ b/spec/controllers/admin/order_cycles_controller_spec.rb @@ -401,6 +401,33 @@ module Admin expect(flash[:error]).to eq I18n.t('admin.order_cycles.destroy_errors.schedule_present') end end + + describe "when an order cycle has any coordinator_fees" do + let(:enterprise_fee1) { create(:enterprise_fee) } + + before do + oc.coordinator_fees << enterprise_fee1 + end + + it "actually delete the order cycle" do + get :destroy, params: { id: oc.id } + expect(OrderCycle.find_by(id: oc.id)).to be nil + expect(response).to redirect_to admin_order_cycles_path + end + + describe "when the order_cycle was previously cloned" do + let(:cloned) { oc.clone! } + + it "actually delete the order cycle" do + get :destroy, params: { id: cloned.id } + + expect(OrderCycle.find_by(id: cloned.id)).to be nil + expect(OrderCycle.find_by(id: oc.id)).to_not be nil + expect(EnterpriseFee.find_by(id: enterprise_fee1.id)).to_not be nil + expect(response).to redirect_to admin_order_cycles_path + end + end + end end end end