2021-11-25 16:26:55 +01:00
describe Administrateurs :: ProceduresController , type : :controller do
2018-04-13 16:56:00 +02:00
let ( :admin ) { create ( :administrateur ) }
2019-09-24 16:38:58 +02:00
let ( :bad_procedure_id ) { 100000 }
let ( :path ) { 'ma-jolie-demarche' }
let ( :libelle ) { 'Démarche de test' }
let ( :description ) { 'Description de test' }
let ( :organisation ) { 'Organisation de test' }
2021-12-01 21:38:41 +01:00
let ( :ministere ) { create ( :zone ) }
2019-09-24 16:38:58 +02:00
let ( :cadre_juridique ) { 'cadre juridique' }
let ( :duree_conservation_dossiers_dans_ds ) { 3 }
let ( :monavis_embed ) { nil }
let ( :lien_site_web ) { 'http://mon-site.gouv.fr' }
2022-09-26 19:02:39 +02:00
let ( :zone ) { create ( :zone ) }
let ( :zone_ids ) { [ zone . id ] }
2022-10-20 13:07:47 +02:00
let ( :tags ) { " [ \" planete \" , \" environnement \" ] " }
2018-04-13 16:56:00 +02:00
describe '#apercu' do
2022-03-15 11:14:45 +01:00
render_views
let ( :procedure ) { create ( :procedure , :with_all_champs ) }
2018-04-13 16:56:00 +02:00
2022-09-02 10:51:56 +02:00
subject { get :apercu , params : { id : procedure . id } }
2018-04-13 16:56:00 +02:00
before do
2019-08-09 10:46:39 +02:00
sign_in ( admin . user )
2018-04-13 16:56:00 +02:00
end
2022-04-07 11:40:53 +02:00
it do
2022-09-02 10:51:56 +02:00
subject
2022-04-07 11:40:53 +02:00
expect ( response ) . to have_http_status ( :ok )
expect ( procedure . dossiers . visible_by_user ) . to be_empty
expect ( procedure . dossiers . for_procedure_preview ) . not_to be_empty
end
2022-09-02 10:51:56 +02:00
context 'when the draft is invalid' do
before do
allow_any_instance_of ( ProcedureRevision ) . to receive ( :invalid? ) . and_return ( true )
end
it do
subject
expect ( response ) . to redirect_to ( champs_admin_procedure_path ( procedure ) )
expect ( flash [ :alert ] ) . to be_present
end
end
2018-04-13 16:56:00 +02:00
end
2019-09-24 16:38:58 +02:00
let ( :procedure_params ) {
{
path : path ,
libelle : libelle ,
description : description ,
organisation : organisation ,
2021-12-01 21:38:41 +01:00
ministere : ministere ,
2019-09-24 16:38:58 +02:00
cadre_juridique : cadre_juridique ,
duree_conservation_dossiers_dans_ds : duree_conservation_dossiers_dans_ds ,
monavis_embed : monavis_embed ,
2022-09-26 19:02:39 +02:00
zone_ids : zone_ids ,
2022-10-20 13:07:47 +02:00
lien_site_web : lien_site_web ,
tags : tags
2019-09-24 16:38:58 +02:00
}
}
before do
sign_in ( admin . user )
end
2020-07-28 15:15:56 +02:00
describe 'GET #index' do
subject { get :index }
it { expect ( response . status ) . to eq ( 200 ) }
end
describe 'GET #index with sorting and pagination' do
before do
create ( :procedure , administrateur : admin )
admin . reload
end
subject {
get :index , params : {
'statut' : 'publiees'
}
}
it { expect ( subject . status ) . to eq ( 200 ) }
end
2022-10-24 16:43:18 +02:00
describe 'GET #all' do
subject { get :all }
it { expect ( subject . status ) . to eq ( 200 ) }
2022-11-08 11:34:39 +01:00
it 'assigns ProceduresFilter' do
filter = double ( 'filter' )
expect ( ProceduresFilter ) . to receive ( :new ) . and_return ( filter )
2022-10-24 16:43:18 +02:00
subject
2022-11-08 11:34:39 +01:00
expect ( assigns ( :filter ) ) . to be_present
2022-11-04 12:18:02 +01:00
end
2022-10-24 16:43:18 +02:00
end
2022-07-22 15:40:22 +02:00
describe 'POST #search' do
2021-08-31 23:44:23 +02:00
before do
2021-11-25 16:26:55 +01:00
stub_const ( " Administrateurs::ProceduresController::SIGNIFICANT_DOSSIERS_THRESHOLD " , 2 )
2021-08-31 23:44:23 +02:00
end
2022-07-22 15:40:22 +02:00
let ( :query ) { 'Procedure' }
subject { post :search , params : { query : query } , format : :turbo_stream }
2021-08-31 23:44:23 +02:00
let ( :grouped_procedures ) { subject ; assigns ( :grouped_procedures ) }
let ( :response_procedures ) { grouped_procedures . map { | _o , procedures | procedures } . flatten }
describe 'selecting' do
let! ( :large_draft_procedure ) { create ( :procedure_with_dossiers , dossiers_count : 2 ) }
let! ( :large_published_procedure ) { create ( :procedure_with_dossiers , :published , dossiers_count : 2 ) }
let! ( :large_closed_procedure ) { create ( :procedure_with_dossiers , :closed , dossiers_count : 2 ) }
let! ( :small_closed_procedure ) { create ( :procedure_with_dossiers , :closed , dossiers_count : 1 ) }
it 'displays published and closed procedures' do
expect ( response_procedures ) . to include ( large_published_procedure )
expect ( response_procedures ) . to include ( large_closed_procedure )
end
it 'doesn’ t display procedures without a significant number of dossiers' do
expect ( response_procedures ) . not_to include ( small_closed_procedure )
end
it 'doesn’ t display draft procedures' do
expect ( response_procedures ) . not_to include ( large_draft_procedure )
end
end
describe 'grouping' do
let ( :service_1 ) { create ( :service , nom : 'DDT des Vosges' ) }
let ( :service_2 ) { create ( :service , nom : 'DDT du Loiret' ) }
let! ( :procedure_with_service_1 ) { create ( :procedure_with_dossiers , :published , organisation : nil , service : service_1 , dossiers_count : 2 ) }
let! ( :procedure_with_service_2 ) { create ( :procedure_with_dossiers , :published , organisation : nil , service : service_2 , dossiers_count : 2 ) }
let! ( :procedure_without_service ) { create ( :procedure_with_dossiers , :published , organisation : 'DDT du Loiret' , dossiers_count : 2 ) }
it 'groups procedures with services as well as procedures with organisations' do
expect ( grouped_procedures . length ) . to eq 2
expect ( grouped_procedures . find { | o , _p | o == 'DDT des Vosges' } . last ) . to contain_exactly ( procedure_with_service_1 )
expect ( grouped_procedures . find { | o , _p | o == 'DDT du Loiret' } . last ) . to contain_exactly ( procedure_with_service_2 , procedure_without_service )
end
end
2022-07-22 15:40:22 +02:00
describe 'searching' do
let! ( :matching_procedure ) { create ( :procedure_with_dossiers , :published , dossiers_count : 2 , libelle : 'éléctriCITE' ) }
let! ( :unmatching_procedure ) { create ( :procedure_with_dossiers , :published , dossiers_count : 2 , libelle : 'temoin' ) }
let ( :query ) { 'ELECTRIcité' }
it 'is case insentivite and unaccented' do
expect ( response_procedures ) . to include ( matching_procedure )
expect ( response_procedures ) . not_to include ( unmatching_procedure )
end
end
2021-08-31 23:44:23 +02:00
end
2019-09-24 16:38:58 +02:00
describe 'GET #edit' do
let ( :published_at ) { nil }
let ( :procedure ) { create ( :procedure , administrateur : admin , published_at : published_at ) }
let ( :procedure_id ) { procedure . id }
subject { get :edit , params : { id : procedure_id } }
context 'when user is not connected' do
before do
sign_out ( admin . user )
end
it { is_expected . to redirect_to new_user_session_path }
end
context 'when user is connected' do
context 'when procedure exist' do
let ( :procedure_id ) { procedure . id }
it { is_expected . to have_http_status ( :success ) }
end
context 'when procedure is published' do
let ( :published_at ) { Time . zone . now }
it { is_expected . to have_http_status ( :success ) }
end
context 'when procedure doesn’ t exist' do
let ( :procedure_id ) { bad_procedure_id }
it { is_expected . to have_http_status ( 404 ) }
end
end
end
2022-09-26 19:02:39 +02:00
describe 'GET #zones' do
let ( :procedure ) { create ( :procedure , administrateur : admin ) }
let ( :procedure_id ) { procedure . id }
subject { get :zones , params : { id : procedure_id } }
it { is_expected . to have_http_status ( :success ) }
end
2019-09-24 16:38:58 +02:00
describe 'POST #create' do
context 'when all attributs are filled' do
describe 'new procedure in database' do
subject { post :create , params : { procedure : procedure_params } }
it { expect { subject } . to change { Procedure . count } . by ( 1 ) }
end
context 'when procedure is correctly save' do
before do
post :create , params : { procedure : procedure_params }
end
describe 'procedure attributs in database' do
subject { Procedure . last }
it { expect ( subject . libelle ) . to eq ( libelle ) }
it { expect ( subject . description ) . to eq ( description ) }
it { expect ( subject . organisation ) . to eq ( organisation ) }
it { expect ( subject . administrateurs ) . to eq ( [ admin ] ) }
it { expect ( subject . duree_conservation_dossiers_dans_ds ) . to eq ( duree_conservation_dossiers_dans_ds ) }
2022-10-20 13:07:47 +02:00
it { expect ( subject . tags ) . to eq ( [ " planete " , " environnement " ] ) }
2019-09-24 16:38:58 +02:00
end
2020-07-07 12:03:32 +02:00
it { is_expected . to redirect_to ( champs_admin_procedure_path ( Procedure . last ) ) }
2019-09-24 16:38:58 +02:00
it { expect ( flash [ :notice ] ) . to be_present }
end
context 'when procedure is correctly saved' do
let ( :instructeur ) { admin . instructeur }
before do
post :create , params : { procedure : procedure_params }
end
describe " admin can also instruct the procedure as a instructeur " do
subject { Procedure . last }
it { expect ( subject . defaut_groupe_instructeur . instructeurs ) . to include ( instructeur ) }
end
end
end
context 'when many attributs are not valid' do
let ( :libelle ) { '' }
let ( :description ) { '' }
describe 'no new procedure in database' do
subject { post :create , params : { procedure : procedure_params } }
it { expect { subject } . to change { Procedure . count } . by ( 0 ) }
describe 'no new module api carto in database' do
it { expect { subject } . to change { ModuleAPICarto . count } . by ( 0 ) }
end
end
describe 'flash message is present' do
before do
post :create , params : { procedure : procedure_params }
end
it { expect ( flash [ :alert ] ) . to be_present }
end
end
end
describe 'PUT #update' do
2022-02-22 16:09:00 +01:00
let! ( :procedure ) { create ( :procedure , :with_type_de_champ , administrateur : admin , procedure_expires_when_termine_enabled : false ) }
2019-09-24 16:38:58 +02:00
context 'when administrateur is not connected' do
before do
sign_out ( admin . user )
end
subject { put :update , params : { id : procedure . id } }
it { is_expected . to redirect_to new_user_session_path }
end
context 'when administrateur is connected' do
def update_procedure
2022-02-22 16:09:00 +01:00
put :update , params : { id : procedure . id , procedure : procedure_params . merge ( procedure_expires_when_termine_enabled : true ) }
2019-09-24 16:38:58 +02:00
procedure . reload
end
context 'when all attributs are present' do
let ( :libelle ) { 'Blable' }
let ( :description ) { 'blabla' }
let ( :organisation ) { 'plop' }
let ( :duree_conservation_dossiers_dans_ds ) { 7 }
2022-02-22 16:09:00 +01:00
let ( :procedure_expires_when_termine_enabled ) { true }
2019-09-24 16:38:58 +02:00
before { update_procedure }
describe 'procedure attributs in database' do
subject { procedure }
it { expect ( subject . libelle ) . to eq ( libelle ) }
it { expect ( subject . description ) . to eq ( description ) }
it { expect ( subject . organisation ) . to eq ( organisation ) }
it { expect ( subject . duree_conservation_dossiers_dans_ds ) . to eq ( duree_conservation_dossiers_dans_ds ) }
2022-02-22 16:09:00 +01:00
it { expect ( subject . procedure_expires_when_termine_enabled ) . to eq ( true ) }
2019-09-24 16:38:58 +02:00
end
2022-02-22 16:09:00 +01:00
it { is_expected . to redirect_to ( admin_procedure_path id : procedure . id ) }
2019-09-24 16:38:58 +02:00
it { expect ( flash [ :notice ] ) . to be_present }
end
context 'when many attributs are not valid' do
before { update_procedure }
let ( :libelle ) { '' }
let ( :description ) { '' }
describe 'flash message is present' do
it { expect ( flash [ :alert ] ) . to be_present }
end
end
context 'when procedure is brouillon' do
let ( :procedure ) { create ( :procedure_with_dossiers , :with_path , :with_type_de_champ , administrateur : admin ) }
let! ( :dossiers_count ) { procedure . dossiers . count }
describe 'dossiers are dropped' do
subject { update_procedure }
it {
expect ( dossiers_count ) . to eq ( 1 )
expect ( subject . dossiers . count ) . to eq ( 0 )
}
end
end
context 'when procedure is published' do
let ( :procedure ) { create ( :procedure , :with_type_de_champ , :published , administrateur : admin ) }
subject { update_procedure }
describe 'only some properties can be updated' do
it { expect ( subject . libelle ) . to eq procedure_params [ :libelle ] }
it { expect ( subject . description ) . to eq procedure_params [ :description ] }
it { expect ( subject . organisation ) . to eq procedure_params [ :organisation ] }
it { expect ( subject . for_individual ) . not_to eq procedure_params [ :for_individual ] }
end
end
end
end
2021-09-01 00:20:32 +02:00
describe 'PUT #clone' do
let ( :procedure ) { create ( :procedure , :with_notice , :with_deliberation , administrateur : admin ) }
let ( :params ) { { procedure_id : procedure . id } }
subject { put :clone , params : params }
before do
procedure
response = Typhoeus :: Response . new ( code : 200 , body : 'Hello world' )
Typhoeus . stub ( / active_storage \/ disk / ) . and_return ( response )
end
it { expect { subject } . to change ( Procedure , :count ) . by ( 1 ) }
context 'when admin is the owner of the procedure' do
before { subject }
it 'creates a new procedure and redirect to it' do
2022-08-17 09:06:04 +02:00
expect ( response ) . to redirect_to admin_procedure_path ( id : Procedure . last . id )
2021-09-01 00:20:32 +02:00
expect ( Procedure . last . cloned_from_library ) . to be_falsey
expect ( Procedure . last . notice . attached? ) . to be_truthy
expect ( Procedure . last . deliberation . attached? ) . to be_truthy
2022-08-17 09:06:04 +02:00
expect ( flash [ :notice ] ) . to have_content 'Démarche clonée, pensez a vérifier la Présentation et choisir le service a laquelle cette procédure est associé.'
2021-09-01 00:20:32 +02:00
end
context 'when the procedure is cloned from the library' do
let ( :params ) { { procedure_id : procedure . id , from_new_from_existing : true } }
it { expect ( Procedure . last . cloned_from_library ) . to be ( true ) }
end
end
context 'when admin is not the owner of the procedure' do
let ( :admin_2 ) { create ( :administrateur ) }
before do
sign_out ( admin . user )
sign_in ( admin_2 . user )
subject
end
it 'creates a new procedure and redirect to it' do
2022-08-17 09:06:04 +02:00
expect ( response ) . to redirect_to admin_procedure_path ( id : Procedure . last . id )
expect ( flash [ :notice ] ) . to have_content 'Démarche clonée, pensez a vérifier la Présentation et choisir le service a laquelle cette procédure est associé.'
2021-09-01 00:20:32 +02:00
end
end
end
2021-09-01 00:25:00 +02:00
describe 'PUT #archive' do
let ( :procedure ) { create ( :procedure , :published , administrateur : admin , lien_site_web : lien_site_web ) }
2022-05-27 16:04:04 +02:00
context 'when the admin is an owner of the procedure without procedure replacement' do
2021-09-01 00:25:00 +02:00
before do
put :archive , params : { procedure_id : procedure . id }
procedure . reload
end
it 'archives the procedure' do
expect ( procedure . close? ) . to be_truthy
expect ( response ) . to redirect_to :admin_procedures
expect ( flash [ :notice ] ) . to have_content 'Démarche close'
end
2022-05-27 16:04:04 +02:00
it 'does not have any replacement procedure' do
expect ( procedure . replaced_by_procedure ) . to be_nil
end
end
context 'when the admin is an owner of the procedure with procedure replacement' do
let ( :new_procedure ) { create ( :procedure , :published , administrateur : admin , lien_site_web : lien_site_web ) }
before do
put :archive , params : { procedure_id : procedure . id , new_procedure : new_procedure }
procedure . reload
end
it 'archives the procedure' do
expect ( procedure . close? ) . to be_truthy
expect ( response ) . to redirect_to :admin_procedures
expect ( flash [ :notice ] ) . to have_content 'Démarche close'
end
it 'does have a replacement procedure' do
expect ( procedure . replaced_by_procedure ) . to eq ( new_procedure )
end
2021-09-01 00:25:00 +02:00
end
context 'when the admin is not an owner of the procedure' do
let ( :admin_2 ) { create ( :administrateur ) }
before do
sign_out ( admin . user )
sign_in ( admin_2 . user )
put :archive , params : { procedure_id : procedure . id }
procedure . reload
end
it 'displays an error message' do
expect ( response ) . to redirect_to :admin_procedures
expect ( flash [ :alert ] ) . to have_content 'Démarche inexistante'
end
end
end
2021-09-01 00:08:51 +02:00
describe 'DELETE #destroy' do
let ( :procedure_draft ) { create ( :procedure , administrateurs : [ admin ] ) }
let ( :procedure_published ) { create ( :procedure , :published , administrateurs : [ admin ] ) }
let ( :procedure_closed ) { create ( :procedure , :closed , administrateurs : [ admin ] ) }
let ( :procedure ) { dossier . procedure }
subject { delete :destroy , params : { id : procedure } }
context 'when the procedure is a brouillon' do
let ( :dossier ) { create ( :dossier , :en_instruction , procedure : procedure_draft ) }
before { subject }
it 'deletes associated dossiers' do
2022-03-09 10:29:16 +01:00
expect ( procedure . dossiers . count ) . to eq ( 0 )
2021-09-01 00:08:51 +02:00
end
it 'redirects to the procedure drafts page' do
expect ( response ) . to redirect_to admin_procedures_draft_path
expect ( flash [ :notice ] ) . to be_present
end
end
context 'when procedure is published' do
let ( :dossier ) { create ( :dossier , :en_instruction , procedure : procedure_published ) }
before { subject }
it { expect ( response . status ) . to eq 403 }
context 'when dossier is en_construction' do
let ( :dossier ) { create ( :dossier , :en_construction , procedure : procedure_published ) }
2022-01-12 11:31:05 +01:00
it do
expect ( procedure . reload . close? ) . to be_truthy
expect ( procedure . discarded? ) . to be_truthy
2022-03-09 10:29:16 +01:00
expect ( dossier . reload . visible_by_administration? ) . to be_falsy
2022-01-12 11:31:05 +01:00
end
end
context 'when dossier is accepte' do
let ( :dossier ) { create ( :dossier , :accepte , procedure : procedure_published ) }
it do
expect ( procedure . reload . close? ) . to be_truthy
expect ( procedure . discarded? ) . to be_truthy
expect ( dossier . reload . hidden_by_administration? ) . to be_truthy
end
2021-09-01 00:08:51 +02:00
end
end
context 'when procedure is closed' do
let ( :dossier ) { create ( :dossier , :en_instruction , procedure : procedure_closed ) }
before { subject }
it { expect ( response . status ) . to eq 403 }
context 'when dossier is en_construction' do
let ( :dossier ) { create ( :dossier , :en_construction , procedure : procedure_published ) }
2022-01-12 11:31:05 +01:00
it do
expect ( procedure . reload . discarded? ) . to be_truthy
2022-03-09 10:29:16 +01:00
expect ( dossier . reload . visible_by_administration? ) . to be_falsy
2022-01-12 11:31:05 +01:00
end
end
context 'when dossier is accepte' do
let ( :dossier ) { create ( :dossier , :accepte , procedure : procedure_published ) }
it do
expect ( procedure . reload . discarded? ) . to be_truthy
expect ( dossier . reload . hidden_by_administration? ) . to be_truthy
end
2021-09-01 00:08:51 +02:00
end
end
context " when administrateur does not own the procedure " do
let ( :dossier ) { create ( :dossier ) }
it { expect { subject } . to raise_error ( ActiveRecord :: RecordNotFound ) }
end
end
2019-09-24 16:38:58 +02:00
describe 'PATCH #monavis' do
let! ( :procedure ) { create ( :procedure , administrateur : admin ) }
let ( :procedure_params ) {
{
monavis_embed : monavis_embed
}
}
context 'when administrateur is not connected' do
before do
sign_out ( admin . user )
end
subject { patch :update_monavis , params : { id : procedure . id } }
it { is_expected . to redirect_to new_user_session_path }
end
context 'when administrateur is connected' do
def update_monavis
patch :update_monavis , params : { id : procedure . id , procedure : procedure_params }
procedure . reload
end
let ( :monavis_embed ) {
<<-MSG
< a href = " https://monavis.numerique.gouv.fr/Demarches/123?&view-mode=formulaire-avis&nd_mode=en-ligne-enti%C3%A8rement&nd_source=button&key=cd4a872d475e4045666057f " >
< img src = " https://monavis.numerique.gouv.fr/monavis-static/bouton-blanc.png " alt = " Je donne mon avis " title = " Je donne mon avis sur cette démarche " / >
< / a>
MSG
}
context 'when all attributes are present' do
render_views
before { update_monavis }
context 'when the embed code is valid' do
describe 'the monavis field is updated' do
subject { procedure }
it { expect ( subject . monavis_embed ) . to eq ( monavis_embed ) }
end
it { expect ( flash [ :notice ] ) . to be_present }
it { expect ( response . body ) . to include " MonAvis " }
end
context 'when the embed code is not valid' do
let ( :monavis_embed ) { 'invalid embed code' }
describe 'the monavis field is not updated' do
subject { procedure }
it { expect ( subject . monavis_embed ) . to eq ( nil ) }
end
it { expect ( flash [ :alert ] ) . to be_present }
it { expect ( response . body ) . to include " MonAvis " }
end
end
context 'when procedure is published' do
let ( :procedure ) { create ( :procedure , :published , administrateur : admin ) }
subject { update_monavis }
describe 'the monavis field is not updated' do
it { expect ( subject . monavis_embed ) . to eq monavis_embed }
end
end
end
end
2020-04-27 14:58:12 +02:00
describe 'GET #jeton' do
let ( :procedure ) { create ( :procedure , administrateur : admin ) }
subject { get :jeton , params : { id : procedure . id } }
it { is_expected . to have_http_status ( :success ) }
end
describe 'PATCH #jeton' do
let ( :procedure ) { create ( :procedure , administrateur : admin ) }
2020-10-19 11:33:36 +02:00
let ( :token ) { " eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c " }
2020-04-27 14:58:12 +02:00
2020-10-19 11:33:36 +02:00
subject { patch :update_jeton , params : { id : procedure . id , procedure : { api_entreprise_token : token } } }
before do
2020-08-05 18:40:47 +02:00
allow_any_instance_of ( APIEntreprise :: PrivilegesAdapter ) . to receive ( :valid? ) . and_return ( token_is_valid )
2020-10-19 11:33:36 +02:00
subject
end
context 'when jeton is valid' do
let ( :token_is_valid ) { true }
it { expect ( flash . alert ) . to be_nil }
it { expect ( flash . notice ) . to eq ( 'Le jeton a bien été mis à jour' ) }
it { expect ( procedure . reload . api_entreprise_token ) . to eq ( token ) }
end
context 'when jeton is invalid' do
let ( :token_is_valid ) { false }
2021-05-26 15:16:30 +02:00
it { expect ( flash . alert ) . to eq ( " Mise à jour impossible : le jeton n’ est pas valide " ) }
2020-10-19 11:33:36 +02:00
it { expect ( flash . notice ) . to be_nil }
it { expect ( procedure . reload . api_entreprise_token ) . not_to eq ( token ) }
end
context 'when jeton is not a jwt' do
let ( :token ) { " invalid " }
let ( :token_is_valid ) { true } # just to check jwt format by procedure model
2021-05-26 15:16:30 +02:00
it { expect ( flash . alert ) . to eq ( " Mise à jour impossible : le jeton n’ est pas valide " ) }
2020-10-19 11:33:36 +02:00
it { expect ( flash . notice ) . to be_nil }
it { expect ( procedure . reload . api_entreprise_token ) . not_to eq ( token ) }
2020-04-27 14:58:12 +02:00
end
end
2020-09-08 12:35:44 +02:00
describe 'PUT #publish' do
let ( :procedure ) { create ( :procedure , administrateur : admin , lien_site_web : lien_site_web ) }
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
context 'procedure path does not exist' do
let ( :path ) { 'new_path' }
let ( :lien_site_web ) { 'http://mon-site.gouv.fr' }
before do
put :publish , params : { procedure_id : procedure . id , path : path , lien_site_web : lien_site_web }
procedure . reload
end
it 'publish the given procedure' do
expect ( procedure . publiee? ) . to be_truthy
expect ( procedure . path ) . to eq ( path )
expect ( procedure . lien_site_web ) . to eq ( lien_site_web )
end
it 'redirects to the procedure page' do
expect ( response . status ) . to eq 302
expect ( response . body ) . to include ( admin_procedure_path ( procedure . id ) )
expect ( flash [ :notice ] ) . to have_content 'Démarche publiée'
end
end
context 'procedure path exists and is owned by current administrator' do
before do
put :publish , params : { procedure_id : procedure . id , path : path , lien_site_web : lien_site_web }
procedure . reload
procedure2 . reload
end
let ( :path ) { procedure2 . path }
let ( :lien_site_web ) { 'http://mon-site.gouv.fr' }
it 'publish the given procedure' do
expect ( procedure . publiee? ) . to be_truthy
expect ( procedure . path ) . to eq ( path )
expect ( procedure . lien_site_web ) . to eq ( lien_site_web )
end
it 'depubliee previous procedure' do
expect ( procedure2 . depubliee? ) . to be_truthy
end
it 'redirects to the procedures page' do
expect ( response . status ) . to eq 302
expect ( response . body ) . to include ( admin_procedure_path ( procedure . id ) )
expect ( flash [ :notice ] ) . to have_content 'Démarche publiée'
end
end
context 'procedure path exists and is not owned by current administrator' do
let ( :path ) { procedure3 . path }
let ( :lien_site_web ) { 'http://mon-site.gouv.fr' }
it { expect { put :publish , params : { procedure_id : procedure . id , path : path , lien_site_web : lien_site_web } } . to raise_error ( ActiveRecord :: RecordInvalid ) }
end
context 'procedure path is invalid' do
let ( :lien_site_web ) { 'http://mon-site.gouv.fr' }
let ( :path ) { 'Invalid Procedure Path' }
it { expect { put :publish , params : { procedure_id : procedure . id , path : path , lien_site_web : lien_site_web } } . to raise_error ( ActiveRecord :: RecordInvalid ) }
end
2021-11-24 11:08:57 +01:00
context 'procedure revision is invalid' do
let ( :path ) { 'new_path' }
let ( :procedure ) do
create ( :procedure ,
administrateur : admin ,
lien_site_web : lien_site_web ,
2022-08-04 11:39:07 +02:00
types_de_champ_public : [ { type : :repetition , children : [ ] } ] )
2021-11-24 11:08:57 +01:00
end
it { expect { put :publish , params : { procedure_id : procedure . id , path : path , lien_site_web : lien_site_web } } . to raise_error ( ActiveRecord :: RecordInvalid ) }
end
2020-09-08 12:35:44 +02:00
end
context 'when admin is not the owner of the procedure' do
let ( :admin_2 ) { create ( :administrateur ) }
before do
sign_out ( admin . user )
sign_in ( admin_2 . user )
put :publish , params : { procedure_id : procedure . id , path : 'fake_path' }
procedure . reload
end
it 'fails' do
expect ( response ) . to have_http_status ( 404 )
end
end
context 'when the admin does not provide a lien_site_web' do
context 'procedure path is valid but lien_site_web is missing' do
let ( :path ) { 'new_path2' }
let ( :lien_site_web ) { nil }
it { expect { put :publish , params : { procedure_id : procedure . id , path : path , lien_site_web : lien_site_web } } . to raise_error ( ActiveRecord :: RecordInvalid ) }
end
end
end
describe 'POST #transfer' do
let! ( :procedure ) { create :procedure , :with_service , administrateur : admin }
before do
post :transfer , params : { email_admin : email_admin , procedure_id : procedure . id }
procedure . reload
end
subject do
post :transfer , params : { email_admin : email_admin , procedure_id : procedure . id }
end
context 'when admin is unknow' do
let ( :email_admin ) { 'plop' }
it { expect ( subject . status ) . to eq 302 }
2020-09-29 10:52:13 +02:00
it { expect ( response . body ) . to include ( admin_procedure_transfert_path ( procedure . id ) ) }
2020-09-08 12:35:44 +02:00
it { expect ( flash [ :alert ] ) . to be_present }
2021-05-26 15:16:30 +02:00
it { expect ( flash [ :alert ] ) . to eq ( " Envoi vers #{ email_admin } impossible : cet administrateur n’ existe pas " ) }
2020-09-08 12:35:44 +02:00
end
context 'when admin is known' do
let! ( :new_admin ) { create :administrateur , email : 'new_admin@admin.com' }
context " and its email address is correct " do
let ( :email_admin ) { 'new_admin@admin.com' }
it { expect ( subject . status ) . to eq 302 }
it { expect { subject } . to change ( new_admin . procedures , :count ) . by ( 1 ) }
it " should create a new service " do
subject
expect ( new_admin . procedures . last . service_id ) . not_to eq ( procedure . service_id )
end
end
context 'when admin is know but its email was not downcased' do
let ( :email_admin ) { " NEW_admin@adMIN.com " }
it { expect ( subject . status ) . to eq 302 }
it { expect { subject } . to change ( Procedure , :count ) . by ( 1 ) }
end
describe " correctly assigns the new admin " do
let ( :email_admin ) { 'new_admin@admin.com' }
before do
subject
end
it { expect ( Procedure . last . administrateurs ) . to eq [ new_admin ] }
end
end
end
2020-09-30 18:22:06 +02:00
describe 'PUT #allow_expert_review' do
let! ( :procedure ) { create :procedure , :with_service , administrateur : admin }
context 'when admin refuse to invite experts on this procedure' do
before do
procedure . update! ( allow_expert_review : false )
procedure . reload
end
it { expect ( procedure . allow_expert_review ) . to be_falsy }
end
context 'when admin accept to invite experts on this procedure (true by default)' do
it { expect ( procedure . allow_expert_review ) . to be_truthy }
end
end
2022-05-10 13:59:47 +02:00
describe 'PUT #restore' do
2022-06-10 12:33:47 +02:00
let ( :procedure ) { create :procedure_with_dossiers , :with_service , :published , administrateur : admin }
before do
procedure . discard_and_keep_track! ( admin )
end
2022-05-10 13:59:47 +02:00
context 'when the admin wants to restore a procedure' do
before do
put :restore , params : { id : procedure . id }
procedure . reload
end
it { expect ( procedure . discarded? ) . to be_falsy }
2022-06-10 12:33:47 +02:00
it { expect ( procedure . dossiers . first . hidden_by_administration_at ) . to be_nil }
2022-05-10 13:59:47 +02:00
end
end
2018-04-13 16:56:00 +02:00
end