Bring splitter/base from spree

This commit is contained in:
Luis Ramos
2020-07-01 15:48:19 +01:00
parent 658c77f3f5
commit 4fce506201
2 changed files with 66 additions and 0 deletions

View File

@@ -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

View File

@@ -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