spec/queue_poller_spec.rb in pheme-3.1.2 vs spec/queue_poller_spec.rb in pheme-3.1.3
- old
+ new
@@ -1,9 +1,17 @@
describe Pheme::QueuePoller do
let(:queue_url) { "https://sqs.us-east-1.amazonaws.com/whatever" }
let(:timestamp) { '2018-04-17T21:45:05.915Z' }
+ context 'base poller' do
+ subject { described_class.new(queue_url: 'https://sqs.aws.com').handle(nil, nil) }
+
+ it 'does not implement handle' do
+ expect { subject }.to raise_error(NotImplementedError)
+ end
+ end
+
describe ".new" do
context "when initialized with valid params" do
it "does not raise an error" do
expect { ExampleQueuePoller.new(queue_url: "queue_url") }.not_to raise_error
end
@@ -27,10 +35,26 @@
it "should set custom sqs_client" do
expect(Aws::SQS::QueuePoller).to receive(:new).with("queue_url", client: sqs_client)
ExampleQueuePoller.new(queue_url: "queue_url", sqs_client: sqs_client)
end
end
+
+ context 'received too many messages' do
+ let(:aws_poller) { instance_double('Aws::SQS::QueuePoller') }
+ let(:max_messages) { 50 }
+
+ before do
+ allow(Aws::SQS::QueuePoller).to receive(:new).and_return(aws_poller)
+ allow(aws_poller).to receive(:before_request).and_yield(OpenStruct.new(received_message_count: max_messages))
+ end
+
+ subject { described_class.new(queue_url: 'http://sqs.aws.com', max_messages: max_messages) }
+
+ it 'throws error' do
+ expect { subject }.to raise_error(UncaughtThrowError, /stop_polling/)
+ end
+ end
end
let(:poller) { ExampleQueuePoller.new(queue_url: queue_url, format: format) }
let(:message_id) { SecureRandom.uuid }
let(:message) { nil }
@@ -242,9 +266,31 @@
allow(subject.queue_poller).to receive(:delete).with(queue_message)
end
it "logs the message" do
subject.poll
+ end
+ end
+
+ context 'SignalException' do
+ let(:message) { { status: 'complete' } }
+ let(:notification) { { 'MessageId' => SecureRandom.uuid, 'Message' => message.to_json, 'Type' => 'Notification', 'Timestamp' => timestamp } }
+ let!(:queue_message) do
+ OpenStruct.new(
+ body: notification.to_json,
+ message_id: message_id,
+ )
+ end
+
+ before do
+ allow(subject.queue_poller).to receive(:poll).and_yield(queue_message)
+ allow(subject.queue_poller).to receive(:delete_message).and_raise(SignalException.new('KILL'))
+ end
+
+ subject { ExampleQueuePoller.new(queue_url: queue_url) }
+
+ it 'stops polling' do
+ expect { subject.poll }.to raise_error(UncaughtThrowError, /stop_polling/)
end
end
end
end