karafka-testing 2.4.0.beta1 → 2.4.0.rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e62624d40d7aa454841a212de1beaf67127ef06873bd0604dcbfe4747a397cf5
4
- data.tar.gz: 2e031857e92ce50f55ea24e3cb32309a070c11ea930de263f05ec9c82f24992d
3
+ metadata.gz: 91dfd9d61d189ef4382255dd90805291525c7ce596002f5932eddbf60d0ed4d4
4
+ data.tar.gz: c288612346f823379c454a2de964c6600a4705a99704c2261b78e8f685f33068
5
5
  SHA512:
6
- metadata.gz: b2c5398aa8d03a31499a29b60f3e45456e6151cbbd57f979dac9ddc6aea283e5fb6b0613a1df336fb3d46284af16861125a7df980c9701ace2af2d2d3ef8336f
7
- data.tar.gz: f32201af31b9e0840ce41e7c17a16a64b7fedfb99a4cb1815f2b18a1fa45bed474eb9dc02e3b68e504a0d2be2191a141e64ed52fad25fee9ba86e42030250a0f
6
+ metadata.gz: 49458d3a51b4d8ba2a6b073c67dd43a85d1987aa9a300a1047a5268d6f61ae85d4c60a587fe9e8078bec0c61a900b129a8272a931a81fef3f017d548d04ce83b
7
+ data.tar.gz: 27e88641a3c2b0795731bebddf56bb5a81159730152c8fb3859543af5dcdb8bca9f762e4edaaafee931ef8cfc6d18f62c44a2993c321d44b104160826922d974
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -2,7 +2,12 @@
2
2
 
3
3
  ## 2.4.0 (Unreleased)
4
4
  - **[Breaking]** Drop Ruby `2.7` support.
5
+ - [Refactor] Extract common components for Minitest and RSpec.
5
6
  - [Fix] Support again `require: false` on gem loading.
7
+ - [Fix] Fix a case where multiplexed SG would fail with `TopicInManyConsumerGroupsError`
8
+
9
+ ## 2.3.2 (2024-04-03)
10
+ - [Enhancement] Support `Minitest::Spec`.
6
11
 
7
12
  ## 2.3.1 (2024-03-07)
8
13
  - [Enhancement] Prevent usage of testing when Karafka is not loaded.
data/Gemfile.lock CHANGED
@@ -1,28 +1,28 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- karafka-testing (2.4.0.beta1)
5
- karafka (>= 2.3.0, < 2.5.0)
6
- waterdrop (>= 2.7.0.beta2)
4
+ karafka-testing (2.4.0.rc2)
5
+ karafka (>= 2.4.0.beta1, < 2.5.0)
6
+ waterdrop (>= 2.7.0.rc1)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
11
  ffi (1.16.3)
12
- karafka (2.3.3)
13
- karafka-core (>= 2.3.0, < 2.4.0)
14
- waterdrop (>= 2.6.12, < 3.0.0)
12
+ karafka (2.4.0.beta1)
13
+ karafka-core (>= 2.4.0.rc1, < 2.5.0)
14
+ waterdrop (>= 2.7.0.rc1, < 3.0.0)
15
15
  zeitwerk (~> 2.3)
16
- karafka-core (2.4.0.beta2)
17
- karafka-rdkafka (>= 0.15.0.beta3, < 0.16.0)
18
- karafka-rdkafka (0.15.0.beta3)
16
+ karafka-core (2.4.0.rc1)
17
+ karafka-rdkafka (>= 0.15.0.rc1, < 0.16.0)
18
+ karafka-rdkafka (0.15.0.rc1)
19
19
  ffi (~> 1.15)
20
20
  mini_portile2 (~> 2.6)
21
21
  rake (> 12)
22
22
  mini_portile2 (2.8.5)
23
- rake (13.1.0)
24
- waterdrop (2.7.0.beta2)
25
- karafka-core (>= 2.4.0.beta2, < 3.0.0)
23
+ rake (13.2.1)
24
+ waterdrop (2.7.0.rc1)
25
+ karafka-core (>= 2.4.0.rc1, < 3.0.0)
26
26
  zeitwerk (~> 2.3)
27
27
  zeitwerk (2.6.13)
28
28
 
@@ -34,4 +34,4 @@ DEPENDENCIES
34
34
  karafka-testing!
35
35
 
36
36
  BUNDLED WITH
37
- 2.5.6
37
+ 2.5.7
@@ -24,8 +24,8 @@ Gem::Specification.new do |spec|
24
24
  spec.signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
25
25
  end
26
26
 
