rspec-sidekiq 4.0.2 → 4.2.0

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: 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
  - - ">="