Validate virus free with Clamav
This commit is contained in:
parent
158adc2472
commit
76cb54988d
2 changed files with 31 additions and 10 deletions
|
@ -4,6 +4,7 @@ class Commentaire < ActiveRecord::Base
|
|||
belongs_to :piece_justificative
|
||||
|
||||
mount_uploader :file, CommentaireFileUploader
|
||||
validate :is_virus_free?
|
||||
|
||||
default_scope { order(created_at: :asc) }
|
||||
scope :updated_since?, -> (date) { where('commentaires.updated_at > ?', date) }
|
||||
|
@ -44,4 +45,10 @@ class Commentaire < ActiveRecord::Base
|
|||
def notify_user
|
||||
NotificationMailer.new_answer(dossier).deliver_now!
|
||||
end
|
||||
|
||||
def is_virus_free?
|
||||
if file.present? && file_changed? && !ClamavService.safe_file?(file.path)
|
||||
errors.add(:file, "Virus détecté dans le fichier joint, merci de changer de fichier")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -112,10 +112,9 @@ describe NewGestionnaire::DossiersController, type: :controller do
|
|||
describe "#create_commentaire" do
|
||||
let(:saved_commentaire) { dossier.commentaires.first }
|
||||
let(:file) { nil }
|
||||
let(:scan_result) { true }
|
||||
|
||||
before do
|
||||
allow(ClamavService).to receive(:safe_file?).and_return(true)
|
||||
|
||||
subject {
|
||||
post :create_commentaire, params: {
|
||||
procedure_id: procedure.id,
|
||||
dossier_id: dossier.id,
|
||||
|
@ -124,19 +123,34 @@ describe NewGestionnaire::DossiersController, type: :controller do
|
|||
file: file
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
before do
|
||||
allow(ClamavService).to receive(:safe_file?).and_return(scan_result)
|
||||
end
|
||||
|
||||
it { expect(saved_commentaire.body).to eq('body') }
|
||||
it { expect(saved_commentaire.email).to eq(gestionnaire.email) }
|
||||
it { expect(saved_commentaire.dossier).to eq(dossier) }
|
||||
it { expect(response).to redirect_to(messagerie_dossier_path(dossier.procedure, dossier)) }
|
||||
it { expect(gestionnaire.followed_dossiers).to include(dossier) }
|
||||
it { expect(saved_commentaire.file.present?).to eq(false) }
|
||||
it do
|
||||
subject
|
||||
|
||||
expect(saved_commentaire.body).to eq('body')
|
||||
expect(saved_commentaire.email).to eq(gestionnaire.email)
|
||||
expect(saved_commentaire.dossier).to eq(dossier)
|
||||
expect(response).to redirect_to(messagerie_dossier_path(dossier.procedure, dossier))
|
||||
expect(gestionnaire.followed_dossiers).to include(dossier)
|
||||
expect(saved_commentaire.file.present?).to eq(false)
|
||||
end
|
||||
|
||||
context "with a file" do
|
||||
let(:file) { Rack::Test::UploadedFile.new("./spec/support/files/piece_justificative_0.pdf", 'application/pdf') }
|
||||
|
||||
it { expect(saved_commentaire.file.present?).to eq(true) }
|
||||
it { subject; expect(saved_commentaire.file.present?).to eq(true) }
|
||||
it { expect { subject }.to change(Commentaire, :count).by(1) }
|
||||
|
||||
context "and a virus" do
|
||||
let(:scan_result) { false }
|
||||
|
||||
it { expect { subject }.not_to change(Commentaire, :count) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue