From 7430fc9bddbdfb4f00f09c658176f545c6f21194 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Tue, 2 Oct 2012 11:58:18 +1000 Subject: [PATCH] Do not delete shipping method referenced by a product distribution --- .../admin/shipping_methods_controller_decorator.rb | 7 +++++++ spec/requests/admin/shipping_methods_spec.rb | 12 +++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) 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