karafka-testing 1.4.2 → 2.0.0.alpha2

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: cf9bf583523d313a336fcc66427ccfeb0ed2a854f43437b80997e6e1013596ea
4
- data.tar.gz: c949566d9675d397c265255d9951c1524bf4e7f5b0a7c5f2390943ec49accb13
3
+ metadata.gz: 15ad20f0c6aec1676017e4b0ae1a22275418d4c7bf455d07d27cf0696e93b483
4
+ data.tar.gz: 7316128b067662b376f001903eb993983752b9bd2fd2221ef900ba87891f047a
5
5
  SHA512:
6
- metadata.gz: d235a752c5de038dcf15006f745f9fb9111ac38d2dd26de52b306debb56b8b160c9160b732f1e53a4f3c8d0133d568874dba6c2b966bd5ebcefb5bb4172f0359
7
- data.tar.gz: bfb955a6f6f988710d46c3f0b82e5b7608b73ffab0659ca369cc35badc47530771f15d87e2d60d043b9a8cab0f68b6c2c72b6c19dc9f610bb80f50fe22b347a0
6
+ metadata.gz: 1dd7c25d36e028d43566249a5cc46670bdaaada4c7610da2dbc7758d3f6b09f75f06520670ed1772cc1d1197a41b95096d5d857c53d78c39ab101ff534f4e946
7
+ data.tar.gz: 3f318b4fa8690f7a44de1ac3774675044c1dfce57ace3f649a6656b03a8d97f296a25976438a208d7ff56fcc06a2d075aa142fcf94e37566e72920a61ecdede0
checksums.yaml.gz.sig CHANGED
Binary file
@@ -1,5 +1,7 @@
1
1
  name: ci
2
2
 
3
+ concurrency: ci-${{ github.ref }}
4
+
3
5
  on:
4
6
  pull_request:
5
7
  push:
@@ -14,11 +16,11 @@ jobs:
14
16
  fail-fast: false
15
17
  matrix:
16
18
  ruby:
19
+ - '3.1'
17
20
  - '3.0'
18
21
  - '2.7'
19
- - '2.6'
20
22
  include:
21
- - ruby: '3.0'
23
+ - ruby: '3.1'
22
24
  coverage: 'true'
23
25
  steps:
24
26
  - uses: actions/checkout@v2
@@ -46,7 +48,7 @@ jobs:
46
48
  - name: Set up Ruby
47
49
  uses: ruby/setup-ruby@v1
48
50
  with:
49
- ruby-version: 3.0
51
+ ruby-version: 3.1
50
52
  - name: Install latest bundler
51
53
  run: gem install bundler --no-document
52
54
  - name: Install Diffend plugin
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.0.1
1
+ 3.1.0
data/2.0-Upgrade.md ADDED
@@ -0,0 +1,60 @@
1
+ # Welcome to Karafka-Testing 2.0!
2
+
3
+ Karafka-Testing 2.0 some breaking changes in the way consumer builder and message publishing is done.
4
+
5
+ ## Upgrade
6
+
7
+ Please upgrade your application to `Karafka 2.0` first.
8
+
9
+ - Replace `#karafka_consumer_for` in your specs with `#karafka.consumer_for`
10
+ - Replace `#publish_for_karafka` in your specs with `#karafka.publish`
11
+
12
+ And that's all!
13
+
14
+ Below you can find same example written for Karafka `2.0` and `1.4`.
15
+
16
+ ### Karafka 2.0
17
+
18
+ ```ruby
19
+ RSpec.describe CountersConsumer do
20
+ subject(:consumer) { karafka.consumer_for(:counters) }
21
+
22
+ let(:nr1_value) { rand }
23
+ let(:nr2_value) { rand }
24
+ let(:sum) { nr1_value + nr2_value }
25
+
26
+ before do
27
+ karafka.publish({ 'number' => nr1_value }.to_json)
28
+ karafka.publish({ 'number' => nr2_value }.to_json, partition: 2)
29
+ allow(Karafka.logger).to receive(:info)
30
+ end
31
+
32
+ it 'expects to log a proper message' do
33
+ expect(Karafka.logger).to receive(:info).with("Sum of 2 elements equals to: #{sum}")
34
+ consumer.consume
35
+ end
36
+ end
37
+ ```
38
+
39
+ ### Karafka 1.4
40
+
41
+ ```ruby
42
+ RSpec.describe InlineBatchConsumer do
43
+ subject(:consumer) { karafka_consumer_for(:counters) }
44
+
45
+ let(:nr1_value) { rand }
46
+ let(:nr2_value) { rand }
47
+ let(:sum) { nr1_value + nr2_value }
48
+
49
+ before do
50
+ publish_for_karafka({ 'number' => nr1_value }.to_json)
51
+ publish_for_karafka({ 'number' => nr2_value }.to_json, partition: 2)
52
+ allow(Karafka.logger).to receive(:info)
53
+ end
54
+
55
+ it 'expects to log a proper message' do
56
+ expect(Karafka.logger).to receive(:info).with("Sum of 2 elements equals to: #{sum}")
57
+ consumer.consume
58
+ end
59
+ end
60
+ ```
data/CHANGELOG.md CHANGED
@@ -1,24 +1,14 @@
1
1
  # Karafka Test gem changelog
2
2
 
