From d323c5bdcb3bea36c0309c05ecf22daaafbb97b1 Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Thu, 2 Jul 2020 20:45:01 +0100 Subject: [PATCH] Simplify packer and coordinator baed on the fact that there's only one stock_location so there will only be one package per order --- .../order_management/stock/coordinator.rb | 27 +++++---------- .../services/order_management/stock/packer.rb | 6 +--- .../order_management/stock/packer_spec.rb | 33 +++++++------------ 3 files changed, 22 insertions(+), 44 deletions(-) diff --git a/engines/order_management/app/services/order_management/stock/coordinator.rb b/engines/order_management/app/services/order_management/stock/coordinator.rb index 215a82ffe3..64bbbc8cbc 100644 --- a/engines/order_management/app/services/order_management/stock/coordinator.rb +++ b/engines/order_management/app/services/order_management/stock/coordinator.rb @@ -15,24 +15,14 @@ module OrderManagement estimate_packages(packages) end - # Build packages as per stock location + # Build package with default stock location + # No need to check items are in the stock location, + # there is only one stock location so the items will be on that stock location. # - # It needs to check whether each stock location holds at least one stock - # item for the order. In case none is found it wouldn't make any sense - # to build a package because it would be empty. Plus we avoid errors down - # the stack because it would assume the stock location has stock items - # for the given order - # - # Returns an array of Package instances - def build_packages(packages = []) - Spree::StockLocation.active.each do |stock_location| - next unless stock_location.stock_items. - where(variant_id: order.line_items.pluck(:variant_id)).exists? - - packer = build_packer(stock_location, order) - packages += packer.packages - end - packages + # Returns an array with a single Package for the default stock location + def build_packages + packer = build_packer(order) + [packer.package] end private @@ -50,7 +40,8 @@ module OrderManagement packages end - def build_packer(stock_location, order) + def build_packer(order) + stock_location = DefaultStockLocation.find_or_create OrderManagement::Stock::Packer.new(stock_location, order) end end diff --git a/engines/order_management/app/services/order_management/stock/packer.rb b/engines/order_management/app/services/order_management/stock/packer.rb index d66881a32b..49141d3fef 100644 --- a/engines/order_management/app/services/order_management/stock/packer.rb +++ b/engines/order_management/app/services/order_management/stock/packer.rb @@ -10,11 +10,7 @@ module OrderManagement @order = order end - def packages - [default_package] - end - - def default_package + def package package = OrderManagement::Stock::Package.new(stock_location, order) order.line_items.each do |line_item| next unless stock_location.stock_item(line_item.variant) diff --git a/engines/order_management/spec/services/order_management/stock/packer_spec.rb b/engines/order_management/spec/services/order_management/stock/packer_spec.rb index f1e2b432bf..1100090af0 100644 --- a/engines/order_management/spec/services/order_management/stock/packer_spec.rb +++ b/engines/order_management/spec/services/order_management/stock/packer_spec.rb @@ -10,30 +10,21 @@ module OrderManagement subject { Packer.new(stock_location, order) } - context 'packages' do - it 'builds an array of packages' do - packages = subject.packages - expect(packages.size).to eq 1 - expect(packages.first.contents.size).to eq 5 - end + before { order.line_items.first.variant.update(weight: 1) } + + it 'builds a package with all the items' do + package = subject.package + + expect(package.contents.size).to eq 5 + expect(package.weight).to be_positive end - context 'default_package' do - before { order.line_items.first.variant.update(weight: 1) } + it 'variants are added as backordered without enough on_hand' do + expect(stock_location).to receive(:fill_status).exactly(5).times.and_return([2, 3]) - it 'contains all the items' do - package = subject.default_package - expect(package.contents.size).to eq 5 - expect(package.weight).to be_positive - end - - it 'variants are added as backordered without enough on_hand' do - expect(stock_location).to receive(:fill_status).exactly(5).times.and_return([2, 3]) - - package = subject.default_package - expect(package.on_hand.size).to eq 5 - expect(package.backordered.size).to eq 5 - end + package = subject.package + expect(package.on_hand.size).to eq 5 + expect(package.backordered.size).to eq 5 end end end