demarches-normaliennes/spec/system/administrateurs/procedure_publish_spec.rb

158 lines
5.2 KiB
Ruby
Raw Normal View History

require 'system/administrateurs/procedure_spec_helper'
describe 'Publishing a procedure', js: true do
include ProcedureSpecHelper
let(:administrateur) { create(:administrateur) }
let(:instructeurs) { [administrateur.user.instructeur] }
let!(:procedure) do
create(:procedure_with_dossiers,
:with_path,
:with_type_de_champ,
:with_service,
instructeurs: instructeurs,
administrateur: administrateur)
end
before do
login_as administrateur.user, scope: :user
end
context 'when using a deprecated back-office URL' do
scenario 'the admin is redirected to the draft procedure' do
2020-09-17 13:53:48 +02:00
visit admin_procedures_draft_path
expect(page).to have_current_path(admin_procedures_path(statut: "brouillons"))
end
scenario 'the admin is redirected to the archived procedures' do
2020-09-17 13:53:48 +02:00
visit admin_procedures_archived_path
expect(page).to have_current_path(admin_procedures_path(statut: "archivees"))
end
end
context 'when a procedure isnt published yet' do
before do
visit admin_procedures_path(statut: "brouillons")
click_on procedure.libelle
find('#publish-procedure-link').click
end
scenario 'an admin can publish it' do
expect(find_field('procedure_path').value).to eq procedure.path
fill_in 'lien_site_web', with: 'http://some.website'
click_on 'Publier'
expect(page).to have_text('Démarche publiée')
expect(page).to have_selector('#preview-procedure')
end
context 'when the procedure has invalid champs' do
let!(:procedure) do
create(:procedure,
:with_path,
:with_service,
instructeurs: instructeurs,
administrateur: administrateur,
types_de_champ_public: [{ type: :repetition, libelle: 'Enfants', children: [] }, { type: :drop_down_list, libelle: 'Civilité', options: [] }],
types_de_champ_private: [{ type: :drop_down_list, libelle: 'Civilité', options: [] }])
end
scenario 'an error message prevents the publication' do
expect(page).to have_content('Des problèmes empêchent la publication de la démarche')
expect(page).to have_content("Le champ « Enfants » doit comporter au moins un champ répétable")
expect(page).to have_content("Lannotation privée « Civilité » doit comporter au moins un choix sélectionnable")
expect(find_field('procedure_path').value).to eq procedure.path
fill_in 'lien_site_web', with: 'http://some.website'
expect(page).to have_button('Publier', disabled: true)
end
end
end
context 'when a procedure is closed' do
let!(:procedure) do
create(:procedure_with_dossiers,
:closed,
:with_path,
:with_type_de_champ,
:with_service,
instructeurs: instructeurs,
administrateur: administrateur)
end
scenario 'an admin can publish it again' do
visit admin_procedures_path(statut: "archivees")
click_on procedure.libelle
find('#publish-procedure-link').click
expect(find_field('procedure_path').value).to eq procedure.path
fill_in 'lien_site_web', with: 'http://some.website'
click_on 'publish'
expect(page).to have_text('Démarche publiée')
expect(page).to have_selector('#preview-procedure')
end
end
2022-06-07 13:54:11 +02:00
context 'when a procedure is closed with revision changes' do
let!(:tdc) { { type_champ: :text, libelle: 'nouveau champ' } }
let!(:procedure) do
create(:procedure_with_dossiers,
2022-06-07 13:54:11 +02:00
:closed,
:with_path,
:with_type_de_champ,
:with_service,
instructeurs: instructeurs,
administrateur: administrateur)
end
2022-06-07 13:54:11 +02:00
before do
Flipper.enable(:procedure_revisions, procedure)
procedure.draft_revision.add_type_de_champ(tdc)
end
scenario 'an admin can publish it again' do
visit admin_procedures_path(statut: "archivees")
click_on procedure.libelle
find('#publish-procedure-link').click
2022-06-07 13:54:11 +02:00
expect(page).to have_text('Les modifications suivantes seront appliquées')
expect(find_field('procedure_path').value).to eq procedure.path
fill_in 'lien_site_web', with: 'http://some.website'
2022-06-07 13:54:11 +02:00
find('#publish').click
expect(page).to have_text('Démarche publiée')
expect(page).to have_selector('#preview-procedure')
end
end
context 'when a procedure has dubious champs' do
let(:dubious_champs) do
[
{ libelle: 'NIR' },
{ libelle: 'carte bancaire' }
]
end
let(:not_dubious_champs) do
[{ libelle: 'Prénom' }]
end
let!(:procedure) do
create(:procedure,
:with_service,
instructeurs: instructeurs,
administrateur: administrateur,
types_de_champ_public: not_dubious_champs + dubious_champs)
end
scenario 'an admin can publish it, but a warning appears' do
visit admin_procedures_path(statut: "brouillons")
click_on procedure.libelle
find('#publish-procedure-link').click
expect(page).to have_content("Attention, certains champs ne peuvent être demandé par l'administration.")
expect(page).to have_selector(".dubious-champs", count: dubious_champs.size)
end
end
end