spec/consumer_spec.rb in deimos-ruby-1.11.2 vs spec/consumer_spec.rb in deimos-ruby-1.12.0

- old
+ new

@@ -1,11 +1,10 @@ # frozen_string_literal: true # :nodoc: module ConsumerTest describe Deimos::Consumer, 'Message Consumer' do - prepend_before(:each) do # :nodoc: consumer_class = Class.new(described_class) do schema 'MySchema' namespace 'com.my-namespace' @@ -22,101 +21,113 @@ end end stub_const('ConsumerTest::MyConsumer', consumer_class) end - it 'should consume a message' do - test_consume_message(MyConsumer, - 'test_id' => 'foo', - 'some_int' => 123) do |payload, _metadata| - expect(payload['test_id']).to eq('foo') - end - end + describe 'consume' do + SCHEMA_CLASS_SETTINGS.each do |setting, use_schema_classes| + context "with Schema Class consumption #{setting}" do + before(:each) do + Deimos.configure { |config| config.schema.use_schema_classes = use_schema_classes } + end - it 'should consume a nil message' do - test_consume_message(MyConsumer, nil) do |payload, _metadata| - expect(payload).to be_nil - end - end + it 'should consume a message' do + test_consume_message(MyConsumer, + 'test_id' => 'foo', + 'some_int' => 123) do |payload, _metadata| + expect(payload['test_id']).to eq('foo') + expect(payload['some_int']).to eq(123) + end + end - it 'should consume a message idempotently' do - # testing for a crash and re-consuming the same message/metadata - key = { 'test_id' => 'foo' } - test_metadata = { key: key } - allow_any_instance_of(MyConsumer).to(receive(:decode_key)) do |_instance, k| - k['test_id'] - end - MyConsumer.new.around_consume({ 'test_id' => 'foo', - 'some_int' => 123 }, test_metadata) do |_payload, metadata| - expect(metadata[:key]).to eq('foo') - end - MyConsumer.new.around_consume({ 'test_id' => 'foo', - 'some_int' => 123 }, test_metadata) do |_payload, metadata| - expect(metadata[:key]).to eq('foo') - end - end + it 'should consume a nil message' do + test_consume_message(MyConsumer, nil) do |payload, _metadata| + expect(payload).to be_nil + end + end - it 'should consume a message on a topic' do - test_consume_message('my_consume_topic', - 'test_id' => 'foo', - 'some_int' => 123) do |payload, _metadata| - expect(payload['test_id']).to eq('foo') - end - end + it 'should consume a message idempotently' do + # testing for a crash and re-consuming the same message/metadata + key = { 'test_id' => 'foo' } + test_metadata = { key: key } + allow_any_instance_of(MyConsumer).to(receive(:decode_key)) do |_instance, k| + k['test_id'] + end + MyConsumer.new.around_consume({ 'test_id' => 'foo', + 'some_int' => 123 }, test_metadata) do |_payload, metadata| + expect(metadata[:key]).to eq('foo') + end + MyConsumer.new.around_consume({ 'test_id' => 'foo', + 'some_int' => 123 }, test_metadata) do |_payload, metadata| + expect(metadata[:key]).to eq('foo') + end + end - it 'should fail on invalid message' do - test_consume_invalid_message(MyConsumer, 'invalid' => 'key') - end + it 'should consume a message on a topic' do + test_consume_message('my_consume_topic', + 'test_id' => 'foo', + 'some_int' => 123) do |payload, _metadata| + expect(payload['test_id']).to eq('foo') + expect(payload['some_int']).to eq(123) + end + end - it 'should fail if reraise is false but fatal_error is true' do - Deimos.configure { |config| config.consumers.reraise_errors = false } - test_consume_invalid_message(MyConsumer, 'fatal') - end + it 'should fail on invalid message' do + test_consume_invalid_message(MyConsumer, 'invalid' => 'key') + end - it 'should fail if fatal_error is true globally' do - Deimos.configure do |config| - config.consumers.fatal_error = proc { true } - config.consumers.reraise_errors = false - end - test_consume_invalid_message(MyConsumer, 'invalid' => 'key') - end + it 'should fail if reraise is false but fatal_error is true' do + Deimos.configure { |config| config.consumers.reraise_errors = false } + test_consume_invalid_message(MyConsumer, 'fatal') + end - it 'should fail on message with extra fields' do - test_consume_invalid_message(MyConsumer, - 'test_id' => 'foo', - 'some_int' => 123, - 'extra_field' => 'field name') - end + it 'should fail if fatal_error is true globally' do + Deimos.configure do |config| + config.consumers.fatal_error = proc { true } + config.consumers.reraise_errors = false + end + test_consume_invalid_message(MyConsumer, 'invalid' => 'key') + end - it 'should not fail when before_consume fails without reraising errors' do - Deimos.configure { |config| config.consumers.reraise_errors = false } - expect { - test_consume_message( - MyConsumer, - { 'test_id' => 'foo', - 'some_int' => 123 }, - { skip_expectation: true } - ) { raise 'OH NOES' } - }.not_to raise_error - end + it 'should fail on message with extra fields' do + test_consume_invalid_message(MyConsumer, + 'test_id' => 'foo', + 'some_int' => 123, + 'extra_field' => 'field name') + end - it 'should not fail when consume fails without reraising errors' do - Deimos.configure { |config| config.consumers.reraise_errors = false } - expect { - test_consume_message( - MyConsumer, - { 'invalid' => 'key' }, - { skip_expectation: true } - ) - }.not_to raise_error - end + it 'should not fail when before_consume fails without reraising errors' do + Deimos.configure { |config| config.consumers.reraise_errors = false } + expect { + test_consume_message( + MyConsumer, + { 'test_id' => 'foo', + 'some_int' => 123 }, + { skip_expectation: true } + ) { raise 'OH NOES' } + }.not_to raise_error + end - it 'should call original' do - expect { - test_consume_message(MyConsumer, - { 'test_id' => 'foo', 'some_int' => 123 }, - { call_original: true }) - }.to raise_error('This should not be called unless call_original is set') + it 'should not fail when consume fails without reraising errors' do + Deimos.configure { |config| config.consumers.reraise_errors = false } + expect { + test_consume_message( + MyConsumer, + { 'invalid' => 'key' }, + { skip_expectation: true } + ) + }.not_to raise_error + end + + it 'should call original' do + expect { + test_consume_message(MyConsumer, + { 'test_id' => 'foo', 'some_int' => 123 }, + { call_original: true }) + }.to raise_error('This should not be called unless call_original is set') + end + end + end end describe 'decode_key' do it 'should use the key field in the value if set' do