7a67f1a802
We currently have many failed VirusScannerJob enqueued, because the
underlying blob is missing.
This PR fixes the issue by discarding the job in those cases (because if
the blob is gone, the job is never going to succeed).
The implementation is based on a similar issue encoutered by the
ActiveStorage::AnalyzeJob. See 06f8baf73c
48 lines
1.2 KiB
Ruby
48 lines
1.2 KiB
Ruby
RSpec.describe VirusScannerJob, type: :job do
|
|
include ActiveJob::TestHelper
|
|
|
|
let(:champ) do
|
|
champ = create(:champ, :piece_justificative)
|
|
champ.piece_justificative_file.attach(io: StringIO.new("toto"), filename: "toto.txt", content_type: "text/plain")
|
|
champ.save
|
|
champ
|
|
end
|
|
|
|
subject do
|
|
perform_enqueued_jobs do
|
|
VirusScannerJob.perform_later(champ.piece_justificative_file.blob)
|
|
end
|
|
end
|
|
|
|
context "when no virus is found" do
|
|
let(:virus_found?) { true }
|
|
|
|
before do
|
|
allow(ClamavService).to receive(:safe_file?).and_return(virus_found?)
|
|
subject
|
|
end
|
|
|
|
it { expect(champ.reload.piece_justificative_file.virus_scanner.safe?).to be_truthy }
|
|
end
|
|
|
|
context "when a virus is found" do
|
|
let(:virus_found?) { false }
|
|
|
|
before do
|
|
allow(ClamavService).to receive(:safe_file?).and_return(virus_found?)
|
|
subject
|
|
end
|
|
|
|
it { expect(champ.reload.piece_justificative_file.virus_scanner.infected?).to be_truthy }
|
|
end
|
|
|
|
context "when the blob has been deleted" do
|
|
before do
|
|
Champ.find(champ.id).piece_justificative_file.purge
|
|
end
|
|
|
|
it "ignores the error" do
|
|
expect { subject }.not_to raise_error
|
|
end
|
|
end
|
|
end
|