spec/queue_poller_spec.rb in pheme-0.0.3 vs spec/queue_poller_spec.rb in pheme-0.0.4
- old
+ new
@@ -1,10 +1,12 @@
describe Pheme::QueuePoller do
let(:queue_url) { "https://sqs.us-east-1.amazonaws.com/whatever" }
let(:poller) do
poller = double
allow(poller).to receive(:poll).with(kind_of(Hash))
+ allow(poller).to receive(:parse_message)
+ allow(poller).to receive(:before_request)
poller
end
before(:each) do
use_default_configuration!
allow(Aws::SQS::QueuePoller).to receive(:new) { poller }
@@ -18,9 +20,67 @@
end
context "when initialized with a nil queue_url" do
it "raises an ArgumentError" do
expect { ExampleQueuePoller.new(queue_url: nil) }.to raise_error(ArgumentError)
+ end
+ end
+
+ context "when initialized with max_messages" do
+ it "should set max_messages" do
+ expect(ExampleQueuePoller.new(queue_url: "queue_url", max_messages: 5).max_messages).to eq(5)
+ end
+ end
+ end
+
+ describe "#parse_message" do
+ context "with JSON message" do
+ subject { ExampleQueuePoller.new(queue_url: queue_url) }
+
+ let!(:message) { OpenStruct.new({
+ body: '{"Message":"{\"test\":\"test\"}"}'
+ })}
+
+ it 'should parse the message correctly' do
+ expect(subject.parse_message(message).test).to eq("test")
+ end
+ end
+
+ context "with CSV message" do
+ subject { ExampleQueuePoller.new(queue_url: queue_url, format: :csv) }
+
+ let!(:message) { OpenStruct.new({
+ body:'{"Message":"test,test2\nvalue,value2\nvalue3,value4"}'
+ })}
+
+ it 'should parse the message correctly' do
+ expect(subject.parse_message(message)).to be_a(Array)
+ expect(subject.parse_message(message).count).to eq(2)
+ end
+ end
+
+ context "with unknown message format" do
+ subject { ExampleQueuePoller.new(queue_url: queue_url, format: :invalid_format) }
+
+ let!(:message) { OpenStruct.new({
+ body:'{"Message":"test,test2\nvalue,value2\nvalue3,value4"}'
+ })}
+
+ it 'should raise an error' do
+ expect{ subject.parse_message(message) }.to raise_error
+ end
+ end
+
+ context "with array JSON message" do
+ subject { ExampleQueuePoller.new(queue_url: queue_url).parse_message(message) }
+ let!(:message) { OpenStruct.new({
+ body: '{"Message":"[[{\"test\":\"test\"}]]"}'
+ })}
+ it 'should parse the message correctly' do
+ expect(subject.first.first.test).to eq("test")
+ expect(subject).to be_a Array
+ expect(subject.first).to be_a Array
+ expect(subject.first.first).to be_a RecursiveOpenStruct
end
end
end
describe "#poll" do