27
- spec.add_dependency 'karafka', '>= 2.3.0', '< 2.5.0'
28
- spec.add_dependency 'waterdrop', '>= 2.7.0.beta2'
27
+ spec.add_dependency 'karafka', '>= 2.4.0.beta1', '< 2.5.0'
28
+ spec.add_dependency 'waterdrop', '>= 2.7.0.rc1'
29
29
 
30
30
  spec.required_ruby_version = '>= 3.0.0'
31
31
 
@@ -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
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'karafka/testing'
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/minitest/proxy'
@@ -17,19 +18,27 @@ module Karafka
17
18
  # Adds all the needed extra functionalities to the minitest group
18
19
  # @param base [Class] Minitest example group we want to extend
19
20
  def included(base)
20
- base.class_eval do
21
- setup do
22
- Karafka::Testing.ensure_karafka_initialized!
21
+ eval_flow = lambda do
22
+ Karafka::Testing.ensure_karafka_initialized!
23
23
 
24
- @karafka = Karafka::Testing::Minitest::Proxy.new(self)
25
- @_karafka_consumer_messages = []
26
- @_karafka_consumer_client = Karafka::Testing::SpecConsumerClient.new
27
- @_karafka_producer_client = Karafka::Testing::SpecProducerClient.new(self)
24
+ @karafka = Karafka::Testing::Minitest::Proxy.new(self)
25
+ @_karafka_consumer_messages = []
26
+ @_karafka_consumer_client = Karafka::Testing::SpecConsumerClient.new
27
+ @_karafka_producer_client = Karafka::Testing::SpecProducerClient.new(self)
28
28
 
29
- @_karafka_consumer_messages.clear
30
- @_karafka_producer_client.reset
29
+ @_karafka_consumer_messages.clear
30
+ @_karafka_producer_client.reset
31
31
 
32
- Karafka.producer.stubs(:client).returns(@_karafka_producer_client)
32
+ Karafka.producer.stubs(:client).returns(@_karafka_producer_client)
33
+ end
34
+
35
+ if base.to_s == 'Minitest::Spec'
36
+ base.class_eval do
37
+ before(&eval_flow)
38
+ end
39
+ else
40
+ base.class_eval do
41
+ setup(&eval_flow)
33
42
  end
34
43
  end
35
44
  end
@@ -48,7 +57,7 @@ module Karafka
48
57
  # @example Creates a consumer instance with settings for `my_requested_topic`
49
58
  # consumer = @karafka.consumer_for(:my_requested_topic)
50
59
  def _karafka_consumer_for(requested_topic, requested_consumer_group = nil)
