Merge pull request #9274 from demarches-simplifiees/bach-operation-all-instruction-actions
[Actions multiples] Ajouter la possibilité pour les instructeurs de classer sans suite et refuser
This commit is contained in:
commit
3e30834644
23 changed files with 406 additions and 88 deletions
|
@ -166,6 +166,78 @@ RSpec.describe Dossiers::BatchAlertComponent, type: :component do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'refuser' do
|
||||
let(:component) do
|
||||
described_class.new(
|
||||
batch: batch_operation,
|
||||
procedure: procedure
|
||||
)
|
||||
end
|
||||
let!(:dossier) { create(:dossier, :en_instruction, procedure: procedure) }
|
||||
let!(:dossier_2) { create(:dossier, :en_instruction, procedure: procedure) }
|
||||
let!(:batch_operation) { create(:batch_operation, operation: :refuser, dossiers: [dossier, dossier_2], instructeur: instructeur) }
|
||||
|
||||
context 'in_progress' do
|
||||
before {
|
||||
batch_operation.track_processed_dossier(true, dossier)
|
||||
batch_operation.reload
|
||||
}
|
||||
|
||||
it { is_expected.to have_selector('.fr-alert--info') }
|
||||
it { is_expected.to have_text("Une action de masse est en cours") }
|
||||
it { is_expected.to have_text("1/2 dossiers ont été refusés") }
|
||||
end
|
||||
|
||||
context 'finished and success' do
|
||||
before {
|
||||
batch_operation.track_processed_dossier(true, dossier)
|
||||
batch_operation.track_processed_dossier(true, dossier_2)
|
||||
batch_operation.reload
|
||||
}
|
||||
|
||||
it { is_expected.to have_selector('.fr-alert--success') }
|
||||
it { is_expected.to have_text("L’action de masse est terminée") }
|
||||
it { is_expected.to have_text("2 dossiers ont été refusés") }
|
||||
it { expect(batch_operation.seen_at).to eq(nil) }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'classer_sans_suite' do
|
||||
let(:component) do
|
||||
described_class.new(
|
||||
batch: batch_operation,
|
||||
procedure: procedure
|
||||
)
|
||||
end
|
||||
let!(:dossier) { create(:dossier, :en_instruction, procedure: procedure) }
|
||||
let!(:dossier_2) { create(:dossier, :en_instruction, procedure: procedure) }
|
||||
let!(:batch_operation) { create(:batch_operation, operation: :classer_sans_suite, dossiers: [dossier, dossier_2], instructeur: instructeur) }
|
||||
|
||||
context 'in_progress' do
|
||||
before {
|
||||
batch_operation.track_processed_dossier(true, dossier)
|
||||
batch_operation.reload
|
||||
}
|
||||
|
||||
it { is_expected.to have_selector('.fr-alert--info') }
|
||||
it { is_expected.to have_text("Une action de masse est en cours") }
|
||||
it { is_expected.to have_text("1/2 dossiers ont été classés sans suite") }
|
||||
end
|
||||
|
||||
context 'finished and success' do
|
||||
before {
|
||||
batch_operation.track_processed_dossier(true, dossier)
|
||||
batch_operation.track_processed_dossier(true, dossier_2)
|
||||
batch_operation.reload
|
||||
}
|
||||
|
||||
it { is_expected.to have_selector('.fr-alert--success') }
|
||||
it { is_expected.to have_text("L’action de masse est terminée") }
|
||||
it { is_expected.to have_text("2 dossiers ont été classés sans suite") }
|
||||
it { expect(batch_operation.seen_at).to eq(nil) }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'follow' do
|
||||
let(:component) do
|
||||
described_class.new(
|
||||
|
|
|
@ -21,7 +21,7 @@ RSpec.describe Dossiers::BatchOperationComponent, type: :component do
|
|||
context 'statut suivis' do
|
||||
let(:statut) { 'suivis' }
|
||||
it { is_expected.to have_button('Passer les dossiers en instruction', disabled: true) }
|
||||
it { is_expected.to have_button('Accepter les dossiers', disabled: true) }
|
||||
it { is_expected.to have_button('Instruire les dossiers', disabled: true) }
|
||||
it { is_expected.to have_button('Autres actions multiples', disabled: true) }
|
||||
it { is_expected.to have_button('Repasser les dossiers en construction', disabled: true) }
|
||||
it { is_expected.to have_button('Ne plus suivre les dossiers', disabled: true) }
|
||||
|
|
|
@ -40,6 +40,28 @@ FactoryBot.define do
|
|||
end
|
||||
end
|
||||
|
||||
trait :refuser do
|
||||
operation { BatchOperation.operations.fetch(:refuser) }
|
||||
after(:build) do |batch_operation, evaluator|
|
||||
procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur], administrateurs: [create(:administrateur)])
|
||||
batch_operation.dossiers = [
|
||||
create(:dossier, :with_individual, :en_instruction, procedure: procedure),
|
||||
create(:dossier, :with_individual, :en_instruction, procedure: procedure)
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
trait :classer_sans_suite do
|
||||
operation { BatchOperation.operations.fetch(:classer_sans_suite) }
|
||||
after(:build) do |batch_operation, evaluator|
|
||||
procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur], administrateurs: [create(:administrateur)])
|
||||
batch_operation.dossiers = [
|
||||
create(:dossier, :with_individual, :en_instruction, procedure: procedure),
|
||||
create(:dossier, :with_individual, :en_instruction, procedure: procedure)
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
trait :follow do
|
||||
operation { BatchOperation.operations.fetch(:follow) }
|
||||
after(:build) do |batch_operation, evaluator|
|
||||
|
|
|
@ -154,6 +154,48 @@ describe BatchOperationProcessOneJob, type: :job do
|
|||
end
|
||||
end
|
||||
|
||||
context 'when operation is "refuser"' do
|
||||
let(:batch_operation) do
|
||||
create(:batch_operation, :refuser,
|
||||
options.merge(instructeur: create(:instructeur), motivation: 'motivation'))
|
||||
end
|
||||
|
||||
it 'refuses the dossier in the batch' do
|
||||
expect { subject.perform_now }
|
||||
.to change { dossier_job.reload.refuse? }
|
||||
.from(false)
|
||||
.to(true)
|
||||
end
|
||||
|
||||
it 'refuses the dossier in the batch with a motivation' do
|
||||
expect { subject.perform_now }
|
||||
.to change { dossier_job.reload.motivation }
|
||||
.from(nil)
|
||||
.to('motivation')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when operation is "classer_sans_suite"' do
|
||||
let(:batch_operation) do
|
||||
create(:batch_operation, :classer_sans_suite,
|
||||
options.merge(instructeur: create(:instructeur), motivation: 'motivation'))
|
||||
end
|
||||
|
||||
it 'closes without continuation the dossier in the batch' do
|
||||
expect { subject.perform_now }
|
||||
.to change { dossier_job.reload.sans_suite? }
|
||||
.from(false)
|
||||
.to(true)
|
||||
end
|
||||
|
||||
it 'closes without continuation the dossier in the batch with a motivation' do
|
||||
expect { subject.perform_now }
|
||||
.to change { dossier_job.reload.motivation }
|
||||
.from(nil)
|
||||
.to('motivation')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the dossier is out of sync (ie: someone applied a transition somewhere we do not know)' do
|
||||
let(:instructeur) { create(:instructeur) }
|
||||
let(:procedure) { create(:simple_procedure, instructeurs: [instructeur]) }
|
||||
|
|
|
@ -31,18 +31,21 @@ describe 'BatchOperation a dossier:', js: true do
|
|||
expect(page).to have_button("Archiver les dossiers")
|
||||
|
||||
# ensure batch is created
|
||||
expect { click_on "Archiver les dossiers" }
|
||||
.to change { BatchOperation.count }
|
||||
.from(0).to(1)
|
||||
|
||||
page.accept_alert do
|
||||
click_on "Archiver les dossiers"
|
||||
end
|
||||
|
||||
# ensure batched dossier is disabled
|
||||
expect(page).to have_selector("##{checkbox_id}[disabled]")
|
||||
# ensure Batch is created
|
||||
expect(BatchOperation.count).to eq(1)
|
||||
# check a11y with disabled checkbox
|
||||
expect(page).to be_axe_clean
|
||||
|
||||
# ensure alert is present
|
||||
expect(page).to have_content("Information : Une action de masse est en cours")
|
||||
expect(page).to have_content("1 dossier sera archivé")
|
||||
expect(page).to have_content("1 dossier est en cours d'archivage")
|
||||
|
||||
# ensure jobs are queued
|
||||
perform_enqueued_jobs(only: [BatchOperationEnqueueAllJob])
|
||||
|
@ -71,10 +74,14 @@ describe 'BatchOperation a dossier:', js: true do
|
|||
end
|
||||
|
||||
# submit checkall
|
||||
expect { click_on "Archiver les dossiers" }
|
||||
.to change { BatchOperation.count }
|
||||
.from(1).to(2)
|
||||
page.accept_alert do
|
||||
click_on "Archiver les dossiers"
|
||||
end
|
||||
|
||||
# reload
|
||||
visit instructeur_procedure_path(procedure, statut: 'traites')
|
||||
|
||||
expect(BatchOperation.count).to eq(2)
|
||||
expect(BatchOperation.last.dossiers).to match_array([dossier_2, dossier_3])
|
||||
end
|
||||
|
||||
|
@ -109,10 +116,14 @@ describe 'BatchOperation a dossier:', js: true do
|
|||
find("##{dom_id(BatchOperation.new, :checkbox_all)}").check
|
||||
click_on("Sélectionner tous les 3 dossiers")
|
||||
|
||||
expect { click_on "Suivre les dossiers" }
|
||||
.to change { BatchOperation.count }
|
||||
.from(0).to(1)
|
||||
accept_alert do
|
||||
click_on "Suivre les dossiers"
|
||||
end
|
||||
|
||||
# reload
|
||||
visit instructeur_procedure_path(procedure, statut: 'a-suivre')
|
||||
|
||||
expect(BatchOperation.count).to eq(1)
|
||||
expect(BatchOperation.last.dossiers).to match_array([dossier_1, dossier_2, dossier_3])
|
||||
end
|
||||
|
||||
|
@ -138,10 +149,14 @@ describe 'BatchOperation a dossier:', js: true do
|
|||
expect(find_field("batch_operation[dossier_ids][]", type: :hidden).value).to eq "#{dossier_4.id},#{dossier_3.id},#{dossier_2.id}"
|
||||
|
||||
# create batch
|
||||
expect { click_on "Suivre les dossiers" }
|
||||
.to change { BatchOperation.count }
|
||||
.from(0).to(1)
|
||||
accept_alert do
|
||||
click_on "Suivre les dossiers"
|
||||
end
|
||||
|
||||
# reload
|
||||
visit instructeur_procedure_path(procedure, statut: 'a-suivre')
|
||||
|
||||
expect(BatchOperation.count).to eq(1)
|
||||
expect(BatchOperation.last.dossiers).to match_array([dossier_2, dossier_3, dossier_4])
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue