rspec-sidekiq 4.0.2 → 4.2.0

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: cb2a5b25d191b39f3f9a8780b01c04c635e1218b9c0079fdc993d5069a43129b
4
- data.tar.gz: a5cd5585a407a4d40f9e31643f5ee5ab14839d80bbdf8cf2bcbb9dd30104bfd0
3
+ metadata.gz: 545725855a34595908bcd584dfcee30045ad1519fbd8295bf5fbf6aed7fdd254
4
+ data.tar.gz: 26905978185b4e101e0f3d40b2318c0c47143d92a4a762286e5951be92942824
5
5
  SHA512:
6
- metadata.gz: 773e7f3b63d3ad5165ccff805c54040905e42e3769bde2e1605d1e4620024dfcd39b8bd1aac5691b91efd0e70ea38f4f72a7af97ebf75f60930dd5b498c0c7ec
7
- data.tar.gz: 75072507499d9c8835c039e5175b6672a2f184f080f260dad3fe02a53d995efa8a16f5ad07252fa97d6a7e0eb6ee86e10fdfca3189bbbd89c638d4327188b9ce
6
+ metadata.gz: 2f9c854985b82b12fdcd32fa0a3ec68185e1ad22ebc554f3f1e7a4b0d29d1c399706e31eef4155de6805fe61628c670a91634386eb05cf9de6762693369f3276
7
+ data.tar.gz: a0033e0cd3b6a6e03f5042dd04931393e87806adca9f7e78cd3bf034c2018cf89da309826e78e7a067e5a5950e86ff3aef79a2e55bb6ede116a37392000123fa
data/CHANGES.md CHANGED
@@ -1,3 +1,17 @@
1
+ Unreleased
2
+ ---
3
+
4
+ 4.2.0
5
+ ---
6
+ * Add warning about `have_enqueued_sidekiq_job` with no arguments (default will
7
+ change in next major release) (#216, #217)
8
+
9
+ 4.1.0
10
+ ---
11
+ * Add Composable support to `enqueue_sidekiq_job` and
12
+ `have_enqueued_sidekiq_job` (#211)
13
+ * Add `immediately` to specify that a job should be enqueued without any delay (#210)
14
+
1
15
  4.0.2
2
16
  ---
3
17
  * Explicitly require forwardable (#204)
data/README.md CHANGED
@@ -75,11 +75,17 @@ expect { AwesomeJob.perform_at(specific_time, "Awesome!") }.to(
75
75
  .on("default")
76
76
  .at(specific_time)
77
77
  )
78
+
79
+ # Also composable
80
+ expect do
81
+ AwesomeJob.perform_async
82
+ OtherJob.perform_async
83
+ end.to enqueue_sidekiq_job(AwesomeJob).and enqueue_sidekiq_job(OtherJob)
78
84
  ```
79
85
 
80
86
  ### have_enqueued_sidekiq_job
81
- *Describes that there should be an enqueued job with the **specified
82
- arguments***
87
+
88
+ Describes that there should be an enqueued job with the **specified arguments**
83
89
 
84
90
  ```ruby
85
91
  AwesomeJob.perform_async 'Awesome', true
@@ -95,11 +101,14 @@ AwesomeJob.perform_async({"something" => "Awesome", "extra" => "stuff"})
95
101
  expect(AwesomeJob).to have_enqueued_sidekiq_job(hash_including("something" => "Awesome"))
96
102
  expect(AwesomeJob).to have_enqueued_sidekiq_job(any_args)
97
103
  expect(AwesomeJob).to have_enqueued_sidekiq_job(hash_excluding("bad_stuff" => anything))
104
+
105
+ # composable as well
106
+ expect(AwesomeJob).to have_enqueued_sidekiq_job(any_args).and have_enqueued_sidekiq_job(hash_including("something" => "Awesome"))
98
107
  ```
99
108
 
100
109
  #### Testing scheduled jobs
101
110
 
102
- *Use chainable matchers `#at` and `#in`*
111
+ *Use chainable matchers `#at`, `#in` and `#immediately`*
103
112
 
104
113
  ```ruby
105
114
  time = 5.minutes.from_now
@@ -113,6 +122,13 @@ AwesomeJob.perform_in 5.minutes, 'Awesome', true
113
122
  expect(AwesomeJob).to have_enqueued_sidekiq_job('Awesome', true).in(5.minutes)
114
123
  ```
115
124
 
125
+ ```ruby
126
+ # Job scheduled for a date in the past are enqueued immediately.
127
+ AwesomeJob.perform_later 5.minutes.ago, 'Awesome', true # equivalent to: AwesomeJob.perform_async 'Awesome', true
128
+ # test with...
129
+ expect(AwesomeJob).to have_enqueued_sidekiq_job('Awesome', true).immediately
130
+ ```
131
+
116
132
  #### Testing queue set for job
117
133
 
118
134
  Use the chainable `#on` matcher
@@ -1,4 +1,5 @@
1
1
  require "rubygems"
2
+ require "set"
2
3
 
3
4
  module RSpec
4
5
  module Sidekiq
@@ -14,11 +15,20 @@ module RSpec
14
15
  # Functional settings defaults
15
16
  @clear_all_enqueued_jobs = true
16
17
  @warn_when_jobs_not_processed_by_sidekiq = true
18
+ @silence_warnings = Set.new
17
19
  end
18
20
 
19
21
  def sidekiq_gte_7?
20
22
  Gem::Version.new(::Sidekiq::VERSION) >= Gem::Version.new("7.0.0")
21
23
  end
24
+
25
+ def silence_warning(symbol)
26
+ @silence_warnings << symbol
27
+ end
28
+
29
+ def warn_for?(symbol)
30
+ !@silence_warnings.include?(symbol)
31
+ end
22
32
  end
23
33
  end
24
34
  end
@@ -16,7 +16,7 @@ module RSpec
16
16
  private
17
17
 
18
18
  def at_evaluator(value)
19
- return false if job["at"].to_s.empty?
19
+ return value.nil? if job["at"].to_s.empty?
20
20
  value == Time.at(job["at"]).to_i
21
21
  end
22
22
 
@@ -162,6 +162,7 @@ module RSpec
162
162
  # @api private
163
163
  class Base
164
164
  include RSpec::Mocks::ArgumentMatchers
165
+ include RSpec::Matchers::Composable
165
166
 
166
167
  attr_reader :expected_arguments, :expected_options, :klass, :actual_jobs
167
168
 
@@ -185,6 +186,11 @@ module RSpec
185
186
  self
186
187
  end
187
188
 
189
+ def immediately
190
+ @expected_options["at"] = nil
191
+ self
192
+ end
193
+
188
194
  def on(queue)
189
195
  @expected_options["queue"] = queue
190
196
  self
@@ -56,7 +56,8 @@ module RSpec
56
56
  #
57
57
  # Passes if a Job is enqueued as the result of a block. Chainable `with`
58
58
  # for arguments, `on` for queue, `at` for queued for a specific time, and
59
- # `in` for a specific interval delay to being queued
59
+ # `in` for a specific interval delay to being queued, `immediately` for
60
+ # queued without delay.
60
61
  #
61
62
  # @example
62
63
  #
@@ -79,6 +80,17 @@ module RSpec
79
80
  # freeze_time do
80
81
  # expect { AwesomeJob.perform_in(1.hour) }.to enqueue_sidekiq_job.in(1.hour)
81
82
  # end
83
+ #
84
+ # # Without any delay
85
+ # expect { AwesomeJob.perform_async }.to enqueue_sidekiq_job.immediately
86
+ # expect { AwesomeJob.perform_at(1.hour.ago) }.to enqueue_sidekiq_job.immediately
87
+ #
88
+ # ## Composable
89
+ #
90
+ # expect do
91
+ # AwesomeJob.perform_async
92
+ # OtherJob.perform_async
93
+ # end.to enqueue_sidekiq_job(AwesomeJob).and enqueue_sidekiq_job(OtherJob)
82
94
  def enqueue_sidekiq_job(job_class = nil)
83
95
  EnqueueSidekiqJob.new(job_class)
84
96
  end
@@ -7,8 +7,18 @@ module RSpec
7
7
 
8
8
  # @api private
9
9
  class HaveEnqueuedSidekiqJob < Base
10
+ DEPRECATION = [
11
+ "[WARNING] `have_enqueued_sidekiq_job()` without arguments default behavior will change in next major release.",
12
+ "Use `have_enqueued_sidekiq_job(no_args)` to maintain legacy behavior.",
13
+ "More available here: https://github.com/wspurgin/rspec-sidekiq/wiki/have_enqueued_sidekiq_job-without-argument-default-behavior"
14
+ ].join(" ").freeze
15
+
10
16
  def initialize(expected_arguments)
11
17
  super()
18
+
19
+ if expected_arguments == [] && RSpec::Sidekiq.configuration.warn_for?(:have_enqueued_sidekiq_job_default)
20
+ Kernel.warn(DEPRECATION, uplevel: 3)
21
+ end
12
22
  @expected_arguments = normalize_arguments(expected_arguments)
13
23
  end
14
24
 
@@ -16,7 +26,6 @@ module RSpec
16
26
  @klass = job_class
17
27
 
18
28
  @actual_jobs = EnqueuedJobs.new(klass)
19
-
20
29
  actual_jobs.includes?(expected_arguments, expected_options)
21
30
  end
22
31
  end
@@ -1,4 +1,5 @@
1
1
  require "rspec/core"
2
+ require "rspec/matchers"
2
3
  require "rspec/mocks/argument_list_matcher"
3
4
  require "rspec/mocks/argument_matchers"
4
5
 
@@ -1,5 +1,5 @@
1
1
  module RSpec
2
2
  module Sidekiq
3
- VERSION = "4.0.2"
3
+ VERSION = "4.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.2
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aidan Coyle
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2023-08-25 00:00:00.000000000 Z
13
+ date: 2024-04-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec-core
@@ -266,7 +266,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
266
266
  requirements:
267
267
  - - ">="
268
268
  - !ruby/object:Gem::Version
269
- version: '0'
269
+ version: '2.7'
270
270
  required_rubygems_version: !ruby/object:Gem::Requirement
271
271
  requirements:
272
272
  - - ">="