karafka-testing 2.3.1 → 2.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b5e94cc98b3418a25cd549e4e9f4851d22fa819b499b77185afb7ee1e1f10c6
4
- data.tar.gz: 415e32601301d2f07de6c575109c443af8f489c178041e387d6fe1d1530550ca
3
+ metadata.gz: 91a12f6c61514bc890bdfd8f6c91e1a834dd1516299f8a6d421c54037d3b55b3
4
+ data.tar.gz: 70d467cb5994992d5a3046511bca0676fabc673b2b36c45d366b98d6aeeeae06
5
5
  SHA512:
6
- metadata.gz: 17eb73114b43f84c813ad176f8a8913fde8f175f0b41ecbe78bfd3bb20c30259aaab791cd9cb719c1aab9cef0daceed651d7c342201fffd227db495f5d55ce51
7
- data.tar.gz: e42445092d3ab33eb27d1145c9897f94b3758bd57b624935fd8d8fd3f37999d3333caf70b2c713196a672978b478a8dc4a5923aa6924387331c076334e14391f
6
+ metadata.gz: ebb18327ff48e4443377a54a09d35611c84f6806bc298ceb0792d1b2862f7f1c35e2c528bdb8b7e611d61998201f851dc8648530d398fdbbd33ec504d7fedae7
7
+ data.tar.gz: 9898b5f1bd9264b696361cfd60039226864eb26743722c21a251fad26d2bd9d633b9be0cadcf62dbc7638a5287b69a0aaf720b12ad70595cc03c6bc1c4fe920f
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Karafka Test gem changelog
2
2
 
3
+ ## 2.3.3 (2024-04-19)
4
+ - [Refactor] Extract common components for Minitest and RSpec.
5
+ - [Fix] Fix a case where multiplexed SG would fail with `TopicInManyConsumerGroupsError`
6
+
7
+ ## 2.3.2 (2024-04-03)
8
+ - [Enhancement] Support `Minitest::Spec`.
9
+
3
10
  ## 2.3.1 (2024-03-07)
4
11
  - [Enhancement] Prevent usage of testing when Karafka is not loaded.
5
12
  - [Enhancement] Prevent usage of testing when Karafka is not initialized.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- karafka-testing (2.3.1)
4
+ karafka-testing (2.3.3)
5
5
  karafka (>= 2.3.0, < 2.4.0)
6
6
  waterdrop (>= 2.6.12)
7
7
 
@@ -15,17 +15,7 @@ module Karafka
15
15
  TopicInManyConsumerGroupsError = Class.new(BaseError)
16
16
 
17
17
  # Raised when you requested a topic from a consumer group that does not exist
18
- ConsumerGroupNotFoundError = Class.new(BaseError)
19
-
20
- # Raised when trying to use testing without Karafka app being visible
21
- # If you are seeing this error, then you tried to use testing helpers without Karafka being
22
- # loaded prior to this happening.
23
- KarafkaNotLoadedError = Class.new(BaseError)
24
-
25
- # Raised when there is an attempt to use the testing primitives without Karafka app being
26
- # configured. Prior to initialization process, most of config values are nils, etc and
27
- # mocks will not work.
28
- KarafkaNotInitializedError = Class.new(BaseError)
18
+ ConsumerGroupNotFound = Class.new(BaseError)
29
19
  end
30
20
  end
31
21
  end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Karafka
