From d1160ec66aee60b8c827796a316e1d78bb5a76dc Mon Sep 17 00:00:00 2001 From: mariodz95 Date: Tue, 19 Oct 2021 09:56:35 +0200 Subject: [PATCH] Fix snail on shipping method fees --- .../spree/admin/shipping_methods_controller.rb | 10 ++++++++++ .../spree/admin/shipping_methods_controller_spec.rb | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/app/controllers/spree/admin/shipping_methods_controller.rb b/app/controllers/spree/admin/shipping_methods_controller.rb index aa2e34b298..a983eb6fc0 100644 --- a/app/controllers/spree/admin/shipping_methods_controller.rb +++ b/app/controllers/spree/admin/shipping_methods_controller.rb @@ -7,6 +7,7 @@ module Spree before_action :set_shipping_category, only: [:create, :update] before_action :set_zones, only: [:create, :update] before_action :load_hubs, only: [:new, :edit, :create, :update] + before_action :check_shipping_fee_input, only: [:update] # Sort shipping methods by distributor name def collection @@ -92,6 +93,15 @@ module Spree calculator_attributes: PermittedAttributes::Calculator.attributes ) end + + def check_shipping_fee_input + shipping_amount = permitted_resource_params.dig('calculator_attributes', 'preferred_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 end diff --git a/spec/controllers/spree/admin/shipping_methods_controller_spec.rb b/spec/controllers/spree/admin/shipping_methods_controller_spec.rb index 9978248a46..08484af764 100644 --- a/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +++ b/spec/controllers/spree/admin/shipping_methods_controller_spec.rb @@ -31,6 +31,16 @@ 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'" + + 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) + end + it "updates preferred_per_unit of a Weight calculator" do shipping_method.calculator = create(:weight_calculator, calculable: shipping_method) params[:shipping_method][:calculator_attributes][:preferred_per_unit] = 10