From e02de2b17d00e6d41095c696c9d66afef9d2856e Mon Sep 17 00:00:00 2001 From: Vishal Jain Date: Sun, 9 Oct 2022 20:48:08 +0530 Subject: [PATCH] Fix snail issue for all shipping method fees --- .../admin/shipping_methods_controller.rb | 17 +++++++++++++---- .../admin/shipping_methods_controller_spec.rb | 19 +++++++++++++------ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/app/controllers/spree/admin/shipping_methods_controller.rb b/app/controllers/spree/admin/shipping_methods_controller.rb index a983eb6fc0..58f51ac858 100644 --- a/app/controllers/spree/admin/shipping_methods_controller.rb +++ b/app/controllers/spree/admin/shipping_methods_controller.rb @@ -95,11 +95,20 @@ module Spree end def check_shipping_fee_input - shipping_amount = permitted_resource_params.dig('calculator_attributes', 'preferred_amount') + shipping_fees = permitted_resource_params['calculator_attributes']&.slice( + :preferred_flat_percent, :preferred_amount, + :preferred_first_item, :preferred_additional_item, + :preferred_minimal_amount, :preferred_normal_amount, + :preferred_discount_amount, :preferred_per_unit + ) - unless shipping_amount.nil? || Float(shipping_amount, exception: false) - flash[:error] = I18n.t(:calculator_preferred_value_error) - return redirect_to location_after_save + return unless shipping_fees + + shipping_fees.each do |_, shipping_amount| + unless shipping_amount.nil? || Float(shipping_amount, exception: false) + flash[:error] = I18n.t(:calculator_preferred_value_error) + return redirect_to location_after_save + end end end end diff --git a/spec/controllers/spree/admin/shipping_methods_controller_spec.rb b/spec/controllers/spree/admin/shipping_methods_controller_spec.rb index 08484af764..77ac5ddbd9 100644 --- a/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +++ b/spec/controllers/spree/admin/shipping_methods_controller_spec.rb @@ -31,14 +31,21 @@ describe Spree::Admin::ShippingMethodsController, type: :controller do expect(shipping_method.reload.calculator.preferred_currency).to eq "EUR" end - it "diplay error message on update if preferred_amount input is invalid" do - shipping_method.calculator = create(:calculator_flat_rate, calculable: shipping_method) - params[:shipping_method][:calculator_attributes][:preferred_amount] = "\'20.0'" + %i[ + preferred_flat_percent preferred_amount + preferred_first_item preferred_additional_item + preferred_minimal_amount preferred_normal_amount + preferred_discount_amount preferred_per_unit + ].each do |shipping_amount| + it "diplay error message on update if #{shipping_amount} input is invalid" do + shipping_method.calculator = create(:calculator_flat_rate, calculable: shipping_method) + params[:shipping_method][:calculator_attributes][shipping_amount] = "\'20.0'" - spree_post :update, params + spree_post :update, params - expect(flash[:error]).to match I18n.t(:calculator_preferred_value_error) - expect(response).to redirect_to spree.edit_admin_shipping_method_path(shipping_method) + expect(flash[:error]).to match I18n.t(:calculator_preferred_value_error) + expect(response).to redirect_to spree.edit_admin_shipping_method_path(shipping_method) + end end it "updates preferred_per_unit of a Weight calculator" do