3
- ## 1.4.2 (2021-04-21)
4
- - Restore MIT license
5
- - Remove Ruby 2.5 support and update minimum Ruby requirement to 2.6
3
+ ## 2.0.0.alpha2 (2022-02-19)
4
+ - Add `rubygems_mfa_required`
6
5
 
7
- ## 1.4.1 (2020-09-05)
8
- - Fix for Ruby 2.5 and 2.6 support
6
+ ## 2.0.0.alpha1 (2022-01-30)
7
+ - Change the API to be more comprehensive
8
+ - Update to work with Karafka 2.0
9
+ - Support for Ruby 3.1
10
+ - Drop support for ruby 2.6
9
11
 
10
- ## 1.4.0 (2020-09-05)
11
- - Update to match Karafka 1.4.0 params and batch metadata setup
12
+ ## 1.4.*
12
13
 
13
- ## 1.3.1 (2020-04-24)
14
- - change license to LGPL-3.0
15
- - Ruby 2.6.5 support
16
- - Ruby 2.7.1 support
17
- - JRuby support
18
- - Change license to LGPL-3.0
19
-
20
- ## 1.3.0 (2019-09-09)
21
- - Dynamic `App` name (#2)
22
-
23
- ## 1.3.0.rc1 (2019-07-31)
24
- - Support for Karafka 1.3
14
+ If you are looking for the changelog of `1.4`, please go [here](https://github.com/karafka/testing/blob/1.4/CHANGELOG.md).
data/Gemfile.lock CHANGED
@@ -1,42 +1,36 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- karafka-testing (1.4.2)
5
- karafka (~> 1.4.0)
4
+ karafka-testing (2.0.0.alpha2)
5
+ karafka (~> 2.0.alpha2)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- concurrent-ruby (1.1.8)
11
- delivery_boy (1.1.0)
12
- king_konf (~> 1.0)
13
- ruby-kafka (~> 1.0)
14
- digest-crc (0.6.3)
15
- rake (>= 12.0.0, < 14.0.0)
16
- dry-configurable (0.12.1)
10
+ concurrent-ruby (1.1.9)
11
+ dry-configurable (0.14.0)
17
12
  concurrent-ruby (~> 1.0)
18
- dry-core (~> 0.5, >= 0.5.0)
19
- dry-container (0.7.2)
13
+ dry-core (~> 0.6)
14
+ dry-container (0.9.0)
20
15
  concurrent-ruby (~> 1.0)
21
- dry-configurable (~> 0.1, >= 0.1.3)
22
- dry-core (0.5.0)
16
+ dry-configurable (~> 0.13, >= 0.13.0)
17
+ dry-core (0.7.1)
23
18
  concurrent-ruby (~> 1.0)
24
- dry-equalizer (0.3.0)
25
19
  dry-events (0.3.0)
26
20
  concurrent-ruby (~> 1.0)
27
21
  dry-core (~> 0.5, >= 0.5)
28
- dry-inflector (0.2.0)
29
- dry-initializer (3.0.4)
30
- dry-logic (1.1.1)
22
+ dry-inflector (0.2.1)
23
+ dry-initializer (3.1.1)
24
+ dry-logic (1.2.0)
31
25
  concurrent-ruby (~> 1.0)
32
26
  dry-core (~> 0.5, >= 0.5)
33
- dry-monitor (0.4.0)
34
- dry-configurable (~> 0.5)
27
+ dry-monitor (0.5.0)
28
+ dry-configurable (~> 0.13, >= 0.13.0)
35
29
  dry-core (~> 0.5, >= 0.5)
36
30
  dry-events (~> 0.2)
37
- dry-schema (1.6.2)
31
+ dry-schema (1.9.1)
38
32
  concurrent-ruby (~> 1.0)
39
- dry-configurable (~> 0.8, >= 0.8.3)
33
+ dry-configurable (~> 0.13, >= 0.13.0)
40
34
  dry-core (~> 0.5, >= 0.5)
41
35
  dry-initializer (~> 3.0)
42
36
  dry-logic (~> 1.0)
@@ -47,50 +41,43 @@ GEM
47
41
  dry-core (~> 0.5, >= 0.5)
48
42
  dry-inflector (~> 0.1, >= 0.1.2)
49
43
  dry-logic (~> 1.0, >= 1.0.2)
50
- dry-validation (1.6.0)
44
+ dry-validation (1.8.0)
51
45
  concurrent-ruby (~> 1.0)
52
46
  dry-container (~> 0.7, >= 0.7.1)
53
- dry-core (~> 0.4)
54
- dry-equalizer (~> 0.2)
47
+ dry-core (~> 0.5, >= 0.5)
55
48
  dry-initializer (~> 3.0)
56
- dry-schema (~> 1.5, >= 1.5.2)
57
- envlogic (1.1.3)
58
- dry-inflector (~> 0.1)
59
- io-console (0.5.9)
60
- irb (1.3.5)
61
- reline (>= 0.1.5)
62
- karafka (1.4.4)
63
- dry-configurable (~> 0.8)
64
- dry-inflector (~> 0.1)
65
- dry-monitor (~> 0.3)
66
- dry-validation (~> 1.2)
67
- envlogic (~> 1.1)
68
- irb (~> 1.0)
69
- ruby-kafka (>= 1.0.0)
49
+ dry-schema (~> 1.9, >= 1.9.1)
50
+ ffi (1.15.5)
51
+ karafka (2.0.0.alpha2)
52
+ dry-configurable (~> 0.13)
53
+ dry-monitor (~> 0.5)
54
+ dry-validation (~> 1.7)
55
+ rdkafka (>= 0.10)
70
56
  thor (>= 0.20)
71
- waterdrop (~> 1.4.0)
72
- zeitwerk (~> 2.1)
73
- king_konf (1.0.0)
74
- rake (13.0.3)
75
- reline (0.2.5)
76
- io-console (~> 0.5)
77
- ruby-kafka (1.3.0)
78
- digest-crc
79
- thor (1.1.0)
80
- waterdrop (1.4.2)
81
- delivery_boy (>= 0.2, < 2.x)
82
- dry-configurable (~> 0.8)
83
- dry-monitor (~> 0.3)
84
- dry-validation (~> 1.2)
85
- ruby-kafka (>= 0.7.8)
86
- zeitwerk (~> 2.1)
87
- zeitwerk (2.4.2)
57
+ waterdrop (>= 2.2.0, < 3.0.0)
58
+ zeitwerk (~> 2.3)
59
+ mini_portile2 (2.7.1)
60
+ rake (13.0.6)
61
+ rdkafka (0.11.1)
62
+ ffi (~> 1.15)
63
+ mini_portile2 (~> 2.6)
64
+ rake (> 12)
65
+ thor (1.2.1)
66
+ waterdrop (2.2.0)
67
+ concurrent-ruby (>= 1.1)
68
+ dry-configurable (~> 0.13)
69
+ dry-monitor (~> 0.5)
70
+ dry-validation (~> 1.7)
71
+ rdkafka (>= 0.10)
72
+ zeitwerk (~> 2.3)
73
+ zeitwerk (2.5.4)
88
74
 
89
75
  PLATFORMS
76
+ x86_64-darwin
90
77
  x86_64-linux
91
78
 
92
79
  DEPENDENCIES
93
80
  karafka-testing!
94
81
 
95
82
  BUNDLED WITH
96
- 2.2.16
83
+ 2.3.6
data/README.md CHANGED
@@ -1,10 +1,14 @@
1
1
  # Karafka Testing library
2
2
 
3
+ **Note**: Documentation presented below works with Karafka `2.0.0.alpha1` and higher.
4
+
5
+ Please refer to [this](https://github.com/karafka/testing/tree/1.4) branch and its documentation for details about usage with Karafka `1.4`.
6
+
3
7
  [![Build Status](https://github.com/karafka/testing/workflows/ci/badge.svg)](https://github.com/karafka/testing/actions?query=workflow%3Aci)
4
8
  [![Gem Version](https://badge.fury.io/rb/karafka-testing.svg)](http://badge.fury.io/rb/karafka-testing)
5
- [![Join the chat at https://gitter.im/karafka/karafka](https://badges.gitter.im/karafka/karafka.svg)](https://gitter.im/karafka/karafka)
9
+ [![Join the chat at https://slack.karafka.io](https://raw.githubusercontent.com/karafka/misc/master/slack.svg)](https://slack.karafka.io)
6
10
 
7
- Karafka-Testing is a library that provides rspec helpers, to make testing of Karafka consumers much easier.
11
+ Karafka-Testing is a library that provides RSpec helpers, to make testing of Karafka consumers much easier.
8
12
 
9
13
  ## Installation
10
14
 
@@ -28,18 +32,17 @@ end
28
32
 
29
33
  ## Usage
30
34
 
31
- Once included into your RSpec setup, this library will provide you two methods that you can use with your specs:
32
-
33
- - `#karafka_consumer_for` - this method will create a consumer instance for the desired topic. It **needs** to be set as the spec subject.
34
- - `#publish_for_karafka` - this method will "send" message to the consumer instance.
35
+ Once included into your RSpec setup, this library will provide you with a special object `#karafka` that includes two methods that you can use with your specs:
35
36
 
37
+ - `#consumer_for` - creates a consumer instance for the desired topic. It **needs** to be set as the spec subject.
38
+ - `#publish` - "sends" message to the consumer instance.
36
39
 
37
- **Note:** Messages sent using the `#publish_for_karafka` method won't be sent to Kafka. They will be "virtually" delegated to the created consumer instance so your specs can run without Kafka setup.
40
+ **Note:** Messages sent using the `#publish` method won't be sent to Kafka. They will be "virtually" delegated to the created consumer instance so your specs can run without Kafka setup.
38
41
 
39
42
  ```ruby
40
43
  RSpec.describe InlineBatchConsumer do
41
44
  # This will create a consumer instance with all the settings defined for the given topic
42
- subject(:consumer) { karafka_consumer_for(:inline_batch_data) }
45
+ subject(:consumer) { karafka.consumer_for(:inline_batch_data) }
43
46
 
44
47
  let(:nr1_value) { rand }
45
48
  let(:nr2_value) { rand }
@@ -47,9 +50,9 @@ RSpec.describe InlineBatchConsumer do
47
50
 
48
51
  before do
49
52
  # Sends first message to Karafka consumer
50
- publish_for_karafka({ 'number' => nr1_value }.to_json)
53
+ karafka.publish({ 'number' => nr1_value }.to_json)
51
54
  # Sends second message to Karafka consumer
52
- publish_for_karafka({ 'number' => nr2_value }.to_json)
55
+ karafka.publish({ 'number' => nr2_value }.to_json, partition: 2)
53
56
  allow(Karafka.logger).to receive(:info)
54
57
  end
55
58
 
@@ -60,18 +63,10 @@ RSpec.describe InlineBatchConsumer do
60
63
  end
61
64
  ```
62
65
 
63
- ## References
64
-
65
- * [Karafka framework](https://github.com/karafka/karafka)
66
- * [Karafka Testing Actions CI](https://github.com/karafka/testing/actions?query=workflow%3Aci)
67
- * [Karafka Testing Coditsu](https://app.coditsu.io/karafka/repositories/testing)
68
-
69
66
  ## Note on contributions
70
67
 
71
- First, thank you for considering contributing to Karafka Testing! It's people like you that make the open source community such a great community!
72
-
73
- Each pull request must pass all the RSpec specs and meet our quality requirements.
68
+ First, thank you for considering contributing to the Karafka ecosystem! It's people like you that make the open source community such a great community!
74
69
 
75
- To check if everything is as it should be, we use [Coditsu](https://coditsu.io) that combines multiple linters and code analyzers for both code and documentation. Once you're done with your changes, submit a pull request.
70
+ Each pull request must pass all the RSpec specs, integration tests and meet our quality requirements.
76
71
 
77
- Coditsu will automatically check your work against our quality standards. You can find your commit check results on the [builds page](https://app.coditsu.io/karafka/repositories/testing/builds/commit_builds) of the Karafka Testing repository.
72
+ Fork it, update and wait for the Github Actions results.
data/certs/mensfeld.pem CHANGED
@@ -1,25 +1,25 @@
1
1
  -----BEGIN CERTIFICATE-----
2
2
  MIIEODCCAqCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAjMSEwHwYDVQQDDBhtYWNp
3
- ZWovREM9bWVuc2ZlbGQvREM9cGwwHhcNMjAwODExMDkxNTM3WhcNMjEwODExMDkx
4
- NTM3WjAjMSEwHwYDVQQDDBhtYWNpZWovREM9bWVuc2ZlbGQvREM9cGwwggGiMA0G
5
- CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDCpXsCgmINb6lHBXXBdyrgsBPSxC4/
6
- 2H+weJ6L9CruTiv2+2/ZkQGtnLcDgrD14rdLIHK7t0o3EKYlDT5GhD/XUVhI15JE
7
- N7IqnPUgexe1fbZArwQ51afxz2AmPQN2BkB2oeQHXxnSWUGMhvcEZpfbxCCJH26w
8
- hS0Ccsma8yxA6hSlGVhFVDuCr7c2L1di6cK2CtIDpfDaWqnVNJEwBYHIxrCoWK5g
9
- sIGekVt/admS9gRhIMaIBg+Mshth5/DEyWO2QjteTodItlxfTctrfmiAl8X8T5JP
10
- VXeLp5SSOJ5JXE80nShMJp3RFnGw5fqjX/ffjtISYh78/By4xF3a25HdWH9+qO2Z
11
- tx0wSGc9/4gqNM0APQnjN/4YXrGZ4IeSjtE+OrrX07l0TiyikzSLFOkZCAp8oBJi
12
- Fhlosz8xQDJf7mhNxOaZziqASzp/hJTU/tuDKl5+ql2icnMv5iV/i6SlmvU29QNg
13
- LCV71pUv0pWzN+OZbHZKWepGhEQ3cG9MwvkCAwEAAaN3MHUwCQYDVR0TBAIwADAL
14
- BgNVHQ8EBAMCBLAwHQYDVR0OBBYEFImGed2AXS070ohfRidiCEhXEUN+MB0GA1Ud
3
+ ZWovREM9bWVuc2ZlbGQvREM9cGwwHhcNMjEwODExMTQxNTEzWhcNMjIwODExMTQx
4
+ NTEzWjAjMSEwHwYDVQQDDBhtYWNpZWovREM9bWVuc2ZlbGQvREM9cGwwggGiMA0G
5
+ CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDV2jKH4Ti87GM6nyT6D+ESzTI0MZDj
6
+ ak2/TEwnxvijMJyCCPKT/qIkbW4/f0VHM4rhPr1nW73sb5SZBVFCLlJcOSKOBdUY
7
+ TMY+SIXN2EtUaZuhAOe8LxtxjHTgRHvHcqUQMBENXTISNzCo32LnUxweu66ia4Pd
8
+ 1mNRhzOqNv9YiBZvtBf7IMQ+sYdOCjboq2dlsWmJiwiDpY9lQBTnWORnT3mQxU5x
9
+ vPSwnLB854cHdCS8fQo4DjeJBRZHhEbcE5sqhEMB3RZA3EtFVEXOxlNxVTS3tncI
10
+ qyNXiWDaxcipaens4ObSY1C2HTV7OWb7OMqSCIybeYTSfkaSdqmcl4S6zxXkjH1J
11
+ tnjayAVzD+QVXGijsPLE2PFnJAh9iDET2cMsjabO1f6l1OQNyAtqpcyQcgfnyW0z
12
+ g7tGxTYD+6wJHffM9d9txOUw6djkF6bDxyqB8lo4Z3IObCx18AZjI9XPS9QG7w6q
13
+ LCWuMG2lkCcRgASqaVk9fEf9yMc2xxz5o3kCAwEAAaN3MHUwCQYDVR0TBAIwADAL
14
+ BgNVHQ8EBAMCBLAwHQYDVR0OBBYEFBqUFCKCOe5IuueUVqOB991jyCLLMB0GA1Ud
15
15
  EQQWMBSBEm1hY2llakBtZW5zZmVsZC5wbDAdBgNVHRIEFjAUgRJtYWNpZWpAbWVu
16
- c2ZlbGQucGwwDQYJKoZIhvcNAQELBQADggGBAKiHpwoENVrMi94V1zD4o8/6G3AU
17
- gWz4udkPYHTZLUy3dLznc/sNjdkJFWT3E6NKYq7c60EpJ0m0vAEg5+F5pmNOsvD3
18
- 2pXLj9kisEeYhR516HwXAvtngboUcb75skqvBCU++4Pu7BRAPjO1/ihLSBexbwSS
19
- fF+J5OWNuyHHCQp+kGPLtXJe2yUYyvSWDj3I2//Vk0VhNOIlaCS1+5/P3ZJThOtm
20
- zJUBI7h3HgovwRpcnmk2mXTmU4Zx/bCzX8EA6VY0khEvnmiq7S6eBF0H9qH8KyQ6
21
- EkVLpvmUDFcf/uNaBQdazEMB5jYtwoA8gQlANETNGPi51KlkukhKgaIEDMkBDJOx
22
- 65N7DzmkcyY0/GwjIVIxmRhcrCt1YeCUElmfFx0iida1/YRm6sB2AXqScc1+ECRi
23
- 2DND//YJUikn1zwbz1kT70XmHd97B4Eytpln7K+M1u2g1pHVEPW4owD/ammXNpUy
24
- nt70FcDD4yxJQ+0YNiHd0N8IcVBM1TMIVctMNQ==
16
+ c2ZlbGQucGwwDQYJKoZIhvcNAQELBQADggGBADD0/UuTTFgW+CGk2U0RDw2RBOca
17
+ W2LTF/G7AOzuzD0Tc4voc7WXyrgKwJREv8rgBimLnNlgmFJLmtUCh2U/MgxvcilH
18
+ yshYcbseNvjkrtYnLRlWZR4SSB6Zei5AlyGVQLPkvdsBpNegcG6w075YEwzX/38a
19
+ 8V9B/Yri2OGELBz8ykl7BsXUgNoUPA/4pHF6YRLz+VirOaUIQ4JfY7xGj6fSOWWz
20
+ /rQ/d77r6o1mfJYM/3BRVg73a3b7DmRnE5qjwmSaSQ7u802pJnLesmArch0xGCT/
21
+ fMmRli1Qb+6qOTl9mzD6UDMAyFR4t6MStLm0mIEqM0nBO5nUdUWbC7l9qXEf8XBE
22
+ 2DP28p3EqSuS+lKbAWKcqv7t0iRhhmaod+Yn9mcrLN1sa3q3KSQ9BCyxezCD4Mk2
23
+ R2P11bWoCtr70BsccVrN8jEhzwXngMyI2gVt750Y+dbTu1KgRqZKp/ECe7ZzPzXj
24
+ pIy9vHxTANKYVyI4qj8OrFdEM5BQNu8oQpL0iQ==
25
25
  -----END CERTIFICATE-----
@@ -13,18 +13,23 @@ Gem::Specification.new do |spec|
13
13
  spec.email = %w[maciej@mensfeld.pl]
14
14
  spec.summary = 'Library which provides helpers for easier Karafka consumers tests'
15
15
  spec.description = 'Library which provides helpers for easier Karafka consumers tests'
16
- spec.homepage = 'https://github.com/karafka/testing'
16
+ spec.homepage = 'https://karafka.io'
17
17
  spec.license = 'MIT'
18
18
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
19
19
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
20
  spec.require_paths = %w[lib]
21
21
  spec.cert_chain = %w[certs/mensfeld.pem]
22
22
 
23
- spec.required_ruby_version = '>= 2.6.0'
23
+ spec.required_ruby_version = '>= 2.7'
24
24
 
25
25
  if $PROGRAM_NAME.end_with?('gem')
26
26
  spec.signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
27
27
  end
28
28
 
29
- spec.add_dependency 'karafka', '~> 1.4.0'
29
+ spec.add_dependency 'karafka', '~> 2.0.alpha2'
30
+
31
+ spec.metadata = {
32
+ 'source_code_uri' => 'https://github.com/karafka/karafka',
33
+ 'rubygems_mfa_required' => 'true'
34
+ }
30
35
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Karafka
4
+ module Testing
5
+ # A dummy client that takes over client delegated methods from the consumers
6
+ # For specs we do not mark anything as consumed, nor do we really send heartbeats.
7
+ # Those things are tested in the framework itself
8
+ class DummyClient
9
+ %i[
10
+ mark_as_consumed
11
+ mark_as_consumed!
12
+ ].each do |caught_delegator|
13
+ define_method(caught_delegator) { |*| }
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'karafka/testing/errors'
4
+ require 'karafka/testing/dummy_client'
5
+ require 'karafka/testing/rspec/proxy'
4
6
 
5
7
  module Karafka
6
8
  module Testing
@@ -15,14 +17,15 @@ module Karafka
15
17
  def included(base)
16
18
  # This is an internal buffer for keeping "to be sent" messages before
17
19
  # we run the consume
18
- base.let(:_karafka_raw_data) { [] }
19
- # Clear the messages buffer after each spec, so nothing will leak
20
- # in between them
21
- base.after { _karafka_raw_data.clear }
20
+ base.let(:_karafka_messages) { [] }
21
+ base.let(:karafka) { Karafka::Testing::RSpec::Proxy.new(self) }
22
+ # Clear the messages buffer after each spec, so nothing leaks in between them
23
+ base.after { _karafka_messages.clear }
22
24
  end
23
25
  end
24
26
 
25
- # Creates a consumer instance for given topic
27
+ # Creates a consumer instance for a given topic
28
+ #
26
29
  # @param requested_topic [String, Symbol] name of the topic for which we want to
27
30
  # create a consumer instance
28
31
  # @return [Object] described_class instance
@@ -31,12 +34,12 @@ module Karafka
31
34
  #
32
35
  # @example Creates a MyConsumer consumer instance with settings for `my_requested_topic`
33
36
  # RSpec.describe MyConsumer do
34
- # subject(:consumer) { karafka_consumer_for(:my_requested_topic) }
37
+ # subject(:consumer) { karafka.consumer_for(:my_requested_topic) }
35
38
  # end
36
39
  def karafka_consumer_for(requested_topic)
37
40
  selected_topic = nil
38
41
 
39
- # @note Remove in 2.0. This won't work without the global state
42
+ # @note Remove in 2.1. This won't work without the global state
40
43
  ::Karafka::App.consumer_groups.each do |consumer_group|
41
44
  consumer_group.topics.each do |topic|
42
45
  selected_topic = topic if topic.name == requested_topic.to_s
@@ -45,47 +48,59 @@ module Karafka
45
48
 
46
49
  raise Karafka::Testing::Errors::TopicNotFoundError, requested_topic unless selected_topic
47
50
 
48
- described_class.new(selected_topic)
51
+ consumer = described_class.new
52
+ consumer.topic = selected_topic
53
+ consumer.client = Karafka::Testing::DummyClient.new
54
+ consumer
49
55
  end
50
56
 
51
- # Adds a new Karafka params instance with given payload and options into an internal
57
+ # Adds a new Karafka message instance with given payload and options into an internal
52
58
  # buffer that will be used to simulate messages delivery to the consumer
53
59
  #
54
- # @param raw_payload [String] anything you want to send
60
+ # @param payload [String] anything you want to send
55
61
  # @param opts [Hash] additional options with which you want to overwrite the
56
62
  # message defaults (key, offset, etc)
57
63
  #
58
64
  # @example Send a json message to consumer
59
65
  # before do
60
- # publish_for_karafka({ 'hello' => 'world' }.to_json)
66
+ # karafka.publish({ 'hello' => 'world' }.to_json)
61
67
  # end
62
68
  #
63
69
  # @example Send a json message to consumer and simulate, that it is partition 6
64
70
  # before do
65
- # publish_for_karafka({ 'hello' => 'world' }.to_json, 'partition' => 6)
71
+ # karafka.publish({ 'hello' => 'world' }.to_json, 'partition' => 6)
66
72
  # end
67
- def publish_for_karafka(raw_payload, opts = {})
68
- metadata = Karafka::Params::Metadata.new(
69
- **metadata_defaults.merge(opts)
73
+ def karafka_publish(payload, opts = {})
74
+ metadata = Karafka::Messages::Metadata.new(
75
+ **karafka_message_metadata_defaults.merge(opts)
70
76
  ).freeze
71
77
 
72
- _karafka_raw_data << Karafka::Params::Params.new(raw_payload, metadata)
73
- subject.params_batch = Karafka::Params::ParamsBatch.new(_karafka_raw_data)
78
+ # Add this message to previously published messages
79
+ _karafka_messages << Karafka::Messages::Message.new(payload, metadata)
80
+
81
+ # Update batch metadata
82
+ batch_metadata = Karafka::Messages::Builders::BatchMetadata.call(
83
+ _karafka_messages,
84
+ subject.topic,
85
+ Time.now
86
+ )
87
+
88
+ # Update consumer messages batch
89
+ subject.messages = Karafka::Messages::Messages.new(_karafka_messages, batch_metadata)
74
90
  end
75
91
 
76
92
  private
77
93
 
78
94
  # @return [Hash] message default options
79
- def metadata_defaults
95
+ def karafka_message_metadata_defaults
80
96
  {
81
97
  deserializer: subject.topic.deserializer,
82
- create_time: Time.now,
98
+ timestamp: Time.now,
83
99
  headers: {},
84
- is_control_record: false,
85
100
  key: nil,
86
- offset: 0,
101
+ offset: _karafka_messages.size,
87
102
  partition: 0,
88
- receive_time: Time.now,
103
+ received_at: Time.now,
89
104
  topic: subject.topic.name
90
105
  }
91
106
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Karafka
4
+ module Testing
5
+ module RSpec
6
+ # Proxy object for a nicer `karafka.` API within RSpec
7
+ class Proxy
8
+ # @param rspec_example [RSpec::ExampleGroups] rspec context
9
+ def initialize(rspec_example)
10
+ @rspec_example = rspec_example
11
+ end
12
+
13
+ # @param args Anything that the `#karafka_consumer_for` accepts
14
+ def consumer_for(*args)
15
+ @rspec_example.karafka_consumer_for(*args)
16
+ end
17
+
18
+ # @param args Anything that the `#karafka_publish` accepts
19
+ def publish(*args)
20
+ @rspec_example.karafka_publish(*args)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ 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 = '1.4.2'
7
+ VERSION = '2.0.0.alpha2'
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: 1.4.2
4
+ version: 2.0.0.alpha2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maciej Mensfeld
@@ -11,30 +11,30 @@ cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIEODCCAqCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAjMSEwHwYDVQQDDBhtYWNp
14
- ZWovREM9bWVuc2ZlbGQvREM9cGwwHhcNMjAwODExMDkxNTM3WhcNMjEwODExMDkx
15
- NTM3WjAjMSEwHwYDVQQDDBhtYWNpZWovREM9bWVuc2ZlbGQvREM9cGwwggGiMA0G
16
- CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDCpXsCgmINb6lHBXXBdyrgsBPSxC4/
17
- 2H+weJ6L9CruTiv2+2/ZkQGtnLcDgrD14rdLIHK7t0o3EKYlDT5GhD/XUVhI15JE
18
- N7IqnPUgexe1fbZArwQ51afxz2AmPQN2BkB2oeQHXxnSWUGMhvcEZpfbxCCJH26w
19
- hS0Ccsma8yxA6hSlGVhFVDuCr7c2L1di6cK2CtIDpfDaWqnVNJEwBYHIxrCoWK5g
20
- sIGekVt/admS9gRhIMaIBg+Mshth5/DEyWO2QjteTodItlxfTctrfmiAl8X8T5JP
21
- VXeLp5SSOJ5JXE80nShMJp3RFnGw5fqjX/ffjtISYh78/By4xF3a25HdWH9+qO2Z
22
- tx0wSGc9/4gqNM0APQnjN/4YXrGZ4IeSjtE+OrrX07l0TiyikzSLFOkZCAp8oBJi
23
- Fhlosz8xQDJf7mhNxOaZziqASzp/hJTU/tuDKl5+ql2icnMv5iV/i6SlmvU29QNg
24
- LCV71pUv0pWzN+OZbHZKWepGhEQ3cG9MwvkCAwEAAaN3MHUwCQYDVR0TBAIwADAL
25
- BgNVHQ8EBAMCBLAwHQYDVR0OBBYEFImGed2AXS070ohfRidiCEhXEUN+MB0GA1Ud
14
+ ZWovREM9bWVuc2ZlbGQvREM9cGwwHhcNMjEwODExMTQxNTEzWhcNMjIwODExMTQx
15
+ NTEzWjAjMSEwHwYDVQQDDBhtYWNpZWovREM9bWVuc2ZlbGQvREM9cGwwggGiMA0G
16
+ CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDV2jKH4Ti87GM6nyT6D+ESzTI0MZDj
17
+ ak2/TEwnxvijMJyCCPKT/qIkbW4/f0VHM4rhPr1nW73sb5SZBVFCLlJcOSKOBdUY
18
+ TMY+SIXN2EtUaZuhAOe8LxtxjHTgRHvHcqUQMBENXTISNzCo32LnUxweu66ia4Pd
19
+ 1mNRhzOqNv9YiBZvtBf7IMQ+sYdOCjboq2dlsWmJiwiDpY9lQBTnWORnT3mQxU5x
20
+ vPSwnLB854cHdCS8fQo4DjeJBRZHhEbcE5sqhEMB3RZA3EtFVEXOxlNxVTS3tncI
21
+ qyNXiWDaxcipaens4ObSY1C2HTV7OWb7OMqSCIybeYTSfkaSdqmcl4S6zxXkjH1J
22
+ tnjayAVzD+QVXGijsPLE2PFnJAh9iDET2cMsjabO1f6l1OQNyAtqpcyQcgfnyW0z
23
+ g7tGxTYD+6wJHffM9d9txOUw6djkF6bDxyqB8lo4Z3IObCx18AZjI9XPS9QG7w6q
24
+ LCWuMG2lkCcRgASqaVk9fEf9yMc2xxz5o3kCAwEAAaN3MHUwCQYDVR0TBAIwADAL
25
+ BgNVHQ8EBAMCBLAwHQYDVR0OBBYEFBqUFCKCOe5IuueUVqOB991jyCLLMB0GA1Ud
26
26
  EQQWMBSBEm1hY2llakBtZW5zZmVsZC5wbDAdBgNVHRIEFjAUgRJtYWNpZWpAbWVu
27
- c2ZlbGQucGwwDQYJKoZIhvcNAQELBQADggGBAKiHpwoENVrMi94V1zD4o8/6G3AU
28
- gWz4udkPYHTZLUy3dLznc/sNjdkJFWT3E6NKYq7c60EpJ0m0vAEg5+F5pmNOsvD3
29
- 2pXLj9kisEeYhR516HwXAvtngboUcb75skqvBCU++4Pu7BRAPjO1/ihLSBexbwSS
30
- fF+J5OWNuyHHCQp+kGPLtXJe2yUYyvSWDj3I2//Vk0VhNOIlaCS1+5/P3ZJThOtm
31
- zJUBI7h3HgovwRpcnmk2mXTmU4Zx/bCzX8EA6VY0khEvnmiq7S6eBF0H9qH8KyQ6
32
- EkVLpvmUDFcf/uNaBQdazEMB5jYtwoA8gQlANETNGPi51KlkukhKgaIEDMkBDJOx
33
- 65N7DzmkcyY0/GwjIVIxmRhcrCt1YeCUElmfFx0iida1/YRm6sB2AXqScc1+ECRi
34
- 2DND//YJUikn1zwbz1kT70XmHd97B4Eytpln7K+M1u2g1pHVEPW4owD/ammXNpUy
35
- nt70FcDD4yxJQ+0YNiHd0N8IcVBM1TMIVctMNQ==
27
+ c2ZlbGQucGwwDQYJKoZIhvcNAQELBQADggGBADD0/UuTTFgW+CGk2U0RDw2RBOca
28
+ W2LTF/G7AOzuzD0Tc4voc7WXyrgKwJREv8rgBimLnNlgmFJLmtUCh2U/MgxvcilH
29
+ yshYcbseNvjkrtYnLRlWZR4SSB6Zei5AlyGVQLPkvdsBpNegcG6w075YEwzX/38a
30
+ 8V9B/Yri2OGELBz8ykl7BsXUgNoUPA/4pHF6YRLz+VirOaUIQ4JfY7xGj6fSOWWz
31
+ /rQ/d77r6o1mfJYM/3BRVg73a3b7DmRnE5qjwmSaSQ7u802pJnLesmArch0xGCT/
32
+ fMmRli1Qb+6qOTl9mzD6UDMAyFR4t6MStLm0mIEqM0nBO5nUdUWbC7l9qXEf8XBE
33
+ 2DP28p3EqSuS+lKbAWKcqv7t0iRhhmaod+Yn9mcrLN1sa3q3KSQ9BCyxezCD4Mk2
34
+ R2P11bWoCtr70BsccVrN8jEhzwXngMyI2gVt750Y+dbTu1KgRqZKp/ECe7ZzPzXj
35
+ pIy9vHxTANKYVyI4qj8OrFdEM5BQNu8oQpL0iQ==
36
36
  -----END CERTIFICATE-----
37
- date: 2021-04-21 00:00:00.000000000 Z
37
+ date: 2022-02-19 00:00:00.000000000 Z
38
38
  dependencies:
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: karafka
@@ -42,14 +42,14 @@ dependencies:
42
42
  requirements:
43
43
  - - "~>"
44
44
  - !ruby/object:Gem::Version
45
- version: 1.4.0
45
+ version: 2.0.alpha2
46
46
  type: :runtime
47
47
  prerelease: false
48
48
  version_requirements: !ruby/object:Gem::Requirement
49
49
  requirements:
50
50
  - - "~>"
51
51
  - !ruby/object:Gem::Version
52
- version: 1.4.0
52
+ version: 2.0.alpha2
53
53
  description: Library which provides helpers for easier Karafka consumers tests
54
54
  email:
55
55
  - maciej@mensfeld.pl
@@ -59,12 +59,12 @@ extra_rdoc_files: []
59
59
  files:
60
60
  - ".coditsu/ci.yml"
61
61
  - ".diffend.yml"
62
- - ".github/FUNDING.yml"
63
62
  - ".github/workflows/ci.yml"
64
63
  - ".gitignore"
65
64
  - ".rspec"
66
65
  - ".ruby-gemset"
67
66
  - ".ruby-version"
67
+ - 2.0-Upgrade.md
68
68
  - CHANGELOG.md
69
69
  - Gemfile
70
70
  - Gemfile.lock
@@ -74,13 +74,17 @@ files:
74
74
  - karafka-testing.gemspec
75
75
  - lib/karafka-testing.rb
76
76
  - lib/karafka/testing.rb
77
+ - lib/karafka/testing/dummy_client.rb
77
78
  - lib/karafka/testing/errors.rb
78
79
  - lib/karafka/testing/rspec/helpers.rb
80
+ - lib/karafka/testing/rspec/proxy.rb
79
81
  - lib/karafka/testing/version.rb
80
- homepage: https://github.com/karafka/testing
82
+ homepage: https://karafka.io
81
83
  licenses:
82
84
  - MIT
83
- metadata: {}
85
+ metadata:
86
+ source_code_uri: https://github.com/karafka/karafka
87
+ rubygems_mfa_required: 'true'
84
88
  post_install_message:
85
89
  rdoc_options: []
86
90
  require_paths:
@@ -89,14 +93,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
93
  requirements:
90
94
  - - ">="
91
95
  - !ruby/object:Gem::Version
92
- version: 2.6.0
96
+ version: '2.7'
93
97
  required_rubygems_version: !ruby/object:Gem::Requirement
94
98
  requirements:
95
- - - ">="
99
+ - - ">"
96
100
  - !ruby/object:Gem::Version
97
- version: '0'
101
+ version: 1.3.1
98
102
  requirements: []
99
- rubygems_version: 3.2.15
103
+ rubygems_version: 3.3.3
100
104
  signing_key:
101
105
  specification_version: 4
102
106
  summary: Library which provides helpers for easier Karafka consumers tests
metadata.gz.sig CHANGED
Binary file
data/.github/FUNDING.yml DELETED
@@ -1 +0,0 @@
1
- open_collective: karafka