Class: Warren::Handler::Test

Inherits:
Base
  • Object
show all
Defined in:
lib/warren/handler/test.rb

Overview

Class Warren::Test provides provides a dummy RabbitMQ connection pool for use during testing.

Set up a test warren

By default, the test warren is disabled during testing to avoid storing messages unnecessarily. Instead you must explicitly enable it when you wish to test message receipt.

If using rspec it is suggested that you add the following to your spec_helper.rb

config.around(:each, warren: true) do |ex|
  Warren.handler.enable!
  ex.run
  Warren.handler.disable!
end

Making assertions

It is possible to query the test warren about the messages it has seen. In particular the following methods are useful:

Method: Warren::Handler::Test#messages – Documentation for sanger_warren (0.5.0)

Method: Warren::Handler::Test#messages

Defined in:
lib/warren/handler/test.rb

#messagesArray<#routing_key#payload>

Returns an array of all message received by the warren since it was enabled

Returns:

  • (Array<#routing_key#payload>)

    All received messages




181
182
183
184
<span class="info file"># File 'lib/warren/handler/test.rb', line 181</span>

<span class='rubyid_def def kw'>def</span> <span class='rubyid_messages identifier id'>messages</span>
  <span class='rubyid_raise_if_not_tracking identifier id'>raise_if_not_tracking</span>
  <span class='rubyid_@messages ivar id'>@messages</span>
<span class='rubyid_end end kw'>end</span>

Method: Warren::Handler::Test#last_message – Documentation for sanger_warren (0.5.0)

Method: Warren::Handler::Test#last_message

Defined in:
lib/warren/handler/test.rb

#last_message#routing_key#payload

Returns the last message received by the warren

Returns:

  • (#routing_key#payload)

    The last message object received by the warren




141
142
143
<span class="info file"># File 'lib/warren/handler/test.rb', line 141</span>

<span class='rubyid_def def kw'>def</span> <span class='rubyid_last_message identifier id'>last_message</span>
  <span class='rubyid_messages identifier id'>messages</span><span class='dot token'>.</span><span class='rubyid_last identifier id'>last</span>
<span class='rubyid_end end kw'>end</span>

Method: Warren::Handler::Test#message_count – Documentation for sanger_warren (0.5.0)

Method: Warren::Handler::Test#message_count

Defined in:
lib/warren/handler/test.rb

#message_countInteger

Returns the total number message received by the warren since it was enabled

Returns:

  • (Integer)

    The total number of messages




150
151
152
<span class="info file"># File 'lib/warren/handler/test.rb', line 150</span>

<span class='rubyid_def def kw'>def</span> <span class='rubyid_message_count identifier id'>message_count</span>
  <span class='rubyid_messages identifier id'>messages</span><span class='dot token'>.</span><span class='rubyid_length identifier id'>length</span>
<span class='rubyid_end end kw'>end</span>

Method: Warren::Handler::Test#messages_matching – Documentation for sanger_warren (0.5.0)

Method: Warren::Handler::Test#messages_matching

Defined in:
lib/warren/handler/test.rb

#messages_matching(routing_key) ⇒ Integer

Returns the total number message received by the warren matching the given routing_key since it was enabled

Parameters:

  • routing_key (String)

    The routing key to filter by

Returns:

  • (Integer)

    The number of matching messages




162
163
164
<span class="info file"># File 'lib/warren/handler/test.rb', line 162</span>

<span class='rubyid_def def kw'>def</span> <span class='rubyid_messages_matching identifier id'>messages_matching</span><span class='lparen token'>(</span><span class='rubyid_routing_key identifier id'>routing_key</span><span class='rparen token'>)</span>
  <span class='rubyid_messages identifier id'>messages</span><span class='dot token'>.</span><span class='rubyid_count identifier id'>count</span> <span class='lbrace token'>{</span> <span class='bitor op'>|</span><span class='rubyid_message identifier id'>message</span><span class='bitor op'>|</span> <span class='rubyid_message identifier id'>message</span><span class='dot token'>.</span><span class='rubyid_routing_key identifier id'>routing_key</span> <span class='eq op'>==</span> <span class='rubyid_routing_key identifier id'>routing_key</span> <span class='rbrace token'>}</span>
<span class='rubyid_end end kw'>end</span>

Example

describe QcResult, warren: true do
  let(:warren) { Warren.handler }

  setup { warren.clear_messages }
  let(:resource) { build :qc_result }
  let(:routing_key) { 'test.message.qc_result.' }

  it 'broadcasts the resource' do
    resource.save!
    expect(warren.messages_matching(routing_key)).to eq(1)
  end
end

Defined Under Namespace

Classes: Channel

Constant Summary collapse

DISABLED_WARNING =

Warning displayed if the user attempts to make assertions against the handler without having enabled it.

"Test made against a disabled warren.\nWarren::Handler::Test must be explicitly enabled to track messages,\nit is a good idea to disable it again after testing the relevant\nbehaviour. This ensures we track messages on a per-test basis, and\navoids unnecessary message storage.\n\nIf using rspec it is suggested that you add the following to your\nspec_helper.rb\n\nconfig.around(:each, warren: true) do |ex|\n  Warren.handler.enable!\n  ex.run\n  Warren.handler.disable!\nend\n\nYou can then tag tests with warren: true to enable warren testing.\n"

Instance Method Summary collapse

Methods inherited from Base

#connect, #disconnect

Constructor Details

#initialize(*_args) ⇒ Test

Creates a test warren with no messages. Test warrens are shared across all threads.

Parameters:

  • _args (_)

    Configuration arguments are ignored.



98
99
100
101
102
103
# File 'lib/warren/handler/test.rb', line 98

def initialize(*_args)
  super()
  @messages = []
  @exchanges = []
  @enabled = false
end

Instance Method Details

#<<(message) ⇒ Object

Disable message logging if not required



187
188
189
# File 'lib/warren/handler/test.rb', line 187

def <<(message)
  @messages << message if @enabled
end

#clear_messagesArray

Clear any logged messaged

Returns:

  • (Array)

    The new empty array, lacking messages



131
132
133
134
# File 'lib/warren/handler/test.rb', line 131

def clear_messages
  @messages = []
  @exchanges = []
end

#disable!Object

Clean up after ourselves to avoid memory leaks



173
174
175
176
# File 'lib/warren/handler/test.rb', line 173

def disable!
  @enabled = false
  clear_messages
end

#enable!Object

Enable the warren



167
168
169
170
# File 'lib/warren/handler/test.rb', line 167

def enable!
  @enabled = true
  clear_messages
end

#last_message#routing_key#payload

Returns the last message received by the warren

Returns:

  • (#routing_key#payload)

    The last message object received by the warren



141
142
143
# File 'lib/warren/handler/test.rb', line 141

def last_message
  messages.last
end

#message_countInteger

Returns the total number message received by the warren since it was enabled

Returns:

  • (Integer)

    The total number of messages



150
151
152
# File 'lib/warren/handler/test.rb', line 150

def message_count
  messages.length
end

#messagesArray<#routing_key#payload>

Returns an array of all message received by the warren since it was enabled

Returns:

  • (Array<#routing_key#payload>)

    All received messages



181
182
183
184
# File 'lib/warren/handler/test.rb', line 181

def messages
  raise_if_not_tracking
  @messages
end

#messages_matching(routing_key) ⇒ Integer

Returns the total number message received by the warren matching the given routing_key since it was enabled

Parameters:

  • routing_key (String)

    The routing key to filter by

Returns:

  • (Integer)

    The number of matching messages



162
163
164
# File 'lib/warren/handler/test.rb', line 162

def messages_matching(routing_key)
  messages.count { |message| message.routing_key == routing_key }
end

#new_channelWarren::Test::Channel

Returns a new channel, which proxies all message back to #messages on the Warren::Handler::Test

Returns:

  • (Warren::Test::Channel)

    A rabbitMQ channel that logs messaged to the test warren



122
123
124
# File 'lib/warren/handler/test.rb', line 122

def new_channel
  Channel.new(@logger, routing_key_template: @routing_key_template)
end

#with_channel {|new_channel| ... } ⇒ void

This method returns an undefined value.

Yields a new channel, which proxies all message back to #messages on the Warren::Handler::Test

Yields:

Yield Returns:

  • (Warren::Test::Channel)

    A rabbitMQ channel that logs messaged to the test warren



112
113
114
# File 'lib/warren/handler/test.rb', line 112

def with_channel
  yield new_channel
end