From 4fce50620153e0bf70b3b9d1f2ee38c78ee6f43a Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Wed, 1 Jul 2020 15:48:19 +0100 Subject: [PATCH] Bring splitter/base from spree --- app/models/spree/stock/splitter/base.rb | 29 +++++++++++++++ spec/models/spree/stock/splitter/base_spec.rb | 37 +++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 app/models/spree/stock/splitter/base.rb create mode 100644 spec/models/spree/stock/splitter/base_spec.rb diff --git a/app/models/spree/stock/splitter/base.rb b/app/models/spree/stock/splitter/base.rb new file mode 100644 index 0000000000..46ee1499bb --- /dev/null +++ b/app/models/spree/stock/splitter/base.rb @@ -0,0 +1,29 @@ +module Spree + module Stock + module Splitter + class Base + attr_reader :packer, :next_splitter + + def initialize(packer, next_splitter=nil) + @packer = packer + @next_splitter = next_splitter + end + delegate :stock_location, :order, to: :packer + + def split(packages) + return_next(packages) + end + + private + + def return_next(packages) + next_splitter ? next_splitter.split(packages) : packages + end + + def build_package(contents=[]) + @packer.package_factory.new(stock_location, order, contents) + end + end + end + end +end diff --git a/spec/models/spree/stock/splitter/base_spec.rb b/spec/models/spree/stock/splitter/base_spec.rb new file mode 100644 index 0000000000..a8b58e0e7b --- /dev/null +++ b/spec/models/spree/stock/splitter/base_spec.rb @@ -0,0 +1,37 @@ +require 'spec_helper' + +module Spree + module Stock + module Splitter + describe Base do + let(:packer) { build(:stock_packer) } + + it 'continues to splitter chain' do + splitter1 = Base.new(packer) + splitter2 = Base.new(packer, splitter1) + packages = [] + + splitter1.should_receive(:split).with(packages) + splitter2.split(packages) + end + + it 'builds package using package factory' do + # Basic extension of Base splitter used to test build_package method + class ::BasicSplitter < Base + def split(packages) + build_package + end + end + + # Custom package used to test setting package factory + class ::CustomPackage + def initialize(stock_location, order, splitters); end + end + allow(Spree::Config).to receive(:package_factory) { CustomPackage } + + expect(::BasicSplitter.new(packer).split(nil).class).to eq CustomPackage + end + end + end + end +end