spec(batch_operation): system spec batch operation poc

This commit is contained in:
Martin 2022-12-02 15:30:35 +01:00 committed by mfo
parent 7b3cbcb8f6
commit 5875f9b572
4 changed files with 80 additions and 3 deletions

View file

@ -83,7 +83,7 @@
%tr
- if batch_operation_component.render?
%th
%input{ type: "checkbox", data: { "batch-operation-target" => "all","action" => "batch-operation#onCheckAll"} }
%input{ type: "checkbox", data: { "batch-operation-target" => "all","action" => "batch-operation#onCheckAll"}, id: dom_id(BatchOperation.new, :checkbox_all), aria: { title: t('views.instructeurs.dossiers.select_all') } }
- else
- if @statut.in? %w(suivis traites tous)
= render partial: "header_field", locals: { field: { "label" => "●", "table" => "notifications", "column" => "notifications" }, classname: "notification-col" }
@ -120,9 +120,9 @@
%td.folder-col
- if batch_operation_component.render?
- if p.batch_operation_id.present?
= check_box_tag :"batch_operation[dossier_ids][]", p.dossier_id, true, disabled: true
= check_box_tag :"batch_operation[dossier_ids][]", p.dossier_id, true, disabled: true, id: dom_id(BatchOperation.new, "checkbox_#{p.dossier_id}")
- else
= check_box_tag :"batch_operation[dossier_ids][]", p.dossier_id, false, data: { "batch-operation-target" => "input", "action" => "batch-operation#onCheckOne"}, form: dom_id(BatchOperation.new)
= check_box_tag :"batch_operation[dossier_ids][]", p.dossier_id, false, data: { "batch-operation-target" => "input", "action" => "batch-operation#onCheckOne"}, form: dom_id(BatchOperation.new), id: dom_id(BatchOperation.new, "checkbox_#{p.dossier_id}")
- else
- if p.hidden_by_administration_at.present?
%span.cell-link

View file

@ -176,6 +176,7 @@ en:
restore: "Restore"
filters:
title: Filter
select_all: Select all
personalize: Personalize
follow_file: Follow-up the file
save: Save

View file

@ -171,6 +171,7 @@ fr:
restore: "Restaurer"
filters:
title: Filtrer
select_all: Tout selectionner
personalize: Personnaliser
download: Télécharger un dossier
follow_file: Suivre le dossier

View file

@ -0,0 +1,75 @@
describe 'BatchOperation a dossier:', js: true do
include ActionView::RecordIdentifier
include ActiveJob::TestHelper
let(:password) { 'demarches-simplifiees' }
let(:instructeur) { create(:instructeur, password: password) }
let(:procedure) { create(:simple_procedure, :published, instructeurs: [instructeur], administrateurs: [create(:administrateur)]) }
context 'with an instructeur' do
scenario 'create a BatchOperation' do
dossier_1 = create(:dossier, :accepte, procedure: procedure)
dossier_2 = create(:dossier, :accepte, procedure: procedure)
dossier_3 = create(:dossier, :accepte, procedure: procedure)
log_in(instructeur.email, password)
visit instructeur_procedure_path(procedure, statut: 'traites')
# ensure button is disabled by default
expect(page).to have_selector('input[disabled][value="Archiver la sélection"]')
checkbox_id = dom_id(BatchOperation.new, "checkbox_#{dossier_1.id}")
# batch one dossier
check(checkbox_id)
expect(page).to have_selector('input[value="Archiver la sélection"]')
# ensure batch is created
expect { click_on "Archiver la sélection" }
.to change { BatchOperation.count }
.from(0).to(1)
# ensure batched dossier is disabled
expect(page).to have_selector("##{checkbox_id}[disabled]")
# ensure alert is present
expect(page).to have_content("Information : Une action de masse est en cours")
expect(page).to have_content("0/ 1 dossier archivé")
# ensure jobs are queued
perform_enqueued_jobs(only: [BatchOperationEnqueueAllJob])
expect { perform_enqueued_jobs(only: [BatchOperationProcessOneJob]) }
.to change { dossier_1.reload.archived }
.from(false).to(true)
# ensure alert updates when jobs are run
click_on "Recharger la page"
expect(page).to have_content("L'action de masse est terminée")
expect(page).to have_content("1 dossier a été archivé")
# clean alert after reload
visit instructeur_procedure_path(procedure, statut: 'traites')
expect(page).not_to have_content("L'action de masse est terminée")
# try checkall
find("##{dom_id(BatchOperation.new, :checkbox_all)}").check
[dossier_2, dossier_3].map do |dossier|
dossier_checkbox_id = dom_id(BatchOperation.new, "checkbox_#{dossier.id}")
expect(page).to have_selector("##{dossier_checkbox_id}:checked")
end
# submnit checkall
expect { click_on "Archiver la sélection" }
.to change { BatchOperation.count }
.from(1).to(2)
expect(BatchOperation.last.dossiers).to match_array([dossier_2, dossier_3])
end
end
def log_in(email, password, check_email: true)
visit new_user_session_path
expect(page).to have_current_path(new_user_session_path)
sign_in_with(email, password, check_email)
expect(page).to have_current_path(instructeur_procedures_path)
end
end