Sha256: 66d206de3334f2beb156145417d5ceb10c8ad05a1251583fc983b33d645b7c0d

Contents?: true

Size: 1.43 KB

Versions: 8

Compression:

Stored size: 1.43 KB

Contents

require 'spec_helper'

RSpec.describe Shoryuken::Middleware::Chain do
  class CustomMiddleware
    def initialize(name, recorder)
      @name     = name
      @recorder = recorder
    end

    def call(*args)
      @recorder << [@name, 'before']
      yield
      @recorder << [@name, 'after']
    end
  end

  class CustomMiddlewareB < CustomMiddleware; end

  it 'supports custom middleware' do
    subject.add CustomMiddleware, 1, []

    expect(CustomMiddleware).to eq subject.entries.last.klass
  end

  it 'can add middleware to the front of chain' do
    subject.prepend CustomMiddleware, 1, []

    expect([CustomMiddleware]).to eq subject.entries.map(&:klass)

    subject.prepend CustomMiddlewareB, 1, []

    expect([CustomMiddlewareB, CustomMiddleware]).to eq subject.entries.map(&:klass)
  end

  it 'invokes a middleware' do
    recorder = []
    subject.add CustomMiddleware, 'custom', recorder

    final_action = nil
    subject.invoke { final_action = true }
    expect(final_action).to eq true
    expect(recorder).to eq [%w(custom before), %w(custom after)]
  end

  class NonYieldingMiddleware
    def call(*args); end
  end

  it 'allows middleware to abruptly stop processing rest of chain' do
    recorder = []
    subject.add NonYieldingMiddleware
    subject.add CustomMiddleware, 'custom', recorder

    final_action = nil
    subject.invoke { final_action = true }
    expect(final_action).to eq nil
    expect(recorder).to eq []
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
shoryuken-3.2.3 spec/shoryuken/middleware/chain_spec.rb
shoryuken-3.2.2 spec/shoryuken/middleware/chain_spec.rb
shoryuken-3.2.1 spec/shoryuken/middleware/chain_spec.rb
shoryuken-3.2.0 spec/shoryuken/middleware/chain_spec.rb
shoryuken-3.1.12 spec/shoryuken/middleware/chain_spec.rb
shoryuken-3.1.11 spec/shoryuken/middleware/chain_spec.rb
shoryuken-3.1.10 spec/shoryuken/middleware/chain_spec.rb
shoryuken-3.1.9 spec/shoryuken/middleware/chain_spec.rb