From 1b27ab5aff13ac7116487633c13b423bd07db290 Mon Sep 17 00:00:00 2001 From: kara Diaby Date: Thu, 4 Nov 2021 12:01:16 +0100 Subject: [PATCH] tests --- spec/jobs/virus_scanner_job_spec.rb | 88 ++++++++++++++++------------- 1 file changed, 49 insertions(+), 39 deletions(-) diff --git a/spec/jobs/virus_scanner_job_spec.rb b/spec/jobs/virus_scanner_job_spec.rb index ce663cdac..2ea97bff6 100644 --- a/spec/jobs/virus_scanner_job_spec.rb +++ b/spec/jobs/virus_scanner_job_spec.rb @@ -7,57 +7,67 @@ describe VirusScannerJob, type: :job do VirusScannerJob.perform_now(blob) end - context "when the blob is not analyzed yet" do - it "retries the job later" do - expect { subject }.to have_enqueued_job(VirusScannerJob) + context "when the virus scan launch before rails analyze" do + before do + allow(ClamavService).to receive(:safe_file?).and_return(true) + subject + blob.analyze + end + it { expect(blob.virus_scanner.safe?).to be_truthy } + it { expect(blob.analyzed?).to be_truthy } + it { expect(blob.lock_version).to eq(2) } + end + + context "should raise ActiveRecord::StaleObjectError" do + let(:blob_2) { ActiveStorage::Blob.find(blob.id) } + before do + blob_2.metadata[:virus_scan_result] = "infected" + blob.metadata[:virus_scan_result] = "safe" + blob.save + end + + it { expect { blob_2.save }.to raise_error(ActiveRecord::StaleObjectError) } + end + + context "when there is an integrity error" do + before do + blob.update_column('checksum', 'integrity error') + + assert_performed_jobs(5) do + VirusScannerJob.perform_later(blob) + end + end + + it do + expect(blob.reload.virus_scanner.corrupt?).to be_truthy end end - context "when the blob has been analyzed" do + context "when no virus is found" do before do - blob.analyze + allow(ClamavService).to receive(:safe_file?).and_return(true) + subject end - context "when there is an integrity error" do - before do - blob.update_column('checksum', 'integrity error') + it { expect(blob.virus_scanner.safe?).to be_truthy } + end - assert_performed_jobs(5) do - VirusScannerJob.perform_later(blob) - end - end - - it do - expect(blob.reload.virus_scanner.corrupt?).to be_truthy - end + context "when a virus is found" do + before do + allow(ClamavService).to receive(:safe_file?).and_return(false) + subject end - context "when no virus is found" do - before do - allow(ClamavService).to receive(:safe_file?).and_return(true) - subject - end + it { expect(blob.virus_scanner.infected?).to be_truthy } + end - it { expect(blob.virus_scanner.safe?).to be_truthy } + context "when the blob has been deleted" do + before do + ActiveStorage::Blob.find(blob.id).purge end - context "when a virus is found" do - before do - allow(ClamavService).to receive(:safe_file?).and_return(false) - subject - end - - it { expect(blob.virus_scanner.infected?).to be_truthy } - end - - context "when the blob has been deleted" do - before do - ActiveStorage::Blob.find(blob.id).purge - end - - it "ignores the error" do - expect { subject }.not_to raise_error - end + it "ignores the error" do + expect { subject }.not_to raise_error end end end