Sha256: 149d2020f79bc777969ae1700ab85e9dbe5b98ec42c3d035b0d4b76d637bd0d8

Contents?: true

Size: 1.58 KB

Versions: 1

Compression:

Stored size: 1.58 KB

Contents

require 'spec_helper'
require 'shoryuken/manager'
require 'shoryuken/fetcher'

describe Shoryuken::Fetcher do
  let(:manager)   { double Shoryuken::Manager }
  let(:sqs_queue) { double 'sqs_queue' }
  let(:queue)     { 'default' }
  let(:sqs_msg)   { double AWS::SQS::ReceivedMessage, id: 'fc754df7-9cc2-4c41-96ca-5996a44b771e', body: 'test' }

  subject { described_class.new(manager) }

  before do
    allow(manager).to receive(:async).and_return(manager)
    allow(Shoryuken::Client).to receive(:queues).with(queue).and_return(sqs_queue)
  end


  describe '#fetch' do
    it 'calls pause when no message' do
      allow(sqs_queue).to receive(:receive_message).with(limit: 1).and_return([])

      expect(manager).to receive(:pause_queue!).with(queue)
      expect(manager).to receive(:dispatch)

      subject.fetch(queue, 1)
    end

    it 'assigns messages' do
      allow(sqs_queue).to receive(:receive_message).with(limit: 5).and_return(sqs_msg)

      expect(manager).to receive(:rebalance_queue_weight!).with(queue)
      expect(manager).to receive(:assign).with(queue, sqs_msg)
      expect(manager).to receive(:dispatch)

      subject.fetch(queue, 5)
    end

    it 'assigns messages in batch' do
      TestWorker.get_shoryuken_options['batch'] = true

      allow(sqs_queue).to receive(:receive_message).with(limit: described_class::FETCH_LIMIT).and_return(sqs_msg)

      expect(manager).to receive(:rebalance_queue_weight!).with(queue)
      expect(manager).to receive(:assign).with(queue, [sqs_msg])
      expect(manager).to receive(:dispatch)

      subject.fetch(queue, 5)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
shoryuken-0.0.3 spec/shoryuken/fetcher_spec.rb