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.
- .with_mock_backends ⇒ Object
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
85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/deimos/test_helpers.rb', line 85 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 |
.with_mock_backends ⇒ Object
54 55 56 57 58 59 60 61 62 63 |
# File 'lib/deimos/test_helpers.rb', line 54 def with_mock_backends Deimos.mock_backends = true Deimos.karafka_configs.each do |config| config.deserializers[:payload].try(:reset_backend) config.deserializers[:key].try(:reset_backend) end yield ensure Deimos.mock_backends = false 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.
172 173 174 175 176 |
# File 'lib/deimos/test_helpers.rb', line 172 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
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 |
# File 'lib/deimos/test_helpers.rb', line 219 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
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
# File 'lib/deimos/test_helpers.rb', line 189 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 |