mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-26 01:33:22 +00:00
Bring splitter/base from spree
This commit is contained in:
29
app/models/spree/stock/splitter/base.rb
Normal file
29
app/models/spree/stock/splitter/base.rb
Normal 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
|
||||
37
spec/models/spree/stock/splitter/base_spec.rb
Normal file
37
spec/models/spree/stock/splitter/base_spec.rb
Normal 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
|
||||
Reference in New Issue
Block a user