diff --git a/app/controllers/spree/admin/shipping_methods_controller_decorator.rb b/app/controllers/spree/admin/shipping_methods_controller_decorator.rb index 6e8309da5e..aa18bf8bba 100644 --- a/app/controllers/spree/admin/shipping_methods_controller_decorator.rb +++ b/app/controllers/spree/admin/shipping_methods_controller_decorator.rb @@ -9,6 +9,13 @@ module Spree flash[:error] = "That shipping method cannot be deleted as it is referenced by an order: #{order.number}." redirect_to collection_url end + + product_distribution = ProductDistribution.where(:shipping_method_id => @object).first + if product_distribution + p = product_distribution.product + flash[:error] = "That shipping method cannot be deleted as it is referenced by a product distribution: #{p.id} - #{p.name}." + redirect_to collection_url + end end end end diff --git a/spec/requests/admin/shipping_methods_spec.rb b/spec/requests/admin/shipping_methods_spec.rb index 5897257997..11414c011b 100644 --- a/spec/requests/admin/shipping_methods_spec.rb +++ b/spec/requests/admin/shipping_methods_spec.rb @@ -25,6 +25,16 @@ feature 'shipping methods' do Spree::ShippingMethod.find(@sm.id).should_not be_nil end - scenario "deleting a shipping method referenced by a product distribution" + scenario "deleting a shipping method referenced by a product distribution" do + p = create(:product) + d = create(:distributor) + create(:product_distribution, product: p, distributor: d, shipping_method: @sm) + + visit_delete spree.admin_shipping_method_path(@sm) + + page.should have_content "That shipping method cannot be deleted as it is referenced by a product distribution: #{p.id} - #{p.name}." + Spree::ShippingMethod.find(@sm.id).should_not be_nil + end + scenario "deleting a shipping method referenced by a line item" end