diff --git a/app/controllers/admin/procedures_controller.rb b/app/controllers/admin/procedures_controller.rb index 8372a2535..ff3024464 100644 --- a/app/controllers/admin/procedures_controller.rb +++ b/app/controllers/admin/procedures_controller.rb @@ -107,19 +107,20 @@ class Admin::ProceduresController < AdminController def publish path = params[:path] + lien_site_web = params[:lien_site_web] procedure = current_administrateur.procedures.find(params[:procedure_id]) procedure.path = path - procedure.lien_site_web = params[:lien_site_web] + procedure.lien_site_web = lien_site_web if !procedure.validate - flash.alert = 'Lien de la démarche invalide' + flash.alert = 'Lien de la démarche invalide ou lien vers la démarche manquant' return redirect_to admin_procedures_path else procedure.path = nil end - if procedure.publish_or_reopen!(current_administrateur, path) + if procedure.publish_or_reopen!(current_administrateur, path, lien_site_web) flash.notice = "Démarche publiée" redirect_to admin_procedures_path else diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 4f36161dd..9ec30cef6 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -107,12 +107,12 @@ class Procedure < ApplicationRecord end end - def publish_or_reopen!(administrateur, path) - if archivee? && may_reopen?(administrateur, path) - reopen!(administrateur, path) - elsif may_publish?(administrateur, path) + def publish_or_reopen!(administrateur, path, lien_site_web) + if archivee? && may_reopen?(administrateur, path, lien_site_web) + reopen!(administrateur, path, lien_site_web) + elsif may_publish?(administrateur, path, lien_site_web) reset! - publish!(administrateur, path) + publish!(administrateur, path, lien_site_web) end end @@ -488,21 +488,17 @@ class Procedure < ApplicationRecord update!(path: path) end - def can_publish?(administrateur, path) - path_availability(administrateur, path).in?(PATH_CAN_PUBLISH) + def can_publish?(administrateur, path, lien_site_web) + path_availability(administrateur, path).in?(PATH_CAN_PUBLISH) && lien_site_web.present? end - def can_reopen?(administrateur, path) - path_availability(administrateur, path).in?(PATH_CAN_PUBLISH) - end - - def after_publish(administrateur, path) + def after_publish(administrateur, path, lien_site_web) update!(published_at: Time.zone.now) claim_path_ownership!(path) end - def after_reopen(administrateur, path) + def after_reopen(administrateur, path, lien_site_web) update!(published_at: Time.zone.now, archived_at: nil) claim_path_ownership!(path) diff --git a/app/views/admin/procedures/_informations.html.haml b/app/views/admin/procedures/_informations.html.haml index 437e83dd4..c2d1477a2 100644 --- a/app/views/admin/procedures/_informations.html.haml +++ b/app/views/admin/procedures/_informations.html.haml @@ -19,7 +19,7 @@ = f.label :duree_conservation_dossiers_hors_ds, "Hors demarches-simplifiees.fr* (durée en mois après la fin de l'instruction)" = f.number_field :duree_conservation_dossiers_hors_ds, class: 'form-control', placeholder: '6', required: true -- if @procedure.locked? +- if @procedure.new? .form-group %h4 Où les usagers trouveront-ils le lien vers la démarche ? = f.text_field :lien_site_web, class: 'form-control', placeholder: 'https://exemple.gouv.fr/ma_demarche' diff --git a/app/views/admin/procedures/_modal_publish.html.haml b/app/views/admin/procedures/_modal_publish.html.haml index 0df3e7bf9..102e0c234 100644 --- a/app/views/admin/procedures/_modal_publish.html.haml +++ b/app/views/admin/procedures/_modal_publish.html.haml @@ -39,9 +39,12 @@ target: "_blank" .form-group - %h4 Où les usagers trouveront-ils le lien vers cette démarche ? + %h4 Où les usagers trouveront-ils le lien vers cette démarche ? * %p.center - = text_field_tag(:lien_site_web, @procedure.lien_site_web, class: 'form-control', placeholder: 'https://exemple.gouv.fr/ma_demarche') + = text_field_tag(:lien_site_web, @procedure.lien_site_web, + required: true, + class: 'form-control', + placeholder: 'https://exemple.gouv.fr/ma_demarche') #path-messages #path_is_mine.text-warning.center.message diff --git a/spec/controllers/admin/procedures_controller_spec.rb b/spec/controllers/admin/procedures_controller_spec.rb index 4ec06a296..6f22b7ad3 100644 --- a/spec/controllers/admin/procedures_controller_spec.rb +++ b/spec/controllers/admin/procedures_controller_spec.rb @@ -15,6 +15,7 @@ describe Admin::ProceduresController, type: :controller do let(:duree_conservation_dossiers_dans_ds) { 3 } let(:duree_conservation_dossiers_hors_ds) { 6 } let(:monavis_embed) { nil } + let(:lien_site_web) { 'http://mon-site.gouv.fr' } let(:procedure_params) { { @@ -26,7 +27,8 @@ describe Admin::ProceduresController, type: :controller do cadre_juridique: cadre_juridique, duree_conservation_dossiers_dans_ds: duree_conservation_dossiers_dans_ds, duree_conservation_dossiers_hors_ds: duree_conservation_dossiers_hors_ds, - monavis_embed: monavis_embed + monavis_embed: monavis_embed, + lien_site_web: lien_site_web } } @@ -331,9 +333,10 @@ describe Admin::ProceduresController, type: :controller do end describe 'PUT #publish' do - let(:procedure) { create(:procedure, administrateur: admin) } - let(:procedure2) { create(:procedure, :published, administrateur: admin) } - let(:procedure3) { create(:procedure, :published) } + let(:lien_site_web) { 'http://mon-site.gouv.fr' } + let(:procedure) { create(:procedure, administrateur: admin, lien_site_web: nil) } + let(:procedure2) { create(:procedure, :published, administrateur: admin, lien_site_web: lien_site_web) } + let(:procedure3) { create(:procedure, :published, lien_site_web: lien_site_web) } let(:lien_site_web) { 'http://some.administration/' } context 'when admin is the owner of the procedure' do @@ -400,6 +403,17 @@ describe Admin::ProceduresController, type: :controller do expect(flash[:alert]).to have_content 'Lien de la démarche invalide' end end + + context 'procedure path is valid but lien_site_web is missing' do + let(:path) { 'new_path' } + let(:lien_site_web) { nil } + + it 'does not publish the given procedure' do + expect(procedure.publiee?).to be_falsey + expect(flash[:alert]).to have_content 'Lien de la démarche invalide' + expect(response).to redirect_to :admin_procedures + end + end end context 'when admin is not the owner of the procedure' do @@ -421,7 +435,7 @@ describe Admin::ProceduresController, type: :controller do end describe 'PUT #archive' do - let(:procedure) { create(:procedure, :published, administrateur: admin) } + let(:procedure) { create(:procedure, :published, administrateur: admin, lien_site_web: lien_site_web) } context 'when admin is the owner of the procedure' do before do @@ -437,7 +451,7 @@ describe Admin::ProceduresController, type: :controller do context 'when owner want to re-enable procedure' do before do - put :publish, params: { procedure_id: procedure.id, path: 'fake_path' } + put :publish, params: { procedure_id: procedure.id, path: 'fake_path', lien_site_web: lien_site_web } procedure.reload end diff --git a/spec/factories/procedure.rb b/spec/factories/procedure.rb index 2e5bd901d..cc9be67ec 100644 --- a/spec/factories/procedure.rb +++ b/spec/factories/procedure.rb @@ -10,6 +10,7 @@ FactoryBot.define do duree_conservation_dossiers_dans_ds { 3 } duree_conservation_dossiers_hors_ds { 6 } ask_birthday { false } + lien_site_web { "https://mon-site.gouv" } transient do administrateur {} @@ -147,13 +148,13 @@ FactoryBot.define do trait :published do after(:build) do |procedure, _evaluator| - procedure.publish!(procedure.administrateurs.first, generate(:published_path)) + procedure.publish!(procedure.administrateurs.first, generate(:published_path), procedure.lien_site_web) end end trait :archived do after(:build) do |procedure, _evaluator| - procedure.publish!(procedure.administrateurs.first, generate(:published_path)) + procedure.publish!(procedure.administrateurs.first, generate(:published_path), procedure.lien_site_web) procedure.archive! end end @@ -162,14 +163,14 @@ FactoryBot.define do # For now the behavior is the same than :archived # (it may be different in the future though) after(:build) do |procedure, _evaluator| - procedure.publish!(procedure.administrateurs.first, generate(:published_path)) + procedure.publish!(procedure.administrateurs.first, generate(:published_path), procedure.lien_site_web) procedure.archive! end end trait :hidden do after(:build) do |procedure, _evaluator| - procedure.publish!(procedure.administrateurs.first, generate(:published_path)) + procedure.publish!(procedure.administrateurs.first, generate(:published_path), procedure.lien_site_web) procedure.hide! end end diff --git a/spec/models/procedure_spec.rb b/spec/models/procedure_spec.rb index 81f94e500..d677a93bb 100644 --- a/spec/models/procedure_spec.rb +++ b/spec/models/procedure_spec.rb @@ -554,7 +554,7 @@ describe Procedure do before do Timecop.freeze(now) - procedure.publish!(procedure.administrateurs.first, "example-path") + procedure.publish!(procedure.administrateurs.first, "example-path", procedure.lien_site_web) end after { Timecop.return }