From 8b20c9e0baa56566eb6735774a1ca02495e130dd Mon Sep 17 00:00:00 2001 From: Robert Gradowski Date: Wed, 23 Oct 2024 17:20:38 +0200 Subject: [PATCH] spec edit --- .rubocop.yml | 2 +- Gemfile.lock | 6 +++++ lib/sidekiq-poison-pill-remedy.rb | 3 +++ lib/{remedy => }/version.rb | 0 sidekiq-poison-pill-remedy.gemspec | 3 ++- spec/sidekiq_poison_pill_remedy_spec.rb | 31 +++++++++++++++++++++---- spec/spec_helper.rb | 13 +++++++++++ spec/support/my_job.rb | 7 ++++++ 8 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 lib/sidekiq-poison-pill-remedy.rb rename lib/{remedy => }/version.rb (100%) create mode 100644 spec/support/my_job.rb diff --git a/.rubocop.yml b/.rubocop.yml index e0968f9..2b9e324 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -5,4 +5,4 @@ AllCops: Metrics/AbcSize: Max: 19 Metrics/MethodLength: - Max: 20 # Increase the limit + Max: 20 \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 0da6042..abcb94b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -38,6 +38,11 @@ GEM rspec-mocks (3.13.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) + rspec-sidekiq (5.0.0) + rspec-core (~> 3.0) + rspec-expectations (~> 3.0) + rspec-mocks (~> 3.0) + sidekiq (>= 5, < 8) rspec-support (3.13.1) rubocop (1.66.1) json (~> 2.3) @@ -77,6 +82,7 @@ PLATFORMS DEPENDENCIES rake (~> 13.0) rspec (~> 3.0) + rspec-sidekiq rubocop (~> 1.40) rubocop-performance rubocop-rake diff --git a/lib/sidekiq-poison-pill-remedy.rb b/lib/sidekiq-poison-pill-remedy.rb new file mode 100644 index 0000000..78c0ba0 --- /dev/null +++ b/lib/sidekiq-poison-pill-remedy.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true + +require 'sidekiq_poison_pill_remedy' diff --git a/lib/remedy/version.rb b/lib/version.rb similarity index 100% rename from lib/remedy/version.rb rename to lib/version.rb diff --git a/sidekiq-poison-pill-remedy.gemspec b/sidekiq-poison-pill-remedy.gemspec index c54a661..577a744 100644 --- a/sidekiq-poison-pill-remedy.gemspec +++ b/sidekiq-poison-pill-remedy.gemspec @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative 'lib/remedy/version' +require_relative 'lib/version' Gem::Specification.new do |spec| spec.name = 'sidekiq-poison-pill-remedy' @@ -34,6 +34,7 @@ Gem::Specification.new do |spec| # Uncomment to register a new dependency of your gem # spec.add_dependency "example-gem", "~> 1.0" spec.add_dependency 'sidekiq' + spec.add_development_dependency 'rspec-sidekiq' # For more information and examples about making a new gem, check out our # guide at: https://bundler.io/guides/creating_gem.html diff --git a/spec/sidekiq_poison_pill_remedy_spec.rb b/spec/sidekiq_poison_pill_remedy_spec.rb index cd099c2..63a78cf 100644 --- a/spec/sidekiq_poison_pill_remedy_spec.rb +++ b/spec/sidekiq_poison_pill_remedy_spec.rb @@ -1,13 +1,34 @@ # frozen_string_literal: true -require_relative '../lib/sidekiq_poison_pill_remedy' +require 'sidekiq/testing' +require 'rspec-sidekiq' +require 'sidekiq' +require 'sidekiq-poison-pill-remedy' +require 'support/my_job' RSpec.describe SidekiqPoisonPillRemedy do - it 'has a version number' do - expect(SidekiqPoisonPillRemedy::VERSION).not_to be nil + let(:job_args) { ['test_argument'] } + let(:jid) { MyJob.perform_async(*job_args) } + + before do + Sidekiq::Testing.fake! end - it 'does something useful' do - expect(true).to eq(true) + it 'moves job to poison_pill queue and logs message' do + begin + MyJob.new.perform('fail') + rescue StandardError + nil + end + + job = Sidekiq::DeadSet.new.find_job(jid) + + expect(job).not_to be_nil + expect(job.klass).to eq('MyJob') + + SidekiqPoisonPillRemedy.remedy.call(nil, job) + + poison_pill_job = Sidekiq::Queue.new('poison_pill').find_job(job.jid) + expect(poison_pill_job).not_to be_nil end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 7ee4005..5b8cf22 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,5 +1,12 @@ # frozen_string_literal: true +require 'bundler/setup' +require 'sidekiq/testing' +require 'rspec-sidekiq' +require 'sentry-ruby' +require 'sidekiq' +require 'sidekiq-poison-pill-remedy' + RSpec.configure do |config| # Enable flags like --only-failures and --next-failure config.example_status_persistence_file_path = '.rspec_status' @@ -10,4 +17,10 @@ config.expect_with :rspec do |c| c.syntax = :expect end + + config.before(:all) do + ENV['REDIS_URL'] ||= 'redis://localhost:6379/1' + end + + Dir[File.join(__dir__, 'support', '**', '*.rb')].each { |f| require f } end diff --git a/spec/support/my_job.rb b/spec/support/my_job.rb new file mode 100644 index 0000000..d2cf526 --- /dev/null +++ b/spec/support/my_job.rb @@ -0,0 +1,7 @@ +class MyJob + include Sidekiq::Worker + + def perform(arg) + raise 'An error occurred!' if arg == 'fail' + end +end