4
+ module Testing
5
+ # Common helper methods that are shared in between RSpec and Minitest
6
+ module Helpers
7
+ class << self
8
+ # Finds all the routing topics matching requested topic within all topics or within
9
+ # provided consumer group based on name
10
+ #
11
+ # @param requested_topic [String] requested topic name
12
+ # @param requested_consumer_group [String] requested consumer group or nil to look in all
13
+ # @return [Array<Karafka::Routing::Topic>] all matching topics
14
+ #
15
+ # @note Since we run the lookup on subscription groups, the search will automatically
16
+ # expand with matching patterns
17
+ def karafka_consumer_find_candidate_topics(requested_topic, requested_consumer_group)
18
+ karafka_consumer_find_subscription_groups(requested_consumer_group)
19
+ # multiplexed subscriptions of the same origin share name, thus we can reduced
20
+ # multiplexing to the first one as during testing, there is no multiplexing parallel
21
+ # execution anyhow
22
+ .uniq(&:name)
23
+ .map(&:topics)
24
+ .filter_map do |topics|
25
+ topics.find(requested_topic.to_s)
26
+ rescue Karafka::Errors::TopicNotFoundError
27
+ nil
28
+ end
29
+ end
30
+
31
+ # Finds subscription groups from the requested consumer group or selects all if no
32
+ # consumer group specified
33
+ # @param requested_consumer_group [String] requested consumer group or nil to look in all
34
+ # @return [Array<Karafka::Routing::SubscriptionGroup>] requested subscription groups
35
+ def karafka_consumer_find_subscription_groups(requested_consumer_group)
36
+ if requested_consumer_group && !requested_consumer_group.empty?
37
+ ::Karafka::App
38
+ .subscription_groups
39
+ # Find matching consumer group
40
+ .find { |cg, _sgs| cg.name == requested_consumer_group.to_s }
41
+ # Raise error if not found
42
+ .tap { |cg| cg || raise(Errors::ConsumerGroupNotFound, requested_consumer_group) }
43
+ # Since lookup was on a hash, get the value, that is subscription groups
44
+ .last
45
+ else
46
+ ::Karafka::App
47
+ .subscription_groups
48
+ .values
49
+ .flatten
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'karafka/testing/errors'
4
+ require 'karafka/testing/helpers'
4
5
  require 'karafka/testing/spec_consumer_client'
5
6
  require 'karafka/testing/spec_producer_client'
6
7
  require 'karafka/testing/minitest/proxy'
@@ -16,19 +17,25 @@ module Karafka
16
17
  # Adds all the needed extra functionalities to the minitest group
17
18
  # @param base [Class] Minitest example group we want to extend
18
19
  def included(base)
19
- base.class_eval do
20
- setup do
21
- Karafka::Testing.ensure_karafka_initialized!
20
+ eval_flow = lambda do
21
+ @karafka = Karafka::Testing::Minitest::Proxy.new(self)
22
+ @_karafka_consumer_messages = []
23
+ @_karafka_consumer_client = Karafka::Testing::SpecConsumerClient.new
24
+ @_karafka_producer_client = Karafka::Testing::SpecProducerClient.new(self)
22
25
 
23
- @karafka = Karafka::Testing::Minitest::Proxy.new(self)
24
- @_karafka_consumer_messages = []
25
- @_karafka_consumer_client = Karafka::Testing::SpecConsumerClient.new
26
- @_karafka_producer_client = Karafka::Testing::SpecProducerClient.new(self)
26
+ @_karafka_consumer_messages.clear
27
+ @_karafka_producer_client.reset
27
28
 
28
- @_karafka_consumer_messages.clear
29
- @_karafka_producer_client.reset
29
+ Karafka.producer.stubs(:client).returns(@_karafka_producer_client)
30
+ end
30
31
 
31
- Karafka.producer.stubs(:client).returns(@_karafka_producer_client)
32
+ if base.to_s == 'Minitest::Spec'
33
+ base.class_eval do
34
+ before(&eval_flow)
35
+ end
36
+ else
37
+ base.class_eval do
38
+ setup(&eval_flow)
32
39
  end
33
40
  end
34
41
  end
@@ -47,7 +54,7 @@ module Karafka
47
54
  # @example Creates a consumer instance with settings for `my_requested_topic`
48
55
  # consumer = @karafka.consumer_for(:my_requested_topic)
49
56
  def _karafka_consumer_for(requested_topic, requested_consumer_group = nil)
