59 lines
1.7 KiB
Ruby
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
|