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