50
- selected_topics = _karafka_consumer_find_candidate_topics(
57
+ selected_topics = Testing::Helpers.karafka_consumer_find_candidate_topics(
51
58
  requested_topic.to_s,
52
59
  requested_consumer_group.to_s
53
60
  )
@@ -160,48 +167,6 @@ module Karafka
160
167
  @consumer.instance_variable_set('@used', true)
161
168
  @consumer
162
169
  end
163
-
164
- # Finds all the routing topics matching requested topic within all topics or within
165
- # provided consumer group based on name
166
- #
167
- # @param requested_topic [String] requested topic name
168
- # @param requested_consumer_group [String] requested consumer group or nil to look in all
169
- # @return [Array<Karafka::Routing::Topic>] all matching topics
170
- #
171
- # @note Since we run the lookup on subscription groups, the search will automatically
172
- # expand with matching patterns
173
- def _karafka_consumer_find_candidate_topics(requested_topic, requested_consumer_group)
174
- _karafka_consumer_find_subscription_groups(requested_consumer_group)
175
- .map(&:topics)
176
- .filter_map do |topics|
177
- topics.find(requested_topic.to_s)
178
- rescue Karafka::Errors::TopicNotFoundError
179
- nil
180
- end
181
- .uniq(&:consumer_group)
182
- end
183
-
184
- # Finds subscription groups from the requested consumer group or selects all if no
185
- # consumer group specified
186
- # @param requested_consumer_group [String] requested consumer group or nil to look in all
187
- # @return [Array<Karafka::Routing::SubscriptionGroup>] requested subscription groups
188
- def _karafka_consumer_find_subscription_groups(requested_consumer_group)
189
- if requested_consumer_group && !requested_consumer_group.empty?
190
- ::Karafka::App
191
- .subscription_groups
192
- # Find matching consumer group
193
- .find { |cg, _sgs| cg.name == requested_consumer_group.to_s }
194
- # Raise error if not found
195
- .tap { |cg| cg || raise(Errors::ConsumerGroupNotFound, requested_consumer_group) }
196
- # Since lookup was on a hash, get the value, that is subscription groups
197
- .last
198
- else
199
- ::Karafka::App
200
- .subscription_groups
201
- .values
202
- .flatten
203
- end
204
- end
205
170
  end
206
171
  end
207
172
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'waterdrop'
4
4
  require 'karafka/testing/errors'
5
+ require 'karafka/testing/helpers'
5
6
  require 'karafka/testing/spec_consumer_client'
6
7
  require 'karafka/testing/spec_producer_client'
7
8
  require 'karafka/testing/rspec/proxy'
@@ -30,8 +31,6 @@ module Karafka
30
31
  base.let(:_karafka_producer_client) { Karafka::Testing::SpecProducerClient.new(self) }
31
32
 
32
33
  base.prepend_before do
33
- Karafka::Testing.ensure_karafka_initialized!
34
-
35
34
  _karafka_consumer_messages.clear
36
35
  _karafka_producer_client.reset
37
36
 
@@ -59,7 +58,7 @@ module Karafka
59
58
  # subject(:consumer) { karafka.consumer_for(:my_requested_topic) }
60
59
  # end
61
60
  def _karafka_consumer_for(requested_topic, requested_consumer_group = nil)
62
- selected_topics = _karafka_consumer_find_candidate_topics(
61
+ selected_topics = Testing::Helpers.karafka_consumer_find_candidate_topics(
63
62
  requested_topic.to_s,
64
63
  requested_consumer_group.to_s
65
64
  )
@@ -178,48 +177,6 @@ module Karafka
178
177
  consumer.instance_variable_set('@used', true)
179
178
  consumer
180
179
  end
181
-
182
- # Finds all the routing topics matching requested topic within all topics or within
183
- # provided consumer group based on name
184
- #
185
- # @param requested_topic [String] requested topic name
186
- # @param requested_consumer_group [String] requested consumer group or nil to look in all
187
- # @return [Array<Karafka::Routing::Topic>] all matching topics
188
- #
189
- # @note Since we run the lookup on subscription groups, the search will automatically
190
- # expand with matching patterns
191
- def _karafka_consumer_find_candidate_topics(requested_topic, requested_consumer_group)
192
- _karafka_consumer_find_subscription_groups(requested_consumer_group)
193
- .map(&:topics)
194
- .filter_map do |topics|
195
- topics.find(requested_topic.to_s)
196
- rescue Karafka::Errors::TopicNotFoundError
197
- nil
198
- end
199
- .uniq(&:consumer_group)
200
- end
201
-
202
- # Finds subscription groups from the requested consumer group or selects all if no
203
- # consumer group specified
204
- # @param requested_consumer_group [String] requested consumer group or nil to look in all
205
- # @return [Array<Karafka::Routing::SubscriptionGroup>] requested subscription groups
206
- def _karafka_consumer_find_subscription_groups(requested_consumer_group)
207
- if requested_consumer_group && !requested_consumer_group.empty?
208
- ::Karafka::App
209
- .subscription_groups
210
- # Find matching consumer group
211
- .find { |cg, _sgs| cg.name == requested_consumer_group.to_s }
212
- # Raise error if not found
213
- .tap { |cg| cg || raise(Errors::ConsumerGroupNotFound, requested_consumer_group) }
214
- # Since lookup was on a hash, get the value, that is subscription groups
215
- .last
216
- else
217
- ::Karafka::App
218
- .subscription_groups
219
- .values
220
- .flatten
221
- end
222
- end
223
180
  end
224
181
  end
225
182
  end
@@ -4,6 +4,6 @@
4
4
  module Karafka
5
5
  module Testing
6
6
  # Current version of gem. It should match Karafka framework version
7
- VERSION = '2.3.1'
7
+ VERSION = '2.3.3'
8
8
  end
9
9
  end
@@ -4,32 +4,5 @@
4
4
  module Karafka
5
5
  # Testing lib module
6
6
  module Testing
7
- class << self
8
- # Makes sure, that we do not use the testing stubs, etc when Karafka app is not loaded
9
- #
10
- # You should never use karafka-testing primitives when framework is not loaded because
11
- # testing lib stubs certain pieces of Karafka that need to be initialized.
12
- def ensure_karafka_loaded!
13
- return if ::Karafka.const_defined?('App', false)
14
-
15
- raise(
16
- Karafka::Testing::Errors::KarafkaNotLoadedError,
17
- 'Make sure to load Karafka framework prior to usage of the testing components.'
18
- )
19
- end
20
-
21
- # If you do not initialize Karafka always within your specs, do not include/use this lib
22
- # in places where Karafka would not be loaded.
23
- def ensure_karafka_initialized!
24
- ensure_karafka_loaded!
25
-
26
- return unless Karafka::App.initializing?
27
-
28
- raise(
29
- Karafka::Testing::Errors::KarafkaNotInitializedError,
30
- 'Make sure to initialize Karafka framework prior to usage of the testing components.'
31
- )
32
- end
33
- end
34
7
  end
35
8
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: karafka-testing
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maciej Mensfeld
@@ -35,7 +35,7 @@ cert_chain:
35
35
  AnG1dJU+yL2BK7vaVytLTstJME5mepSZ46qqIJXMuWob/YPDmVaBF39TDSG9e34s
36
36
  msG3BiCqgOgHAnL23+CN3Rt8MsuRfEtoTKpJVcCfoEoNHOkc
37
37
  -----END CERTIFICATE-----
38
- date: 2024-03-07 00:00:00.000000000 Z
38
+ date: 2024-04-22 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: karafka
@@ -97,6 +97,7 @@ files:
97
97
  - lib/karafka-testing.rb
98
98
  - lib/karafka/testing.rb
99
99
  - lib/karafka/testing/errors.rb
100
+ - lib/karafka/testing/helpers.rb
100
101
  - lib/karafka/testing/minitest/helpers.rb
101
102
  - lib/karafka/testing/minitest/proxy.rb
102
103
  - lib/karafka/testing/rspec/helpers.rb
metadata.gz.sig CHANGED
Binary file