rendu lien_site_web obligatoire au moment de la publication

This commit is contained in:
clemkeirua 2019-07-11 16:07:00 +02:00
parent 6b19432d47
commit 6f47655301
7 changed files with 45 additions and 30 deletions

View file

@ -107,19 +107,20 @@ class Admin::ProceduresController < AdminController
def publish def publish
path = params[:path] path = params[:path]
lien_site_web = params[:lien_site_web]
procedure = current_administrateur.procedures.find(params[:procedure_id]) procedure = current_administrateur.procedures.find(params[:procedure_id])
procedure.path = path procedure.path = path
procedure.lien_site_web = params[:lien_site_web] procedure.lien_site_web = lien_site_web
if !procedure.validate 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 return redirect_to admin_procedures_path
else else
procedure.path = nil procedure.path = nil
end 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" flash.notice = "Démarche publiée"
redirect_to admin_procedures_path redirect_to admin_procedures_path
else else

View file

@ -107,12 +107,12 @@ class Procedure < ApplicationRecord
end end
end end
def publish_or_reopen!(administrateur, path) def publish_or_reopen!(administrateur, path, lien_site_web)
if archivee? && may_reopen?(administrateur, path) if archivee? && may_reopen?(administrateur, path, lien_site_web)
reopen!(administrateur, path) reopen!(administrateur, path, lien_site_web)
elsif may_publish?(administrateur, path) elsif may_publish?(administrateur, path, lien_site_web)
reset! reset!
publish!(administrateur, path) publish!(administrateur, path, lien_site_web)
end end
end end
@ -488,21 +488,17 @@ class Procedure < ApplicationRecord
update!(path: path) update!(path: path)
end end
def can_publish?(administrateur, path) def can_publish?(administrateur, path, lien_site_web)
path_availability(administrateur, path).in?(PATH_CAN_PUBLISH) path_availability(administrateur, path).in?(PATH_CAN_PUBLISH) && lien_site_web.present?
end end
def can_reopen?(administrateur, path) def after_publish(administrateur, path, lien_site_web)
path_availability(administrateur, path).in?(PATH_CAN_PUBLISH)
end
def after_publish(administrateur, path)
update!(published_at: Time.zone.now) update!(published_at: Time.zone.now)
claim_path_ownership!(path) claim_path_ownership!(path)
end end
def after_reopen(administrateur, path) def after_reopen(administrateur, path, lien_site_web)
update!(published_at: Time.zone.now, archived_at: nil) update!(published_at: Time.zone.now, archived_at: nil)
claim_path_ownership!(path) claim_path_ownership!(path)

View file

@ -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.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 = f.number_field :duree_conservation_dossiers_hors_ds, class: 'form-control', placeholder: '6', required: true
- if @procedure.locked? - if @procedure.new?
.form-group .form-group
%h4 Où les usagers trouveront-ils le lien vers la démarche ? %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' = f.text_field :lien_site_web, class: 'form-control', placeholder: 'https://exemple.gouv.fr/ma_demarche'

View file

@ -39,9 +39,12 @@
target: "_blank" target: "_blank"
.form-group .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 %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-messages
#path_is_mine.text-warning.center.message #path_is_mine.text-warning.center.message

View file

@ -15,6 +15,7 @@ describe Admin::ProceduresController, type: :controller do
let(:duree_conservation_dossiers_dans_ds) { 3 } let(:duree_conservation_dossiers_dans_ds) { 3 }
let(:duree_conservation_dossiers_hors_ds) { 6 } let(:duree_conservation_dossiers_hors_ds) { 6 }
let(:monavis_embed) { nil } let(:monavis_embed) { nil }
let(:lien_site_web) { 'http://mon-site.gouv.fr' }
let(:procedure_params) { let(:procedure_params) {
{ {
@ -26,7 +27,8 @@ describe Admin::ProceduresController, type: :controller do
cadre_juridique: cadre_juridique, cadre_juridique: cadre_juridique,
duree_conservation_dossiers_dans_ds: duree_conservation_dossiers_dans_ds, duree_conservation_dossiers_dans_ds: duree_conservation_dossiers_dans_ds,
duree_conservation_dossiers_hors_ds: duree_conservation_dossiers_hors_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 end
describe 'PUT #publish' do describe 'PUT #publish' do
let(:procedure) { create(:procedure, administrateur: admin) } let(:lien_site_web) { 'http://mon-site.gouv.fr' }
let(:procedure2) { create(:procedure, :published, administrateur: admin) } let(:procedure) { create(:procedure, administrateur: admin, lien_site_web: nil) }
let(:procedure3) { create(:procedure, :published) } 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/' } let(:lien_site_web) { 'http://some.administration/' }
context 'when admin is the owner of the procedure' do 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' expect(flash[:alert]).to have_content 'Lien de la démarche invalide'
end end
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 end
context 'when admin is not the owner of the procedure' do context 'when admin is not the owner of the procedure' do
@ -421,7 +435,7 @@ describe Admin::ProceduresController, type: :controller do
end end
describe 'PUT #archive' do 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 context 'when admin is the owner of the procedure' do
before do before do
@ -437,7 +451,7 @@ describe Admin::ProceduresController, type: :controller do
context 'when owner want to re-enable procedure' do context 'when owner want to re-enable procedure' do
before 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 procedure.reload
end end

View file

@ -10,6 +10,7 @@ FactoryBot.define do
duree_conservation_dossiers_dans_ds { 3 } duree_conservation_dossiers_dans_ds { 3 }
duree_conservation_dossiers_hors_ds { 6 } duree_conservation_dossiers_hors_ds { 6 }
ask_birthday { false } ask_birthday { false }
lien_site_web { "https://mon-site.gouv" }
transient do transient do
administrateur {} administrateur {}
@ -147,13 +148,13 @@ FactoryBot.define do
trait :published do trait :published do
after(:build) do |procedure, _evaluator| 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
end end
trait :archived do trait :archived do
after(:build) do |procedure, _evaluator| 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! procedure.archive!
end end
end end
@ -162,14 +163,14 @@ FactoryBot.define do
# For now the behavior is the same than :archived # For now the behavior is the same than :archived
# (it may be different in the future though) # (it may be different in the future though)
after(:build) do |procedure, _evaluator| 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! procedure.archive!
end end
end end
trait :hidden do trait :hidden do
after(:build) do |procedure, _evaluator| 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! procedure.hide!
end end
end end

View file

@ -554,7 +554,7 @@ describe Procedure do
before do before do
Timecop.freeze(now) Timecop.freeze(now)
procedure.publish!(procedure.administrateurs.first, "example-path") procedure.publish!(procedure.administrateurs.first, "example-path", procedure.lien_site_web)
end end
after { Timecop.return } after { Timecop.return }