From c3c396eaea75809147633a3944f0425f2ec22598 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 30 Apr 2021 11:04:05 +0100 Subject: [PATCH 1/4] Add soft-deletion test coverage to Package#shipping_methods --- .../services/order_management/stock/package_spec.rb | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/engines/order_management/spec/services/order_management/stock/package_spec.rb b/engines/order_management/spec/services/order_management/stock/package_spec.rb index 1a7fbd017a..899b998ee5 100644 --- a/engines/order_management/spec/services/order_management/stock/package_spec.rb +++ b/engines/order_management/spec/services/order_management/stock/package_spec.rb @@ -158,11 +158,18 @@ module OrderManagement let(:shipping_method1) { create(:shipping_method, distributors: [enterprise]) } let(:shipping_method2) { create(:shipping_method, distributors: [other_enterprise]) } + let!(:shipping_method3) { + create(:shipping_method, distributors: [enterprise], deleted_at: Time.zone.now) + } - describe '#shipping_methods' do - it 'does not return shipping methods not used by the package\'s order distributor' do + describe "#shipping_methods" do + it "does not return shipping methods not used by the package's order distributor" do expect(package.shipping_methods).to eq [shipping_method1] end + + it "does not return soft-deleted shipping methods" do + expect(package.shipping_methods).to_not include shipping_method3 + end end describe '#shipping_categories' do From 3897c3af68c5e232db4b537c43bb4cd6d1645da4 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Thu, 29 Apr 2021 18:19:53 +0100 Subject: [PATCH 2/4] Refactor Stock::Package#shipping_methods --- .../order_management/stock/package.rb | 28 ++----------------- .../order_management/stock/package_spec.rb | 10 ------- 2 files changed, 2 insertions(+), 36 deletions(-) diff --git a/engines/order_management/app/services/order_management/stock/package.rb b/engines/order_management/app/services/order_management/stock/package.rb index d6ebbb35c1..8872d8571a 100644 --- a/engines/order_management/app/services/order_management/stock/package.rb +++ b/engines/order_management/app/services/order_management/stock/package.rb @@ -79,24 +79,11 @@ module OrderManagement # TODO calculate from first variant? end - # Returns all existing shipping categories. - # It disables the matching of product shipping category with shipping method's category - # It allows checkout of products with categories that are not the ship method's categories - # - # @return [Array] - def shipping_categories - Spree::ShippingCategory.all - end - - # Skips the methods that are not used by the order's distributor + # Returns the shipping methods that are enabled by the order's distributor # # @return [Array] def shipping_methods - available_shipping_methods = shipping_categories.flat_map(&:shipping_methods).uniq.to_a - - available_shipping_methods.keep_if do |shipping_method| - ships_with?(order.distributor.shipping_methods.to_a, shipping_method) - end + order.distributor.shipping_methods.uniq.to_a end def inspect @@ -124,17 +111,6 @@ module OrderManagement shipment end - - private - - # Checks whether the given distributor provides the specified shipping method - # - # @param shipping_methods [Array] - # @param shipping_method [Spree::ShippingMethod] - # @return [Boolean] - def ships_with?(shipping_methods, shipping_method) - shipping_methods.include?(shipping_method) - end end end end diff --git a/engines/order_management/spec/services/order_management/stock/package_spec.rb b/engines/order_management/spec/services/order_management/stock/package_spec.rb index 899b998ee5..d7ba4fba74 100644 --- a/engines/order_management/spec/services/order_management/stock/package_spec.rb +++ b/engines/order_management/spec/services/order_management/stock/package_spec.rb @@ -171,16 +171,6 @@ module OrderManagement expect(package.shipping_methods).to_not include shipping_method3 end end - - describe '#shipping_categories' do - it "returns ship categories that are not the ship categories of the order's products" do - package - other_shipping_category = Spree::ShippingCategory.create(name: "Custom") - - expect(package.shipping_categories).to eq [shipping_method1.shipping_categories.first, - other_shipping_category] - end - end end end end From 5b2924384751b83fb787832ff8614d4c53c9a84f Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Thu, 29 Apr 2021 18:20:10 +0100 Subject: [PATCH 3/4] Delete unused method Stock::Package#currency --- .../app/services/order_management/stock/package.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/engines/order_management/app/services/order_management/stock/package.rb b/engines/order_management/app/services/order_management/stock/package.rb index 8872d8571a..ca9a627737 100644 --- a/engines/order_management/app/services/order_management/stock/package.rb +++ b/engines/order_management/app/services/order_management/stock/package.rb @@ -75,10 +75,6 @@ module OrderManagement end end - def currency - # TODO calculate from first variant? - end - # Returns the shipping methods that are enabled by the order's distributor # # @return [Array] From c7ce10f99819831eb833e3d55686758fd6543705 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Thu, 29 Apr 2021 19:47:22 +0100 Subject: [PATCH 4/4] Handle order objects with no distributor --- .../app/services/order_management/stock/package.rb | 2 ++ .../spec/services/order_management/stock/package_spec.rb | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/engines/order_management/app/services/order_management/stock/package.rb b/engines/order_management/app/services/order_management/stock/package.rb index ca9a627737..130eabec2e 100644 --- a/engines/order_management/app/services/order_management/stock/package.rb +++ b/engines/order_management/app/services/order_management/stock/package.rb @@ -79,6 +79,8 @@ module OrderManagement # # @return [Array] def shipping_methods + return [] unless order.distributor.present? + order.distributor.shipping_methods.uniq.to_a end diff --git a/engines/order_management/spec/services/order_management/stock/package_spec.rb b/engines/order_management/spec/services/order_management/stock/package_spec.rb index d7ba4fba74..55d1e9a37f 100644 --- a/engines/order_management/spec/services/order_management/stock/package_spec.rb +++ b/engines/order_management/spec/services/order_management/stock/package_spec.rb @@ -170,6 +170,12 @@ module OrderManagement it "does not return soft-deleted shipping methods" do expect(package.shipping_methods).to_not include shipping_method3 end + + it "returns an empty array if distributor is nil" do + allow(order).to receive(:distributor) { nil } + + expect(package.shipping_methods).to eq [] + end end end end