51
- selected_topics = _karafka_consumer_find_candidate_topics(
60
+ selected_topics = Testing::Helpers.karafka_consumer_find_candidate_topics(
52
61
  requested_topic.to_s,
53
62
  requested_consumer_group.to_s
54
63
  )
@@ -161,48 +170,6 @@ module Karafka
161
170
  @consumer.instance_variable_set('@used', true)
162
171
  @consumer
163
172
  end
164
-
165
- # Finds all the routing topics matching requested topic within all topics or within
166
- # provided consumer group based on name
167
- #
168
- # @param requested_topic [String] requested topic name
169
- # @param requested_consumer_group [String] requested consumer group or nil to look in all
170
- # @return [Array<Karafka::Routing::Topic>] all matching topics
171
- #
172
- # @note Since we run the lookup on subscription groups, the search will automatically
173
- # expand with matching patterns
174
- def _karafka_consumer_find_candidate_topics(requested_topic, requested_consumer_group)
175
- _karafka_consumer_find_subscription_groups(requested_consumer_group)
176
- .map(&:topics)
177
- .filter_map do |topics|
178
- topics.find(requested_topic.to_s)
179
- rescue Karafka::Errors::TopicNotFoundError
180
- nil
181
- end
182
- .uniq(&:consumer_group)
183
- end
184
-
185
- # Finds subscription groups from the requested consumer group or selects all if no
186
- # consumer group specified
187
- # @param requested_consumer_group [String] requested consumer group or nil to look in all
188
- # @return [Array<Karafka::Routing::SubscriptionGroup>] requested subscription groups
189
- def _karafka_consumer_find_subscription_groups(requested_consumer_group)
190
- if requested_consumer_group && !requested_consumer_group.empty?
191
- ::Karafka::App
192
- .subscription_groups
193
- # Find matching consumer group
194
- .find { |cg, _sgs| cg.name == requested_consumer_group.to_s }
195
- # Raise error if not found
196
- .tap { |cg| cg || raise(Errors::ConsumerGroupNotFound, requested_consumer_group) }
197
- # Since lookup was on a hash, get the value, that is subscription groups
198
- .last
199
- else
200
- ::Karafka::App
201
- .subscription_groups
202
- .values
203
- .flatten
204
- end
205
- end
206
173
  end
207
174
  end
208
175
  end
@@ -3,6 +3,7 @@
3
3
  require 'waterdrop'
4
4
  require 'karafka/testing'
5
5
  require 'karafka/testing/errors'
6
+ require 'karafka/testing/helpers'
6
7
  require 'karafka/testing/spec_consumer_client'
7
8
  require 'karafka/testing/spec_producer_client'
8
9
  require 'karafka/testing/rspec/proxy'
@@ -60,7 +61,7 @@ module Karafka
60
61
  # subject(:consumer) { karafka.consumer_for(:my_requested_topic) }
61
62
  # end
62
63
  def _karafka_consumer_for(requested_topic, requested_consumer_group = nil)
63
- selected_topics = _karafka_consumer_find_candidate_topics(
64
+ selected_topics = Testing::Helpers.karafka_consumer_find_candidate_topics(
64
65
  requested_topic.to_s,
65
66
  requested_consumer_group.to_s
66
67
  )
@@ -179,48 +180,6 @@ module Karafka
179
180
  consumer.instance_variable_set('@used', true)
180
181
  consumer
181
182
  end
182
-
183
- # Finds all the routing topics matching requested topic within all topics or within
184
- # provided consumer group based on name
185
- #
186
- # @param requested_topic [String] requested topic name
187
- # @param requested_consumer_group [String] requested consumer group or nil to look in all
188
- # @return [Array<Karafka::Routing::Topic>] all matching topics
189
- #
190
- # @note Since we run the lookup on subscription groups, the search will automatically
191
- # expand with matching patterns
192
- def _karafka_consumer_find_candidate_topics(requested_topic, requested_consumer_group)
193
- _karafka_consumer_find_subscription_groups(requested_consumer_group)
194
- .map(&:topics)
195
- .filter_map do |topics|
196
- topics.find(requested_topic.to_s)
197
- rescue Karafka::Errors::TopicNotFoundError
198
- nil
199
- end
200
- .uniq(&:consumer_group)
201
- end
202
-
203
- # Finds subscription groups from the requested consumer group or selects all if no
204
- # consumer group specified
205
- # @param requested_consumer_group [String] requested consumer group or nil to look in all
206
- # @return [Array<Karafka::Routing::SubscriptionGroup>] requested subscription groups
207
- def _karafka_consumer_find_subscription_groups(requested_consumer_group)
208
- if requested_consumer_group && !requested_consumer_group.empty?
209
- ::Karafka::App
210
- .subscription_groups
211
- # Find matching consumer group
212
- .find { |cg, _sgs| cg.name == requested_consumer_group.to_s }
213
- # Raise error if not found
214
- .tap { |cg| cg || raise(Errors::ConsumerGroupNotFound, requested_consumer_group) }
215
- # Since lookup was on a hash, get the value, that is subscription groups
216
- .last
217
- else
218
- ::Karafka::App
219
- .subscription_groups
220
- .values
221
- .flatten
222
- end
223
- end
224
183
  end
225
184
  end
226
185
  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.4.0.beta1'
7
+ VERSION = '2.4.0.rc2'
8
8
  end
9
9
  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.4.0.beta1
4
+ version: 2.4.0.rc2
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-27 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
@@ -43,7 +43,7 @@ dependencies:
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 2.3.0
46
+ version: 2.4.0.beta1
47
47
  - - "<"
48
48
  - !ruby/object:Gem::Version
49
49
  version: 2.5.0
@@ -53,7 +53,7 @@ dependencies:
53
53
  requirements:
54
54
  - - ">="
55
55
  - !ruby/object:Gem::Version
56
- version: 2.3.0
56
+ version: 2.4.0.beta1
57
57
  - - "<"
58
58
  - !ruby/object:Gem::Version
59
59
  version: 2.5.0
@@ -63,14 +63,14 @@ dependencies:
63
63
  requirements:
64
64
  - - ">="
65
65
  - !ruby/object:Gem::Version
66
- version: 2.7.0.beta2
66
+ version: 2.7.0.rc1
67
67
  type: :runtime
68
68
  prerelease: false
69
69
  version_requirements: !ruby/object:Gem::Requirement
70
70
  requirements:
71
71
  - - ">="
72
72
  - !ruby/object:Gem::Version
73
- version: 2.7.0.beta2
73
+ version: 2.7.0.rc1
74
74
  description: Library which provides helpers for easier Karafka consumers tests
75
75
  email:
76
76
  - contact@karafka.io
@@ -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