From 78bfd47ad38aa1cae206b9c4f30d24d7be2c962c Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 15 Feb 2024 16:36:01 +1100 Subject: [PATCH] Add rake task to reset queued jobs Please note that the spec is using Redis as Sidekiq does. This revealed that Sidekiq wasn't set up for jobs in the test environment properly. --- .env.test | 2 ++ lib/tasks/reset.rake | 27 +++++++++++++++++++++++++++ spec/lib/tasks/reset_spec.rb | 26 ++++++++++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 lib/tasks/reset.rake create mode 100644 spec/lib/tasks/reset_spec.rb diff --git a/.env.test b/.env.test index bb625a4d02..535d37a9e0 100644 --- a/.env.test +++ b/.env.test @@ -1,6 +1,8 @@ # ENV vars for the test environment # Override locally with `.env.test.local` +OFN_REDIS_JOBS_URL="redis://localhost:6379/2" + SECRET_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" STRIPE_INSTANCE_SECRET_KEY="bogus_key" STRIPE_CUSTOMER="bogus_customer" diff --git a/lib/tasks/reset.rake b/lib/tasks/reset.rake new file mode 100644 index 0000000000..35e5819aa6 --- /dev/null +++ b/lib/tasks/reset.rake @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'sidekiq/api' + +namespace :ofn do + task reset: :environment do + Rake::Task["ofn:reset_sidekiq"].invoke + Rake::Task["db:reset"].invoke + end + + task reset_sidekiq: :environment do + # Clear retry set + Sidekiq::RetrySet.new.clear + + # Clear scheduled jobs + Sidekiq::ScheduledSet.new.clear + + # Clear 'Dead' jobs statistics + Sidekiq::DeadSet.new.clear + + # Clear 'Processed' and 'Failed' jobs statistics + Sidekiq::Stats.new.reset + + # Clear all queues + Sidekiq::Queue.all.map(&:clear) + end +end diff --git a/spec/lib/tasks/reset_spec.rb b/spec/lib/tasks/reset_spec.rb new file mode 100644 index 0000000000..9c05cff671 --- /dev/null +++ b/spec/lib/tasks/reset_spec.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +require 'spec_helper' +require 'rake' + +describe "reset.rake" do + before(:all) do + Rake.application.rake_require("tasks/reset") + Rake::Task.define_task(:environment) + end + + it "clears job queues" do + job_class = Class.new do + include Sidekiq::Job + end + job_class.perform_async + + queue = Sidekiq::Queue.all.first # rubocop:disable Rails/RedundantActiveRecordAllMethod + + expect { + Rake.application.invoke_task "ofn:reset_sidekiq" + }.to change { + queue.count + }.to(0) + end +end