diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a73a866..9afb5e6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -25,6 +25,7 @@ jobs: - 'gemfiles/sidekiq6_4_rails7.gemfile' - 'gemfiles/sidekiq6_5_rails6.gemfile' - 'gemfiles/sidekiq6_5_rails7.gemfile' + - 'gemfiles/sidekiq7_rails7.gemfile' env: BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }} steps: diff --git a/LICENSE b/LICENSE index 7a5cc01..f058b91 100644 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,17 @@ The MIT License (MIT) +Copyright (c) 2023 Will Spurgin + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Elements of this software and associated documentation files are covered by the following license: + +The MIT License (MIT) + Copyright (c) 2014, 2015 Phil Ostler Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/README.md b/README.md index 59c6a30..f288b2a 100644 --- a/README.md +++ b/README.md @@ -36,33 +36,58 @@ end ``` ## Matchers -* [be_delayed](#be_delayed) +* [have_enqueued_sidekiq_job](#have_enqueued_sidekiq_job) * [be_processed_in](#be_processed_in) * [be_retryable](#be_retryable) * [be_unique](#be_unique) -* [have_enqueued_sidekiq_job](#have_enqueued_sidekiq_job) +* [be_delayed (_deprecated_)](#be_delayed) + +### have_enqueued_sidekiq_job +*Describes that there should be an enqueued job with the specified arguments* + +**Note:** When using rspec-rails >= 3.4, use `have_enqueued_sidekiq_job` instead to +prevent a name clash with rspec-rails' ActiveJob matcher. -### be_delayed -*Describes a method that should be invoked asynchronously (See [Sidekiq Delayed Extensions][sidekiq_wiki_delayed_extensions])* ```ruby -Object.delay.is_nil? # delay -expect(Object.method :is_nil?).to be_delayed -Object.delay.is_a? Object # delay with argument -expect(Object.method :is_a?).to be_delayed(Object) +AwesomeJob.perform_async 'Awesome', true +# test with... +expect(AwesomeJob).to have_enqueued_sidekiq_job('Awesome', true) -Object.delay_for(1.hour).is_nil? # delay for -expect(Object.method :is_nil?).to be_delayed.for 1.hour -Object.delay_for(1.hour).is_a? Object # delay for with argument -expect(Object.method :is_a?).to be_delayed(Object).for 1.hour +# Code written with older versions of the gem may use the deprecated +# have_enqueued_job matcher. +expect(AwesomeJob).to have_enqueued_job('Awesome', true) +``` -Object.delay_until(1.hour.from_now).is_nil? # delay until -expect(Object.method :is_nil?).to be_delayed.until 1.hour.from_now -Object.delay_until(1.hour.from_now).is_a? Object # delay until with argument -expect(Object.method :is_a?).to be_delayed(Object).until 1.hour.from_now +#### Testing scheduled jobs -#Rails Mailer -MyMailer.delay.some_mail -expect(MyMailer.instance_method :some_mail).to be_delayed +*Use chainable matchers `#at` and `#in`* + +```ruby +time = 5.minutes.from_now +Awesomejob.perform_at time, 'Awesome', true +# test with... +expect(AwesomeJob).to have_enqueued_sidekiq_job('Awesome', true).at(time) +``` +```ruby +Awesomejob.perform_in 5.minutes, 'Awesome', true +# test with... +expect(AwesomeJob).to have_enqueued_sidekiq_job('Awesome', true).in(5.minutes) +``` + + +#### Testing ActiveMailer jobs + +```ruby +user = User.first +AwesomeActionMailer.invite(user, true).deliver_later + +expect(Sidekiq::Worker).to have_enqueued_sidekiq_job( + "AwesomeActionMailer", + "invite", + "deliver_now", + user, + true +) ``` ### be_processed_in @@ -124,51 +149,32 @@ it { is_expected.to be_expired_in 1.hour } it { is_expected.to_not be_expired_in 2.hours } ``` -### have_enqueued_sidekiq_job -*Describes that there should be an enqueued job with the specified arguments* - -**Note:** When using rspec-rails >= 3.4, use `have_enqueued_sidekiq_job` instead to -prevent a name clash with rspec-rails' ActiveJob matcher. - -```ruby -AwesomeJob.perform_async 'Awesome', true -# test with... -expect(AwesomeJob).to have_enqueued_sidekiq_job('Awesome', true) - -# Code written with older versions of the gem may use the deprecated -# have_enqueued_job matcher. -expect(AwesomeJob).to have_enqueued_job('Awesome', true) -``` - -#### Testing scheduled jobs +### be_delayed -*Use chainable matchers `#at` and `#in`* +**This matcher is deprecated**. Use of it with Sidekiq 7+ will raise an error. +Sidekiq 7 [dropped Delayed +Extensions](https://github.com/sidekiq/sidekiq/issues/5076). +*Describes a method that should be invoked asynchronously (See [Sidekiq Delayed Extensions][sidekiq_wiki_delayed_extensions])* ```ruby -time = 5.minutes.from_now -Awesomejob.perform_at time, 'Awesome', true -# test with... -expect(AwesomeJob).to have_enqueued_sidekiq_job('Awesome', true).at(time) -``` -```ruby -Awesomejob.perform_in 5.minutes, 'Awesome', true -# test with... -expect(AwesomeJob).to have_enqueued_sidekiq_job('Awesome', true).in(5.minutes) -``` +Object.delay.is_nil? # delay +expect(Object.method :is_nil?).to be_delayed +Object.delay.is_a? Object # delay with argument +expect(Object.method :is_a?).to be_delayed(Object) -#### Testing ActiveMailer jobs +Object.delay_for(1.hour).is_nil? # delay for +expect(Object.method :is_nil?).to be_delayed.for 1.hour +Object.delay_for(1.hour).is_a? Object # delay for with argument +expect(Object.method :is_a?).to be_delayed(Object).for 1.hour -```ruby -user = User.first -AwesomeActionMailer.invite(user, true).deliver_later +Object.delay_until(1.hour.from_now).is_nil? # delay until +expect(Object.method :is_nil?).to be_delayed.until 1.hour.from_now +Object.delay_until(1.hour.from_now).is_a? Object # delay until with argument +expect(Object.method :is_a?).to be_delayed(Object).until 1.hour.from_now -expect(Sidekiq::Worker).to have_enqueued_sidekiq_job( - "AwesomeActionMailer", - "invite", - "deliver_now", - user, - true -) +#Rails Mailer +MyMailer.delay.some_mail +expect(MyMailer.instance_method :some_mail).to be_delayed ``` ## Example matcher usage diff --git a/gemfiles/sidekiq7_rails7.gemfile b/gemfiles/sidekiq7_rails7.gemfile new file mode 100644 index 0000000..a6d07f9 --- /dev/null +++ b/gemfiles/sidekiq7_rails7.gemfile @@ -0,0 +1,10 @@ +source 'https://rubygems.org' + +gem 'sidekiq', '~> 7' +gem 'activejob', '~> 7' +gem 'actionmailer', '~> 7' +gem 'activerecord', '~> 7' +gem "activemodel", "~> 7" +gem "railties", "~> 7" + +gemspec :path => '../' diff --git a/lib/rspec/sidekiq/configuration.rb b/lib/rspec/sidekiq/configuration.rb index 4c24272..d52bbe0 100644 --- a/lib/rspec/sidekiq/configuration.rb +++ b/lib/rspec/sidekiq/configuration.rb @@ -1,13 +1,24 @@ +require "rubygems" + module RSpec module Sidekiq class Configuration - attr_accessor :clear_all_enqueued_jobs, :enable_terminal_colours, :warn_when_jobs_not_processed_by_sidekiq + attr_accessor :clear_all_enqueued_jobs, + :enable_terminal_colours, + :warn_when_jobs_not_processed_by_sidekiq def initialize - @clear_all_enqueued_jobs = true + # Display settings defaults @enable_terminal_colours = true + + # Functional settings defaults + @clear_all_enqueued_jobs = true @warn_when_jobs_not_processed_by_sidekiq = true end + + def sidekiq_gte_7? + Gem::Version.new(::Sidekiq::VERSION) >= Gem::Version.new("7.0.0") + end end end end diff --git a/lib/rspec/sidekiq/matchers/be_delayed.rb b/lib/rspec/sidekiq/matchers/be_delayed.rb index d8c67c1..dc4aa3f 100644 --- a/lib/rspec/sidekiq/matchers/be_delayed.rb +++ b/lib/rspec/sidekiq/matchers/be_delayed.rb @@ -7,6 +7,10 @@ def be_delayed(*expected_arguments) class BeDelayed def initialize(*expected_arguments) + raise <<~MSG if RSpec::Sidekiq.configuration.sidekiq_gte_7? + Use of the be_delayed matcher with Sidekiq 7+ is not possible. Try refactoring to a Sidekiq Job with `perform_at` or `perform_in` and the `have_enqueued_sidekiq_job` matcher + MSG + @expected_arguments = expected_arguments end diff --git a/rspec-sidekiq.gemspec b/rspec-sidekiq.gemspec index 586fd7d..c176259 100644 --- a/rspec-sidekiq.gemspec +++ b/rspec-sidekiq.gemspec @@ -1,40 +1,38 @@ -require File.expand_path('../lib/rspec/sidekiq/version', __FILE__) +require File.expand_path("../lib/rspec/sidekiq/version", __FILE__) Gem::Specification.new do |s| - s.name = 'rspec-sidekiq' + s.name = "rspec-sidekiq" s.version = RSpec::Sidekiq::VERSION s.platform = Gem::Platform::RUBY - s.author = 'Phil Ostler' - s.email = 'github@philostler.com' - s.homepage = 'http://github.com/philostler/rspec-sidekiq' - s.summary = 'RSpec for Sidekiq' - s.description = 'Simple testing of Sidekiq jobs via a collection of matchers and helpers' - s.license = 'MIT' + s.authors = ["Aidan Coyle", "Phil Ostler", "Will Spurgin"] + s.homepage = "http://github.com/wspurgin/rspec-sidekiq" + s.summary = "RSpec for Sidekiq" + s.description = "Simple testing of Sidekiq jobs via a collection of matchers and helpers" + s.license = "MIT" - s.add_dependency 'rspec-core', '~> 3.0', '>= 3.0.0' - s.add_dependency 'sidekiq', '>= 2.4.0', '< 7' + s.add_dependency "rspec-core", "~> 3.0", ">= 3.0.0" + s.add_dependency "sidekiq", ">= 5", "< 8" - s.add_development_dependency 'pry' - s.add_development_dependency 'pry-doc' - s.add_development_dependency 'pry-nav' - s.add_development_dependency 'rspec' - s.add_development_dependency 'coveralls' - s.add_development_dependency 'fuubar' - s.add_development_dependency 'activejob' - s.add_development_dependency 'actionmailer' - s.add_development_dependency 'activerecord' - s.add_development_dependency 'activemodel' - s.add_development_dependency 'activesupport' + s.add_development_dependency "pry" + s.add_development_dependency "pry-doc" + s.add_development_dependency "pry-nav" + s.add_development_dependency "rspec" + s.add_development_dependency "coveralls" + s.add_development_dependency "fuubar" + s.add_development_dependency "activejob" + s.add_development_dependency "actionmailer" + s.add_development_dependency "activerecord" + s.add_development_dependency "activemodel" + s.add_development_dependency "activesupport" - - s.files = Dir['.gitattributes'] + - Dir['.gitignore'] + - Dir['.rspec'] + - Dir['CHANGES.md'] + - Dir['Gemfile'] + - Dir['LICENSE'] + - Dir['README.md'] + - Dir['rspec-sidekiq.gemspec'] + - Dir['**/*.rb'] - s.require_paths = ['lib'] + s.files = Dir[".gitattributes"] + + Dir[".gitignore"] + + Dir[".rspec"] + + Dir["CHANGES.md"] + + Dir["Gemfile"] + + Dir["LICENSE"] + + Dir["README.md"] + + Dir["rspec-sidekiq.gemspec"] + + Dir["**/*.rb"] + s.require_paths = ["lib"] end diff --git a/spec/rspec/sidekiq/matchers/be_delayed_spec.rb b/spec/rspec/sidekiq/matchers/be_delayed_spec.rb index 835ebfd..5bb0da7 100644 --- a/spec/rspec/sidekiq/matchers/be_delayed_spec.rb +++ b/spec/rspec/sidekiq/matchers/be_delayed_spec.rb @@ -1,237 +1,243 @@ -require 'spec_helper' +require "spec_helper" RSpec.describe RSpec::Sidekiq::Matchers::BeDelayed do - let(:delay_subject) { RSpec::Sidekiq::Matchers::BeDelayed.new } - let(:delay_with_arguments_subject) { RSpec::Sidekiq::Matchers::BeDelayed.new Object } - let(:delay_for_subject) { RSpec::Sidekiq::Matchers::BeDelayed.new.for 3600 } - let(:delay_for_with_arguments_subject) { RSpec::Sidekiq::Matchers::BeDelayed.new(Object).for 3600 } - let(:delay_until_subject) { RSpec::Sidekiq::Matchers::BeDelayed.new.until Time.now + 3600 } - let(:delay_until_with_arguments_subject) { RSpec::Sidekiq::Matchers::BeDelayed.new(Object).until Time.now + 3600 } - before(:each) do - delay_subject.matches? Object.method :nil? - delay_with_arguments_subject.matches? Object.method :is_a? - - delay_for_subject.matches? Object.method :nil? - delay_for_with_arguments_subject.matches? Object.method :is_a? - - delay_until_subject.matches? Object.method :nil? - delay_until_with_arguments_subject.matches? Object.method :is_a? - end + if RSpec.configuration.sidekiq_gte_7 + it "should raise an error" do + expect { described_class.new }.to raise_error(/Use of the be_delayed matcher with Sidekiq 7\+ is not possible/) + end + else + let(:delay_subject) { RSpec::Sidekiq::Matchers::BeDelayed.new } + let(:delay_with_arguments_subject) { RSpec::Sidekiq::Matchers::BeDelayed.new Object } + let(:delay_for_subject) { RSpec::Sidekiq::Matchers::BeDelayed.new.for 3600 } + let(:delay_for_with_arguments_subject) { RSpec::Sidekiq::Matchers::BeDelayed.new(Object).for 3600 } + let(:delay_until_subject) { RSpec::Sidekiq::Matchers::BeDelayed.new.until Time.now + 3600 } + let(:delay_until_with_arguments_subject) { RSpec::Sidekiq::Matchers::BeDelayed.new(Object).until Time.now + 3600 } + before(:each) do + delay_subject.matches? Object.method :nil? + delay_with_arguments_subject.matches? Object.method :is_a? - describe 'expected usage' do - it 'matches' do - Object.delay_for(3600).is_a? Object + delay_for_subject.matches? Object.method :nil? + delay_for_with_arguments_subject.matches? Object.method :is_a? - expect(Object.method :is_a?).to be_delayed(Object).for 3600 + delay_until_subject.matches? Object.method :nil? + delay_until_with_arguments_subject.matches? Object.method :is_a? end - end - describe '#be_delayed_job' do - it 'returns instance' do - expect(be_delayed).to be_a RSpec::Sidekiq::Matchers::BeDelayed - end - end + describe 'expected usage' do + it 'matches' do + Object.delay_for(3600).is_a? Object - describe '#description' do - context 'when expected is a delay' do - it 'returns description' do - expect(delay_subject.description).to eq 'be delayed' + expect(Object.method :is_a?).to be_delayed(Object).for 3600 end end - context 'when expected is a delay with arguments' do - it 'returns description' do - expect(delay_with_arguments_subject.description).to eq 'be delayed with arguments [Object]' + describe '#be_delayed_job' do + it 'returns instance' do + expect(be_delayed).to be_a RSpec::Sidekiq::Matchers::BeDelayed end end - context 'when expected is a delay for' do - it 'returns description' do - expect(delay_for_subject.description).to eq 'be delayed for 3600 seconds' + describe '#description' do + context 'when expected is a delay' do + it 'returns description' do + expect(delay_subject.description).to eq 'be delayed' + end end - end - context 'when expected is a delay for with arguments' do - it 'returns description' do - expect(delay_for_with_arguments_subject.description).to eq 'be delayed for 3600 seconds with arguments [Object]' + context 'when expected is a delay with arguments' do + it 'returns description' do + expect(delay_with_arguments_subject.description).to eq 'be delayed with arguments [Object]' + end end - end - context 'when expected is a delay until' do - it 'returns description' do - expect(delay_until_subject.description).to eq "be delayed until #{Time.now + 3600}" + context 'when expected is a delay for' do + it 'returns description' do + expect(delay_for_subject.description).to eq 'be delayed for 3600 seconds' + end end - end - context 'when expected is a delay until with arguments' do - it 'returns description' do - expect(delay_until_with_arguments_subject.description).to eq "be delayed until #{Time.now + 3600} with arguments [Object]" + context 'when expected is a delay for with arguments' do + it 'returns description' do + expect(delay_for_with_arguments_subject.description).to eq 'be delayed for 3600 seconds with arguments [Object]' + end end - end - end - describe '#failure_message' do - context 'when expected is a delay' do - it 'returns message' do - expect(delay_subject.failure_message).to eq 'expected Object.nil? to be delayed' + context 'when expected is a delay until' do + it 'returns description' do + expect(delay_until_subject.description).to eq "be delayed until #{Time.now + 3600}" + end end - end - context 'when expected is a delay with arguments' do - it 'returns message' do - expect(delay_with_arguments_subject.failure_message).to eq 'expected Object.is_a? to be delayed with arguments [Object]' + context 'when expected is a delay until with arguments' do + it 'returns description' do + expect(delay_until_with_arguments_subject.description).to eq "be delayed until #{Time.now + 3600} with arguments [Object]" + end + end end - end - context 'when expected is a delay for' do - it 'returns message' do - expect(delay_for_subject.failure_message).to eq 'expected Object.nil? to be delayed for 3600 seconds' + describe '#failure_message' do + context 'when expected is a delay' do + it 'returns message' do + expect(delay_subject.failure_message).to eq 'expected Object.nil? to be delayed' + end end - end - context 'when expected is a delay for with arguments' do - it 'returns message' do - expect(delay_for_with_arguments_subject.failure_message).to eq 'expected Object.is_a? to be delayed for 3600 seconds with arguments [Object]' + context 'when expected is a delay with arguments' do + it 'returns message' do + expect(delay_with_arguments_subject.failure_message).to eq 'expected Object.is_a? to be delayed with arguments [Object]' + end end - end - context 'when expected is a delay until' do - it 'returns message' do - expect(delay_until_subject.failure_message).to eq "expected Object.nil? to be delayed until #{Time.now + 3600}" + context 'when expected is a delay for' do + it 'returns message' do + expect(delay_for_subject.failure_message).to eq 'expected Object.nil? to be delayed for 3600 seconds' + end end - end - context 'when expected is a delay until with arguments' do - it 'returns message' do - expect(delay_until_with_arguments_subject.failure_message).to eq "expected Object.is_a? to be delayed until #{Time.now + 3600} with arguments [Object]" + context 'when expected is a delay for with arguments' do + it 'returns message' do + expect(delay_for_with_arguments_subject.failure_message).to eq 'expected Object.is_a? to be delayed for 3600 seconds with arguments [Object]' + end end - end - end - describe '#matches?' do - context 'when condition matches' do - context 'when expected is a delay' do - it 'returns true' do - Object.delay.nil? + context 'when expected is a delay until' do + it 'returns message' do + expect(delay_until_subject.failure_message).to eq "expected Object.nil? to be delayed until #{Time.now + 3600}" + end + end - expect(delay_subject.matches? Object.method :nil?).to be true + context 'when expected is a delay until with arguments' do + it 'returns message' do + expect(delay_until_with_arguments_subject.failure_message).to eq "expected Object.is_a? to be delayed until #{Time.now + 3600} with arguments [Object]" end end + end - context 'when expected is a delay with arguments' do - it 'returns true' do - Object.delay.is_a? Object + describe '#matches?' do + context 'when condition matches' do + context 'when expected is a delay' do + it 'returns true' do + Object.delay.nil? - expect(delay_with_arguments_subject.matches? Object.method :is_a?).to be true + expect(delay_subject.matches? Object.method :nil?).to be true + end end - end - context 'when expected is a delay for' do - it 'returns true' do - Object.delay_for(3600).nil? + context 'when expected is a delay with arguments' do + it 'returns true' do + Object.delay.is_a? Object - expect(delay_for_subject.matches? Object.method :nil?).to be true + expect(delay_with_arguments_subject.matches? Object.method :is_a?).to be true + end end - end - context 'when expected is a delay for with arguments' do - it 'returns true' do - Object.delay_for(3600).is_a? Object + context 'when expected is a delay for' do + it 'returns true' do + Object.delay_for(3600).nil? - expect(delay_for_with_arguments_subject.matches? Object.method :is_a?).to be true + expect(delay_for_subject.matches? Object.method :nil?).to be true + end end - end - context 'when expected is a delay until' do - it 'returns true' do - Object.delay_until(Time.now + 3600).nil? + context 'when expected is a delay for with arguments' do + it 'returns true' do + Object.delay_for(3600).is_a? Object - expect(delay_until_subject.matches? Object.method :nil?).to be true + expect(delay_for_with_arguments_subject.matches? Object.method :is_a?).to be true + end end - end - context 'when expected is a delay until with arguments' do - it 'returns true' do - Object.delay_until(Time.now + 3600).is_a? Object + context 'when expected is a delay until' do + it 'returns true' do + Object.delay_until(Time.now + 3600).nil? - expect(delay_until_with_arguments_subject.matches? Object.method :is_a?).to be true + expect(delay_until_subject.matches? Object.method :nil?).to be true + end end - end - end - context 'when condition does not match' do - context 'when expected is a delay' do - it 'returns false' do - expect(delay_subject.matches? Object.method :nil?).to be false + context 'when expected is a delay until with arguments' do + it 'returns true' do + Object.delay_until(Time.now + 3600).is_a? Object + + expect(delay_until_with_arguments_subject.matches? Object.method :is_a?).to be true + end + end end - end - context 'when expected is a delay with arguments' do - it 'returns false' do - expect(delay_with_arguments_subject.matches? Object.method :is_a?).to be false + context 'when condition does not match' do + context 'when expected is a delay' do + it 'returns false' do + expect(delay_subject.matches? Object.method :nil?).to be false + end end - end - context 'when expected is a delay for' do - it 'returns false' do - expect(delay_for_subject.matches? Object.method :nil?).to be false + context 'when expected is a delay with arguments' do + it 'returns false' do + expect(delay_with_arguments_subject.matches? Object.method :is_a?).to be false + end end - end - context 'when expected is a delay for with arguments' do - it 'returns false' do - expect(delay_for_with_arguments_subject.matches? Object.method :is_a?).to be false + context 'when expected is a delay for' do + it 'returns false' do + expect(delay_for_subject.matches? Object.method :nil?).to be false + end end - end - context 'when expected is a delay until' do - it 'returns false' do - expect(delay_until_subject.matches? Object.method :nil?).to be false + context 'when expected is a delay for with arguments' do + it 'returns false' do + expect(delay_for_with_arguments_subject.matches? Object.method :is_a?).to be false + end end - end - context 'when expected is a delay until with arguments' do - it 'returns false' do - expect(delay_until_with_arguments_subject.matches? Object.method :is_a?).to be false + context 'when expected is a delay until' do + it 'returns false' do + expect(delay_until_subject.matches? Object.method :nil?).to be false + end + end + + context 'when expected is a delay until with arguments' do + it 'returns false' do + expect(delay_until_with_arguments_subject.matches? Object.method :is_a?).to be false + end + end end end - end - end - describe '#failure_message_when_negated' do - context 'when expected is a delay' do - it 'returns message' do - expect(delay_subject.failure_message_when_negated).to eq 'expected Object.nil? to not be delayed' + describe '#failure_message_when_negated' do + context 'when expected is a delay' do + it 'returns message' do + expect(delay_subject.failure_message_when_negated).to eq 'expected Object.nil? to not be delayed' + end end - end - context 'when expected is a delay with arguments' do - it 'returns message' do - expect(delay_with_arguments_subject.failure_message_when_negated).to eq 'expected Object.is_a? to not be delayed with arguments [Object]' + context 'when expected is a delay with arguments' do + it 'returns message' do + expect(delay_with_arguments_subject.failure_message_when_negated).to eq 'expected Object.is_a? to not be delayed with arguments [Object]' + end end - end - context 'when expected is a delay for' do - it 'returns message' do - expect(delay_for_subject.failure_message_when_negated).to eq 'expected Object.nil? to not be delayed for 3600 seconds' + context 'when expected is a delay for' do + it 'returns message' do + expect(delay_for_subject.failure_message_when_negated).to eq 'expected Object.nil? to not be delayed for 3600 seconds' + end end - end - context 'when expected is a delay for with arguments' do - it 'returns message' do - expect(delay_for_with_arguments_subject.failure_message_when_negated).to eq 'expected Object.is_a? to not be delayed for 3600 seconds with arguments [Object]' + context 'when expected is a delay for with arguments' do + it 'returns message' do + expect(delay_for_with_arguments_subject.failure_message_when_negated).to eq 'expected Object.is_a? to not be delayed for 3600 seconds with arguments [Object]' + end end - end - context 'when expected is a delay until' do - it 'returns message' do - expect(delay_until_subject.failure_message_when_negated).to eq "expected Object.nil? to not be delayed until #{Time.now + 3600}" + context 'when expected is a delay until' do + it 'returns message' do + expect(delay_until_subject.failure_message_when_negated).to eq "expected Object.nil? to not be delayed until #{Time.now + 3600}" + end end - end - context 'when expected is a delay until with arguments' do - it 'returns message' do - expect(delay_until_with_arguments_subject.failure_message_when_negated).to eq "expected Object.is_a? to not be delayed until #{Time.now + 3600} with arguments [Object]" + context 'when expected is a delay until with arguments' do + it 'returns message' do + expect(delay_until_with_arguments_subject.failure_message_when_negated).to eq "expected Object.is_a? to not be delayed until #{Time.now + 3600} with arguments [Object]" + end end end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index a841556..8bba386 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -12,13 +12,22 @@ config.disable_monkey_patching! config.include RSpec::Sidekiq::Spec::Support::Factories -end -ActiveJob::Base.queue_adapter = :sidekiq -ActiveJob::Base.logger.level = :warn + # Add a setting to store our Sidekiq Version and share that around the specs + config.add_setting :sidekiq_gte_7 + config.add_setting :sidekiq_gte_5 + config.sidekiq_gte_5 = Gem::Dependency.new("sidekiq", ">= 5.0.0").matching_specs.any? + config.sidekiq_gte_7 = Gem::Dependency.new("sidekiq", ">= 7.0.0").matching_specs.any? + + config.before(:suite) do + ActiveJob::Base.queue_adapter = :sidekiq + ActiveJob::Base.logger.level = :warn + -if Gem::Dependency.new('sidekiq', '>= 5.0.0').matching_specs.any? - require 'active_record' - ActiveSupport.run_load_hooks(:active_record, ActiveRecord::Base) - Sidekiq::Extensions.enable_delay! + if config.sidekiq_gte_5 && !config.sidekiq_gte_7 + require "active_record" + ActiveSupport.run_load_hooks(:active_record, ActiveRecord::Base) + Sidekiq::Extensions.enable_delay! + end + end end