refactor(pj): don't poll on antivirus when submitting a pj

Closes #9733
This commit is contained in:
Colin Darie 2023-12-06 15:10:44 +01:00
parent 189b9e5037
commit 0f1980b1c3
9 changed files with 22 additions and 55 deletions

View file

@ -14,7 +14,7 @@
.fr-py-1v
%span.attachment-filename.fr-mr-1w= link_to_if(viewable?, attachment.filename.to_s, helpers.url_for(attachment.blob), title: t(".open_file", filename: attachment.filename), **helpers.external_link_attributes)
= render Attachment::ProgressComponent.new(attachment: attachment)
= render Attachment::ProgressComponent.new(attachment: attachment, ignore_antivirus: true)
- if error?
%p.fr-error-text= error_message

View file

@ -36,6 +36,6 @@ class Attachment::PendingPollComponent < ApplicationComponent
private
def pending_attachment?(attachment)
attachment.virus_scanner.pending? || attachment.watermark_pending?
attachment.watermark_pending?
end
end

View file

@ -2,6 +2,6 @@
en:
reload: Reload
explanation:
one: Scanning for viruses and processing your attachment takes longer than expected.
other: Scanning for viruses and processing your attachments takes longer than expected.
one: Processing your attachment takes longer than expected.
other: Processing your attachments takes longer than expected.
dossier_submittable: This does not prevent you from submitting your file if you wish.

View file

@ -2,7 +2,7 @@
fr:
reload: Recharger
explanation:
one: Lanalyse antivirus et le traitement de votre pièce jointe prend plus de temps que prévu.
other: Lanalyse antivirus et le traitement de vos pièces jointes prend plus de temps que prévu.
one: Le traitement de votre pièce jointe prend plus de temps que prévu.
other: Le traitement de vos pièces jointes prend plus de temps que prévu.
dossier_submittable: Cela ne vous empêche pas de déposer votre dossier si vous le souhaitez.

View file

@ -1,13 +1,15 @@
class Attachment::ProgressComponent < ApplicationComponent
attr_reader :attachment
attr_reader :ignore_antivirus
def initialize(attachment:)
def initialize(attachment:, ignore_antivirus: false)
@attachment = attachment
@ignore_antivirus = ignore_antivirus
end
def progress_label
case
when attachment.virus_scanner.pending?
when !ignore_antivirus && attachment.virus_scanner.pending?
t(".antivirus_pending")
when attachment.watermark_pending?
t(".watermark_pending")

View file

@ -332,8 +332,8 @@
%h1.fr-mt-4w Attachment::EditComponent
%span.fr-hint-text Note: direct upload, suppression ne marchent pas comme attendu ici.
- champ = @dossier.champs_public.first
- tdc = @dossier.champs_public.find { _1.type_champ == TypeDeChamp.type_champs.fetch(:piece_justificative) }.type_de_champ
- champ = @dossier.champs_public.find { _1.type_champ == TypeDeChamp.type_champs.fetch(:piece_justificative) }
- tdc = champ.type_de_champ
- avis = Avis.new
- if attachment = ActiveStorage::Attachment.last
@ -347,16 +347,6 @@
%h3.fr-mt-4w Existing attachment, user can not destroy
= render Attachment::EditComponent.new(champ:, attached_file: champ.piece_justificative_file, attachment:, user_can_destroy: false)
%h3.fr-mt-4w Existing attachment, antivirus in progress
- attachment.blob.metadata[:virus_scan_result] = ActiveStorage::VirusScanner::PENDING
- attachment.created_at = Time.zone.now
= render Attachment::EditComponent.new(champ:, attached_file: Champ.new.piece_justificative_file, attachment:)
%h3.fr-mt-4w Existing attachment, antivirus in progress since long time
- attachment.blob.metadata[:virus_scan_result] = ActiveStorage::VirusScanner::PENDING
- attachment.created_at = 2.minutes.ago
= render Attachment::EditComponent.new(champ:, attached_file: Champ.new.piece_justificative_file, attachment:)
%h3.fr-mt-4w Existing attachment, error
- attachment.blob.metadata[:virus_scan_result] = ActiveStorage::VirusScanner::INFECTED
= render Attachment::EditComponent.new(champ:, attached_file: Champ.new.piece_justificative_file, attachment:)

