Module: Deimos::TestHelpers
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/deimos/test_helpers.rb
Overview
Include this module in your RSpec spec_helper to stub out external dependencies and add methods to use to test encoding/decoding.
Class Method Summary collapse
- .included(base) ⇒ Object
- .normalize_message(message) ⇒ Object
- .sent_messages ⇒ Array<Hash>
-
.unit_test! ⇒ void
Set the config to the right settings for a unit test.
Instance Method Summary collapse
-
#clear_kafka_messages! ⇒ void
Clear all sent messages - e.g.
- #sent_messages ⇒ Array<Hash>
-
#test_consume_batch(handler_class_or_topic, payloads, keys: [], call_original: nil, single: false, partition_keys: []) ⇒ void
Test that a given handler will consume a given batch payload correctly, i.e.
-
#test_consume_message(handler_class_or_topic, payload, key: nil, call_original: nil, partition_key: nil, &block) ⇒ void
Test that a given handler will consume a given payload correctly, i.e.
Class Method Details
.included(base) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/deimos/test_helpers.rb', line 16 def self.included(base) super base.include Karafka::Testing::RSpec::Helpers # Ensure that we only use Karafka.producer, not the producers we set up for multi-broker # configs. Only Karafka.producer works with Karafka test helpers. RSpec.configure do |config| config.before(:each) do allow(Deimos).to receive(:producer_for).and_return(Karafka.producer) end end end |
.normalize_message(message) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/deimos/test_helpers.rb', line 73 def self.() return nil if .nil? if .respond_to?(:to_h) = .to_h end if .respond_to?(:with_indifferent_access) = .with_indifferent_access end end |
.sent_messages ⇒ Array<Hash>
36 37 38 39 40 41 42 43 44 |
# File 'lib/deimos/test_helpers.rb', line 36 def Karafka.producer.client..map do |m| = m.except(:label).deep_dup Deimos.() [:payload] = Deimos::TestHelpers.([:payload]) [:key] = Deimos::TestHelpers.([:key]) end end |
.unit_test! ⇒ void
This method returns an undefined value.
Set the config to the right settings for a unit test
48 49 50 51 52 |
# File 'lib/deimos/test_helpers.rb', line 48 def unit_test! Deimos.config.schema.backend = :avro_validation warn("unit_test! is deprecated and can be replaced by setting Deimos's schema backend " \ 'to `:avro_validation`. All other test behavior is provided by Karafka.') end |
Instance Method Details
#clear_kafka_messages! ⇒ void
This method returns an undefined value.
Clear all sent messages - e.g. if we want to check that particular messages were sent or not sent after a point in time.
143 144 145 146 147 |
# File 'lib/deimos/test_helpers.rb', line 143 def puts '[Deprecated] clear_kafka_messages! can be replaced with' \ '`karafka.produced_messages.clear`' karafka..clear end |
#sent_messages ⇒ Array<Hash>
30 31 32 |
# File 'lib/deimos/test_helpers.rb', line 30 def self.class. end |
#test_consume_batch(handler_class_or_topic, payloads, keys: [], call_original: nil, single: false, partition_keys: []) ⇒ void
This method returns an undefined value.
Test that a given handler will consume a given batch payload correctly, i.e. that the schema is correct. If a block is given, that block will be executed when consume is called. Otherwise it will just confirm that consume is called at all. Deimos::Consumer or the topic as a string
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 |
# File 'lib/deimos/test_helpers.rb', line 190 def test_consume_batch(handler_class_or_topic, payloads, keys: [], call_original: nil, single: false, partition_keys: []) unless call_original.nil? puts 'test_consume_batch(call_original: true) is deprecated and will be removed' \ 'in the future. You can remove the call_original parameter.' end karafka..clear topic_name = if handler_class_or_topic.is_a?(String) handler_class_or_topic else Deimos.topic_for_consumer(handler_class_or_topic) end consumer = karafka.consumer_for(topic_name) Deimos.karafka_config_for(topic: topic_name).(single) # don't record messages sent with test_consume_batch = karafka..dup payloads.each_with_index do |payload, i| karafka.produce(payload, { key: keys[i], partition_key: partition_keys[i], topic: consumer.topic.name }) end if block_given? if single allow(consumer).to receive(:consume_message) do yield(consumer..first.payload, consumer..first.as_json['metadata']) end else allow(consumer).to receive(:consume_batch) do yield(consumer.) end end end # sent_messages should only include messages sent by application code, not this method karafka..clear karafka..concat() consumer.consume end |
#test_consume_message(handler_class_or_topic, payload, key: nil, call_original: nil, partition_key: nil, &block) ⇒ void
This method returns an undefined value.
Test that a given handler will consume a given payload correctly, i.e. that the schema is correct. If a block is given, that block will be executed when consume is called. Otherwise it will just confirm that consume is called at all. Deimos::Consumer or the topic as a string
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/deimos/test_helpers.rb', line 160 def (handler_class_or_topic, payload, key: nil, call_original: nil, partition_key: nil, &block) unless call_original.nil? puts 'test_consume_message(call_original: true) is deprecated and will be removed' \ 'in the future. You can remove the call_original parameter.' end test_consume_batch(handler_class_or_topic, [payload], keys: [key], partition_keys: [partition_key], single: true, &block) end |