spec/units/message_driver/client_spec.rb in message-driver-0.3.0 vs spec/units/message_driver/client_spec.rb in message-driver-0.4.0

- old
+ new

@@ -12,212 +12,212 @@ let(:broker_name) { Broker::DEFAULT_BROKER_NAME } let!(:broker) { Broker.configure(broker_name, adapter: Adapters::InMemoryAdapter, logger: logger) } let(:adapter) { broker.adapter } let(:adapter_context) { adapter.new_context } - shared_examples "a Client" do - describe "#broker" do - it "returns the broker_name" do + shared_examples 'a Client' do + describe '#broker' do + it 'returns the broker_name' do expect(subject.broker_name).to eq(broker_name) end end - describe "#current_adapter_context" do + describe '#current_adapter_context' do before { subject.clear_context } - it "returns an adapter_context" do + it 'returns an adapter_context' do expect(subject.current_adapter_context).to be_a Adapters::ContextBase end - it "returns the same adapter context on the second call" do + it 'returns the same adapter context on the second call' do ctx = subject.current_adapter_context expect(subject.current_adapter_context).to be ctx end - context "when called with false" do + context 'when called with false' do it "doesn't initialize the adapter context if there isn't one" do expect(subject.current_adapter_context(false)).to be_nil end end end - context "with a given adapter_context" do + context 'with a given adapter_context' do around(:each) do |example| subject.with_adapter_context(adapter_context, &example) end - describe "#dynamic_destination" do - let(:dest_name) { "my_new_queue" } + describe '#dynamic_destination' do + let(:dest_name) { 'my_new_queue' } let(:dest_options) { {type: 2} } - let(:message_props) { {expires: "soon"} } - let(:created_dest) { double("created destination") } + let(:message_props) { {expires: 'soon'} } + let(:created_dest) { double('created destination') } before do adapter_context.stub(:create_destination) { created_dest } end - it "delegates to the adapter_context" do + it 'delegates to the adapter_context' do result = subject.dynamic_destination(dest_name, dest_options, message_props) expect(result).to be(created_dest) adapter_context.should have_received(:create_destination).with(dest_name, dest_options, message_props) end - it "only requires destination name" do + it 'only requires destination name' do result = subject.dynamic_destination(dest_name) expect(result).to be(created_dest) adapter_context.should have_received(:create_destination).with(dest_name, {}, {}) end end - describe "#publish" do - let(:destination) { broker.destination(:my_queue, "my_queue", exclusive: true) } - let(:body) { "my message" } + describe '#publish' do + let(:destination) { broker.destination(:my_queue, 'my_queue', exclusive: true) } + let(:body) { 'my message' } let(:headers) { {foo: :bar} } let(:properties) { {bar: :baz} } before do adapter_context.stub(:publish) end - it "delegates to the adapter_context" do + it 'delegates to the adapter_context' do subject.publish(destination, body, headers, properties) adapter_context.should have_received(:publish).with(destination, body, headers, properties) end - it "only requires destination and body" do + it 'only requires destination and body' do subject.publish(destination, body) adapter_context.should have_received(:publish).with(destination, body, {}, {}) end - it "looks up the destination if necessary" do + it 'looks up the destination if necessary' do destination subject.publish(:my_queue, body, headers, properties) adapter_context.should have_received(:publish).with(destination, body, headers, properties) end context "when the destination can't be found" do let(:bad_dest_name) { :not_a_queue } - it "raises a MessageDriver:NoSuchDestinationError" do + it 'raises a MessageDriver:NoSuchDestinationError' do expect { subject.publish(bad_dest_name, body, headers, properties) }.to raise_error(MessageDriver::NoSuchDestinationError, /#{bad_dest_name}/) adapter_context.should_not have_received(:publish) end end end - describe "#pop_message" do + describe '#pop_message' do let(:expected) { double(MessageDriver::Message) } - let(:destination) { broker.destination(:my_queue, "my_queue", exclusive: true) } + let(:destination) { broker.destination(:my_queue, 'my_queue', exclusive: true) } let(:options) { {foo: :bar} } before do adapter_context.stub(:pop_message) end - it "delegates to the adapter_context" do + it 'delegates to the adapter_context' do subject.pop_message(destination, options) adapter_context.should have_received(:pop_message).with(destination, options) end - it "looks up the destination if necessary" do + it 'looks up the destination if necessary' do destination subject.pop_message(:my_queue, options) adapter_context.should have_received(:pop_message).with(destination, options) end context "when the destination can't be found" do let(:bad_dest_name) { :not_a_queue } - it "raises a MessageDriver:NoSuchDestinationError" do + it 'raises a MessageDriver:NoSuchDestinationError' do expect { subject.pop_message(bad_dest_name, options) }.to raise_error(MessageDriver::NoSuchDestinationError, /#{bad_dest_name}/) adapter_context.should_not have_received(:pop_message) end end - it "requires the destination and returns the message" do + it 'requires the destination and returns the message' do adapter_context.should_receive(:pop_message).with(destination, {}).and_return(expected) actual = subject.pop_message(destination) expect(actual).to be expected end - it "passes the options through and returns the message" do + it 'passes the options through and returns the message' do adapter_context.should_receive(:pop_message).with(destination, options).and_return(expected) actual = subject.pop_message(destination, options) expect(actual).to be expected end end - describe "#with_message_transaction" do + describe '#with_message_transaction' do before do adapter_context.stub(:begin_transaction) adapter_context.stub(:commit_transaction) adapter_context.stub(:rollback_transaction) end - context "when the adapter supports transactions" do + context 'when the adapter supports transactions' do before do adapter_context.stub(:supports_transactions?) { true } end - it "delegates to the adapter context" do + it 'delegates to the adapter context' do expect { |blk| subject.with_message_transaction(&blk) }.to yield_control adapter_context.should have_received(:begin_transaction) adapter_context.should have_received(:commit_transaction) end - context "when the block raises an error" do - it "calls rollback instead of commit and raises the error" do + context 'when the block raises an error' do + it 'calls rollback instead of commit and raises the error' do expect { subject.with_message_transaction do - raise "having a tough time" + raise 'having a tough time' end - }.to raise_error "having a tough time" + }.to raise_error 'having a tough time' adapter_context.should have_received(:begin_transaction) adapter_context.should_not have_received(:commit_transaction) adapter_context.should have_received(:rollback_transaction) end - context "and the the rollback raises an error" do - it "logs the error from the rollback and raises the original error" do + context 'and the the rollback raises an error' do + it 'logs the error from the rollback and raises the original error' do allow(logger).to receive(:error) - adapter_context.stub(:rollback_transaction).and_raise("rollback failed!") + adapter_context.stub(:rollback_transaction).and_raise('rollback failed!') expect { subject.with_message_transaction do - raise "having a tough time" + raise 'having a tough time' end - }.to raise_error "having a tough time" - expect(logger).to have_received(:error).with(match("rollback failed!")) + }.to raise_error 'having a tough time' + expect(logger).to have_received(:error).with(match('rollback failed!')) end end end - context "when the transactions are nested" do - it "only starts and commits once" do + context 'when the transactions are nested' do + it 'only starts and commits once' do expect { |blk| subject.with_message_transaction do subject.with_message_transaction(&blk) end }.to yield_control adapter_context.should have_received(:begin_transaction).once adapter_context.should have_received(:commit_transaction).once end - context "when the block raises an error" do - it "calls rollback instead of commit and raises the error" do + context 'when the block raises an error' do + it 'calls rollback instead of commit and raises the error' do expect { subject.with_message_transaction do subject.with_message_transaction do - raise "having a tough time" + raise 'having a tough time' end end - }.to raise_error "having a tough time" + }.to raise_error 'having a tough time' adapter_context.should have_received(:begin_transaction).once adapter_context.should_not have_received(:commit_transaction) adapter_context.should have_received(:rollback_transaction).once end end @@ -234,158 +234,158 @@ }.to yield_control adapter_context.should_not have_received(:begin_transaction) adapter_context.should_not have_received(:commit_transaction) adapter_context.should_not have_received(:rollback_transaction) end - it "logs a warning" do + it 'logs a warning' do allow(logger).to receive(:debug) expect { |blk| subject.with_message_transaction(&blk) }.to yield_control - expect(logger).to have_received(:debug).with("this adapter does not support transactions") + expect(logger).to have_received(:debug).with('this adapter does not support transactions') end end end - describe "#ack_message" do - let(:message) { double("message") } + describe '#ack_message' do + let(:message) { double('message') } let(:options) { {foo: :bar} } before do allow(message).to receive(:ack) end - it "calls #ack on the message" do + it 'calls #ack on the message' do subject.ack_message(message) expect(message).to have_received(:ack).with({}) end - it "calls #ack on the message and passes the supplied options" do + it 'calls #ack on the message and passes the supplied options' do subject.ack_message(message, options) expect(message).to have_received(:ack).with(options) end end - describe "#nack_message" do - let(:message) { double("message") } + describe '#nack_message' do + let(:message) { double('message') } let(:options) { {foo: :bar} } before do allow(message).to receive(:nack) end - it "calls #nack on the message" do + it 'calls #nack on the message' do subject.nack_message(message) expect(message).to have_received(:nack).with({}) end - it "calls #nack on the message and passes the supplied options" do + it 'calls #nack on the message and passes the supplied options' do subject.nack_message(message, options) expect(message).to have_received(:nack).with(options) end end - describe "#subscribe" do - let(:destination) { broker.destination(:my_queue, "my_queue", exclusive: true) } - let(:consumer_double) { lambda do |m| end } + describe '#subscribe' do + let(:destination) { broker.destination(:my_queue, 'my_queue', exclusive: true) } + let(:consumer_double) { lambda do |_| end } before do adapter_context.stub(:subscribe) broker.consumer(:my_consumer, &consumer_double) end - it "delegates to the adapter_context" do + it 'delegates to the adapter_context' do adapter_context.should_receive(:subscribe).with(destination, {}) do |&blk| expect(blk).to be(consumer_double) end subject.subscribe(destination, :my_consumer) end - it "passes the options through" do + it 'passes the options through' do options = {foo: :bar} adapter_context.should_receive(:subscribe).with(destination, options) do |&blk| expect(blk).to be(consumer_double) end subject.subscribe(destination, :my_consumer, options) end - it "looks up the destination" do + it 'looks up the destination' do adapter_context.should_receive(:subscribe).with(destination, {}) do |&blk| expect(blk).to be(consumer_double) end subject.subscribe(:my_queue, :my_consumer) end context "when the destination can't be found" do let(:bad_dest_name) { :not_a_queue } - it "raises a MessageDriver:NoSuchDestinationError" do + it 'raises a MessageDriver:NoSuchDestinationError' do expect { subject.subscribe(bad_dest_name, :my_consumer) }.to raise_error(MessageDriver::NoSuchDestinationError, /#{bad_dest_name}/) adapter_context.should_not have_received(:subscribe) end end context "when the consumer can't be found" do let(:bad_consumer_name) { :not_a_consumer } - it "raises a MessageDriver:NoSuchConsumerError" do + it 'raises a MessageDriver:NoSuchConsumerError' do expect { subject.subscribe(destination, bad_consumer_name) }.to raise_error(MessageDriver::NoSuchConsumerError, /#{bad_consumer_name}/) adapter_context.should_not have_received(:subscribe) end end end - describe "#subscribe_with" do - let(:destination) { broker.destination(:my_queue, "my_queue", exclusive: true) } - let(:consumer_double) { lambda do |m| end } + describe '#subscribe_with' do + let(:destination) { broker.destination(:my_queue, 'my_queue', exclusive: true) } + let(:consumer_double) { lambda do |_| end } before do adapter_context.stub(:subscribe) end - it "delegates to the adapter_context" do + it 'delegates to the adapter_context' do adapter_context.should_receive(:subscribe).with(destination, {}) do |&blk| expect(blk).to be(consumer_double) end subject.subscribe_with(destination, &consumer_double) end - it "passes the options through" do + it 'passes the options through' do options = {foo: :bar} adapter_context.should_receive(:subscribe).with(destination, options) do |&blk| expect(blk).to be(consumer_double) end subject.subscribe_with(destination, options, &consumer_double) end - it "looks up the destination" do + it 'looks up the destination' do adapter_context.should_receive(:subscribe).with(destination, {}) do |&blk| expect(blk).to be(consumer_double) end subject.subscribe_with(:my_queue, &consumer_double) end context "when the destination can't be found" do let(:bad_dest_name) { :not_a_queue } - it "raises a MessageDriver:NoSuchDestinationError" do + it 'raises a MessageDriver:NoSuchDestinationError' do expect { subject.subscribe_with(bad_dest_name, &consumer_double) }.to raise_error(MessageDriver::NoSuchDestinationError, /#{bad_dest_name}/) adapter_context.should_not have_received(:subscribe) end end end end end - context "when used as an included module" do + context 'when used as an included module' do subject { TestPublisher.new } - it_behaves_like "a Client" + it_behaves_like 'a Client' end - context "when the module is used directly" do + context 'when the module is used directly' do subject { described_class } - it_behaves_like "a Client" + it_behaves_like 'a Client' end - describe ".for_broker" do + describe '.for_broker' do let(:broker_name) { :my_cool_broker } let(:client) { described_class.for_broker(broker_name) } it "produces a module that extends #{described_class.name}" do expect(client).to be_a Module expect(client).to be_kind_of described_class @@ -394,28 +394,28 @@ it "knows it's broker" do expect(client.broker_name).to eq(broker_name) expect(client.broker).to be(broker) end - context "when the resulting module is used as an included module" do + context 'when the resulting module is used as an included module' do subject! do clz = Class.new clz.send :include, client clz.new end - it_behaves_like "a Client" + it_behaves_like 'a Client' end - context "when the resulting module is used directly" do - it_behaves_like "a Client" do + context 'when the resulting module is used directly' do + it_behaves_like 'a Client' do subject! { client } end end end - describe ".[]" do - it "grabs the client for the given broker" do - expected = double("client") + describe '.[]' do + it 'grabs the client for the given broker' do + expected = double('client') allow(Broker).to receive(:client).with(:test_broker).and_return(expected) expect(described_class[:test_broker]).to be expected end end end