From 6de1e2ec586774895563297e9d0fa54a5749e118 Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Thu, 11 Jul 2019 11:37:59 +0200 Subject: [PATCH] Fix bug when an instructeur closes a dossier already closed --- .../gestionnaires/dossiers_controller.rb | 25 +++++++++++-------- .../gestionnaires/dossiers_controller_spec.rb | 15 +++++++++++ 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/app/controllers/gestionnaires/dossiers_controller.rb b/app/controllers/gestionnaires/dossiers_controller.rb index 764f24b6c..f8d02a855 100644 --- a/app/controllers/gestionnaires/dossiers_controller.rb +++ b/app/controllers/gestionnaires/dossiers_controller.rb @@ -3,6 +3,7 @@ module Gestionnaires include ActionView::Helpers::NumberHelper include ActionView::Helpers::TextHelper include CreateAvisConcern + include DossierHelper after_action :mark_demande_as_read, only: :show after_action :mark_messagerie_as_read, only: [:messagerie, :create_commentaire] @@ -108,16 +109,20 @@ module Gestionnaires motivation = params[:dossier] && params[:dossier][:motivation] justificatif = params[:dossier] && params[:dossier][:justificatif_motivation] - case params[:process_action] - when "refuser" - dossier.refuser!(current_gestionnaire, motivation, justificatif) - flash.notice = "Dossier considéré comme refusé." - when "classer_sans_suite" - dossier.classer_sans_suite!(current_gestionnaire, motivation, justificatif) - flash.notice = "Dossier considéré comme sans suite." - when "accepter" - dossier.accepter!(current_gestionnaire, motivation, justificatif) - flash.notice = "Dossier traité avec succès." + if dossier.termine? + flash.notice = "Le dossier est déjà #{dossier_display_state(dossier, lower: true)}" + else + case params[:process_action] + when "refuser" + dossier.refuser!(current_gestionnaire, motivation, justificatif) + flash.notice = "Dossier considéré comme refusé." + when "classer_sans_suite" + dossier.classer_sans_suite!(current_gestionnaire, motivation, justificatif) + flash.notice = "Dossier considéré comme sans suite." + when "accepter" + dossier.accepter!(current_gestionnaire, motivation, justificatif) + flash.notice = "Dossier traité avec succès." + end end render partial: 'state_button_refresh', locals: { dossier: dossier } diff --git a/spec/controllers/gestionnaires/dossiers_controller_spec.rb b/spec/controllers/gestionnaires/dossiers_controller_spec.rb index 532913960..26365a6c7 100644 --- a/spec/controllers/gestionnaires/dossiers_controller_spec.rb +++ b/spec/controllers/gestionnaires/dossiers_controller_spec.rb @@ -319,6 +319,21 @@ describe Gestionnaires::DossiersController, type: :controller do it { expect(subject.body).to include('.state-button') } end end + + context 'when a dossier is already closed' do + let(:dossier) { create(:dossier, :accepte, procedure: procedure) } + + before { allow(dossier).to receive(:accepter!) } + + subject { post :terminer, params: { process_action: "accepter", procedure_id: procedure.id, dossier_id: dossier.id, dossier: { justificatif_motivation: fake_justificatif } }, format: 'js' } + + it 'does not close it again' do + subject + + expect(dossier).not_to have_received(:accepter!) + expect(response).to have_http_status(:ok) + end + end end describe "#create_commentaire" do