Clone
stack_proxy_spec.rb
require 'spec_helper'

require_relative '../../../lib/locomotive/steam/middlewares/stack_proxy'

describe Locomotive::Steam::Middlewares::StackProxy do

  let(:klass) { Locomotive::Steam::Middlewares::StackProxy }
  let(:proxy) { klass.new }

  describe '#initialize' do

    let(:args) { DefaultMiddleware }
    subject do
      klass.new { use(DefaultMiddleware) }
    end

    it 'adds it to the list' do
      expect(subject.list.size).to eq 1
      expect(subject.list.first).to eq [[DefaultMiddleware], nil]
    end

  end

  describe '#use' do

    let(:args) { DefaultMiddleware }
    before { proxy.use(*args) }

    it 'adds it to the operations' do
      expect(proxy.list.size).to eq 1
      expect(proxy.list.first).to eq [[DefaultMiddleware], nil]
    end

  end

  describe 'manipulating middlewares' do

    before do
      proxy.use DefaultMiddleware
      proxy.use SimpleMiddleware

      proxy.insert_before SimpleMiddleware, FooMiddleware
      proxy.use BarMiddleware, { answer: 42 }
      proxy.delete SimpleMiddleware
      proxy.insert_after 1, FancyMiddleware
    end

    subject { proxy.list }

    it do
      is_expected.to eq([
        [[DefaultMiddleware], nil],
        [[FooMiddleware], nil],
        [[FancyMiddleware], nil],
        [[BarMiddleware, { answer: 42 }], nil]
      ])
    end

  end

  class SimpleMiddleware; end
  class DefaultMiddleware; end
  class FooMiddleware; end
  class BarMiddleware; end
  class FancyMiddleware; end

end