2024-04-29 00:17:15 +02:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-12-16 09:12:16 +01:00
|
|
|
describe ClamavService do
|
|
|
|
describe '.safe_file?' do
|
|
|
|
let(:path_file) { '/tmp/plop.txt' }
|
|
|
|
|
2019-02-05 14:23:43 +01:00
|
|
|
subject { ClamavService.safe_file?(path_file) }
|
2016-12-16 09:12:16 +01:00
|
|
|
|
2022-01-28 16:20:11 +01:00
|
|
|
context "when ClamAV is enabled" do
|
|
|
|
before do
|
|
|
|
@saved_clamav = Rails.configuration.x.clamav.enabled
|
|
|
|
Rails.configuration.x.clamav.enabled = true
|
2016-12-16 09:12:16 +01:00
|
|
|
|
2022-01-28 16:20:11 +01:00
|
|
|
client = double("ClamAV::Client", execute: [response])
|
|
|
|
allow(ClamAV::Client).to receive(:new).and_return(client)
|
|
|
|
allow(FileUtils).to receive(:chmod).with(0666, path_file).and_return(true)
|
|
|
|
end
|
|
|
|
|
|
|
|
after do
|
|
|
|
Rails.configuration.x.clamav.enabled = @saved_clamav
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'When response type is ClamAV::SuccessResponse' do
|
|
|
|
let(:response) { ClamAV::SuccessResponse.new("OK") }
|
|
|
|
it { expect(subject).to eq(true) }
|
|
|
|
end
|
2019-02-05 14:23:43 +01:00
|
|
|
|
2022-01-28 16:20:11 +01:00
|
|
|
context 'When response type is ClamAV::VirusResponse' do
|
|
|
|
let(:response) { ClamAV::VirusResponse.new("KO", "VirusN4ame") }
|
|
|
|
it { expect(subject).to eq(false) }
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'When response type is ClamAV::ErrorResponse' do
|
|
|
|
let(:response) { ClamAV::ErrorResponse.new("File not found") }
|
|
|
|
it { expect { subject }.to raise_error("ClamAV ErrorResponse : File not found") }
|
|
|
|
end
|
2019-02-05 14:23:43 +01:00
|
|
|
end
|
2016-12-16 09:12:16 +01:00
|
|
|
|
2022-01-28 16:20:11 +01:00
|
|
|
context "when ClamAV is disabled" do
|
|
|
|
before do
|
|
|
|
@saved_clamav = Rails.configuration.x.clamav.enabled
|
|
|
|
Rails.configuration.x.clamav.enabled = false
|
|
|
|
end
|
|
|
|
|
|
|
|
after do
|
|
|
|
Rails.configuration.x.clamav.enabled = @saved_clamav
|
|
|
|
end
|
|
|
|
|
|
|
|
it do
|
|
|
|
expect(ClamAV::Client).not_to receive(:new)
|
|
|
|
expect(FileUtils).not_to receive(:chmod)
|
|
|
|
expect(subject).to eq(true)
|
|
|
|
end
|
2016-12-16 09:12:16 +01:00
|
|
|
end
|
|
|
|
end
|
2017-04-04 15:27:04 +02:00
|
|
|
end
|