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.
This commit is contained in:
Maikel Linke
2024-02-15 16:36:01 +11:00
parent c15bf61099
commit 78bfd47ad3
3 changed files with 55 additions and 0 deletions

View File

@@ -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"

27
lib/tasks/reset.rake Normal file
View File

@@ -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

View File

@@ -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