otwarchive-symphonyarchive/spec/lib/tasks/resque.rake_spec.rb
2026-03-11 22:22:11 +00:00

59 lines
1.7 KiB
Ruby

require "spec_helper"
class PassingJob
def self.perform(_string); end
end
class FailingJob
def self.perform(_string)
work = Work.find_by(id: 1)
work&.destroy
Work.find 1
end
end
class BrokenJob
def self.perform(_string)
Work.no_such_method
end
end
describe "rake resque:run_failures" do
let(:worker) { Resque::Worker.new(:tests) }
before { Resque::Failure.clear }
after { Resque::Failure.clear }
it "clears out passing jobs" do
Resque::Failure.create(exception: Exception.new(ActiveRecord::RecordNotFound),
worker: worker,
queue: 'tests',
payload: { 'class' => 'PassingJob', 'args' => 'retry found me' })
expect(Resque::Failure.count).to eq(1)
subject.invoke
expect(Resque::Failure.count).to eq(0)
end
it "clears out failing jobs if they're RecordNotFound" do
Resque::Failure.create(exception: Exception.new(ActiveRecord::RecordNotFound),
worker: worker,
queue: 'tests',
payload: { 'class' => 'FailingJob', 'args' => 'still missing on retry' })
expect(Resque::Failure.count).to eq(1)
subject.invoke
expect(Resque::Failure.count).to eq(0)
end
it "does not clear out failing jobs if they're not RecordNotFound" do
Resque::Failure.create(exception: Exception.new(NoMethodError),
worker: worker,
queue: 'tests',
payload: { 'class' => 'BrokenJob', 'args' => 'will never work' })
expect(Resque::Failure.count).to eq(1)
subject.invoke
expect(Resque::Failure.count).to eq(1)
end
end