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 |
# File 'lib/deimos/test_helpers.rb', line 16 def self.included(base) super base.include Karafka::Testing::RSpec::Helpers end |
.normalize_message(message) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/deimos/test_helpers.rb', line 65 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>
28 29 30 31 32 33 34 35 36 |
# File 'lib/deimos/test_helpers.rb', line 28 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
40 41 42 43 44 |
# File 'lib/deimos/test_helpers.rb', line 40 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.
135 136 137 138 139 |
# File 'lib/deimos/test_helpers.rb', line 135 def puts '[Deprecated] clear_kafka_messages! can be replaced with' \ '`karafka.produced_messages.clear`' karafka..clear end |
#sent_messages ⇒ Array<Hash>
22 23 24 |
# File 'lib/deimos/test_helpers.rb', line 22 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
182 183 184 185 186 187 188 189 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 |
# File 'lib/deimos/test_helpers.rb', line 182 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
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/deimos/test_helpers.rb', line 152 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 |