diff --git a/app/controllers/gestionnaires/dossiers_controller.rb b/app/controllers/gestionnaires/dossiers_controller.rb index f8d02a855..6584b3af3 100644 --- a/app/controllers/gestionnaires/dossiers_controller.rb +++ b/app/controllers/gestionnaires/dossiers_controller.rb @@ -92,8 +92,12 @@ module Gestionnaires end def repasser_en_construction - dossier.repasser_en_construction!(current_gestionnaire) - flash.notice = 'Dossier repassé en construction.' + if dossier.en_construction? + flash.notice = 'Le dossier est déjà en construction.' + else + dossier.repasser_en_construction!(current_gestionnaire) + flash.notice = 'Dossier repassé en construction.' + end render partial: 'state_button_refresh', locals: { dossier: dossier } end diff --git a/spec/controllers/gestionnaires/dossiers_controller_spec.rb b/spec/controllers/gestionnaires/dossiers_controller_spec.rb index 26365a6c7..eeee2ee5d 100644 --- a/spec/controllers/gestionnaires/dossiers_controller_spec.rb +++ b/spec/controllers/gestionnaires/dossiers_controller_spec.rb @@ -128,21 +128,27 @@ describe Gestionnaires::DossiersController, type: :controller do end describe '#repasser_en_construction' do + let(:dossier) { create(:dossier, :en_instruction, procedure: procedure) } + before do - dossier.en_instruction! sign_in gestionnaire + post :repasser_en_construction, + params: { procedure_id: procedure.id, dossier_id: dossier.id }, + format: 'js' end - subject { post :repasser_en_construction, params: { procedure_id: procedure.id, dossier_id: dossier.id }, format: 'js' } + it { expect(dossier.reload.state).to eq(Dossier.states.fetch(:en_construction)) } + it { expect(response).to have_http_status(:ok) } + it { expect(response.body).to include('.state-button') } - it 'change state to en_construction' do - subject + context 'when the dossier has already been put en_construction' do + let(:dossier) { create(:dossier, :en_construction, procedure: procedure) } - dossier.reload - expect(dossier.state).to eq(Dossier.states.fetch(:en_construction)) + it 'warns about the error, but doesn’t raise' do + expect(dossier.reload.state).to eq(Dossier.states.fetch(:en_construction)) + expect(response).to have_http_status(:ok) + end end - - it { expect(subject.body).to include('.state-button') } end describe '#terminer' do