View file

@ -130,28 +130,6 @@ RSpec.describe Attachment::EditComponent, type: :component do
champ.piece_justificative_file[0].blob.update(virus_scan_result:)
end
context 'when the anti-virus scan is pending' do
let(:virus_scan_result) { ActiveStorage::VirusScanner::PENDING }
it 'displays the filename, but doesnt allow to download the file' do
expect(subject).to have_text(filename)
expect(subject).to have_no_link(text: filename)
expect(subject).to have_text('Analyse antivirus en cours')
end
it 'setup polling' do
expect(subject).to have_selector('[data-controller=turbo-poll]')
end
context "when used as multiple context" do
let(:kwargs) { { as_multiple: true } }
it 'does not setup polling' do
expect(subject).to have_no_selector('[data-controller=turbo-poll]')
end
end
end
context 'when the file is scanned, watermarked_at, and viewed as download and safe' do
let(:kwargs) { { view_as: :download } }
let(:virus_scan_result) { ActiveStorage::VirusScanner::SAFE }

View file

@ -45,15 +45,16 @@ RSpec.describe Attachment::PendingPollComponent, type: :component do
it "does not render" do
expect(component).not_to be_render
end
end
context "when antivirus is in progress" do
before do
attachment.blob.virus_scan_result = ActiveStorage::VirusScanner::PENDING
end
context "when antivirus is in progress on pj" do
let(:champ) { create(:champ_piece_justificative) }
before do
attachment.blob.virus_scan_result = ActiveStorage::VirusScanner::PENDING
end
it "renders" do
expect(component).to be_render
end
it "does not render" do
expect(component).not_to be_render
end
end

View file

@ -100,7 +100,6 @@ describe 'The user' do
expect(page).to have_selected_value('pays', selected: 'Australie')
expect(page).to have_field('dossier_link', with: '123')
expect(page).to have_text('file.pdf')
expect(page).to have_text('Analyse antivirus en cours')
end
scenario 'fill nothing and every error anchor links points to an existing element', js: true do
@ -290,9 +289,9 @@ describe 'The user' do
find_field('Pièce justificative 2').attach_file(Rails.root + 'spec/fixtures/files/RIB.pdf')
# Expect the files to be uploaded immediately
expect(page).to have_text('Analyse antivirus en cours', count: 2, wait: 5)
expect(page).to have_text('file.pdf')
expect(page).to have_text('RIB.pdf')
expect(page).to have_button("Supprimer", title: "Supprimer le fichier RIB.pdf")
# Expect the submit buttons to be enabled
expect(page).to have_button('Déposer le dossier', disabled: false)
@ -312,7 +311,6 @@ describe 'The user' do
# Test invalid file type
attach_file('Pièce justificative 1', Rails.root + 'spec/fixtures/files/invalid_file_format.json')
expect(page).to have_no_text('La pièce justificative nest pas dun type accepté')
expect(page).to have_text('Analyse antivirus en cours', count: 1, wait: 5)
end
scenario 'retry on transcient upload error', js: true do
@ -333,9 +331,9 @@ describe 'The user' do
# Test that retrying after a failure works
click_on('Réessayer', visible: true, wait: 5)
expect(page).to have_text('Analyse antivirus en cours', wait: 5)
expect(page).to have_text('file.pdf')
expect(page).to have_button('Déposer le dossier', disabled: false)
expect(page).to have_button("Supprimer", title: "Supprimer le fichier file.pdf")
# Reload the current page
visit current_path
@ -350,7 +348,6 @@ describe 'The user' do
attach_file('Pièce justificative 1', Rails.root + 'spec/fixtures/files/file.pdf')
expect(page).to have_text('file.pdf')
expect(page).to have_text('Analyse antivirus en cours')
attach_file('Pièce justificative 1', Rails.root + 'spec/fixtures/files/white.png')
expect(page).to have_text('white.png')
@ -382,7 +379,6 @@ describe 'The user' do
_1.blob.virus_scan_result = ActiveStorage::VirusScanner::SAFE
_1.save!
}
expect(page).not_to have_text('Analyse antivirus en cours', wait: 10)
visit current_path