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