Sha256: 6ce15de32f4b1eb31be35b08628c20edddfe92748be99fd8321046a24668e725

Contents?: true

Size: 1.98 KB

Versions: 48

Compression:

Stored size: 1.98 KB

Contents

# frozen_string_literal: true

require 'rails_helper'

module Spree::Stock
  RSpec.describe SplitterChain, type: :model do
    let(:stock_location) { mock_model(Spree::StockLocation) }
    let(:splitter1) { Class.new(Splitter::Base) }
    let(:splitter2) { Class.new(Splitter::Base) }

    let(:package) { double(:package) }
    let(:packages) { [package] }

    subject { described_class.new(stock_location, splitters) }

    context 'with no splitters' do
      let(:splitters) { [] }

      it "returns the packages unchanged" do
        expect(subject.split(packages)).to eq packages
      end
    end

    context 'with one splitter' do
      let(:splitters) { [splitter1] }

      it 'returns the result form the splitter' do
        expected = double(:expected_packages)
        expect_any_instance_of(splitter1).to receive(:split).with(packages).and_return(expected)

        expect(subject.split(packages)).to be expected
      end

      it 'builds the splitters correctly' do
        expect(splitter1).to receive(:new).with(stock_location, nil).and_call_original

        subject.split(packages)
      end
    end

    context 'with multiple splitters' do
      let(:splitters) { [splitter1, splitter2] }

      it 'builds the splitters in order' do
        expect(splitter1).to receive(:new).with(stock_location, splitter2).and_call_original
        expect(splitter2).to receive(:new).with(stock_location, nil).and_call_original

        subject.split(packages)
      end

      it 'calls the splitters in order' do
        expect_any_instance_of(splitter1).to receive(:split).with(packages).and_call_original
        expect_any_instance_of(splitter2).to receive(:split).with(packages).and_call_original

        subject.split(packages)
      end

      it 'returns the final result' do
        expected = double(:expected_packages)
        expect_any_instance_of(splitter2).to receive(:split).with(packages).and_return(expected)

        expect(subject.split(packages)).to be expected
      end
    end
  end
end

Version data entries

48 entries across 48 versions & 2 rubygems

Version Path
solidus_core-2.10.5 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.10.3 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.10.2 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.9.6 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.8.6 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.10.1 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.9.5 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.10.0 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.9.4 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.6.6 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.7.4 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.8.5 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.9.3 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.9.2 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.10.0.beta1 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.7.3 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.6.5 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.9.1 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.9.0 spec/models/spree/stock/splitter_chain_spec.rb
solidus_core-2.9.0.rc.1 spec/models/spree/stock/splitter_chain_spec.rb