Sha256: b31b8e2b0ef4776866889cf37e7a20f314eb9883aece1c1e365a4b52adf4cbc3

Contents?: true

Size: 1.2 KB

Versions: 2

Compression:

Stored size: 1.2 KB

Contents

# encoding: utf-8

require 'spec_helper'

describe Chain, '#call' do

  subject { object.call(request) }

  let(:object)   { described_class.new(handlers) }
  let(:handlers) { [ handler_1, handler_2 ] }
  let(:request)  { Request.new(env, input) }
  let(:env)      { mock }
  let(:input)    { mock }

  let(:handler_2) {
    Class.new {
      include Substation::Chain::Outgoing
      def call(request)
        request.success(request.input)
      end
    }.new
  }

  context "when all handlers are successful" do
    let(:handler_1) {
      Class.new {
        include Substation::Chain::Incoming
        def call(request)
          request.success(request.input)
        end
      }.new
    }

    let(:response) { Response::Success.new(request, request.input) }

    it { should eql(response) }
  end

  context "when an intermediate handler is not successful" do
    let(:handler_1) {
      Class.new {
        include Substation::Chain::Incoming
        def call(request)
          request.error(request.input)
        end
      }.new
    }

    let(:response) { Response::Failure.new(request, request.input) }

    before do
      handler_2.should_not_receive(:call)
    end

    it { should eql(response) }
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
substation-0.0.8 spec/unit/substation/chain/call_spec.rb
substation-0.0.7 spec/unit/substation/chain/call_spec.rb