2021-11-25 16:26:55 +01:00
describe Administrateurs :: GroupeInstructeursController , type : :controller do
2019-10-17 15:13:50 +02:00
render_views
let ( :admin ) { create ( :administrateur ) }
2021-09-15 12:55:54 +02:00
let ( :procedure ) { create ( :procedure , :published , :for_individual , administrateurs : [ admin ] , routing_enabled : true ) }
2019-10-17 15:13:50 +02:00
let! ( :gi_1_1 ) { procedure . defaut_groupe_instructeur }
let ( :procedure2 ) { create ( :procedure , :published ) }
let! ( :gi_2_2 ) { procedure2 . groupe_instructeurs . create ( label : 'groupe instructeur 2 2' ) }
before { sign_in ( admin . user ) }
describe '#index' do
context 'of a procedure I own' do
let! ( :gi_1_2 ) { procedure . groupe_instructeurs . create ( label : 'groupe instructeur 2' ) }
before { get :index , params : { procedure_id : procedure . id } }
context 'when a procedure has multiple groups' do
it { expect ( response ) . to have_http_status ( :ok ) }
it { expect ( response . body ) . to include ( gi_1_1 . label ) }
it { expect ( response . body ) . to include ( gi_1_2 . label ) }
it { expect ( response . body ) . not_to include ( gi_2_2 . label ) }
end
end
end
2019-10-23 20:22:56 +02:00
describe '#show' do
context 'of a group I belong to' do
before { get :show , params : { procedure_id : procedure . id , id : gi_1_1 . id } }
it { expect ( response ) . to have_http_status ( :ok ) }
end
2020-06-12 18:16:07 +02:00
context 'when the routage is not activated on the procedure' do
let ( :procedure ) { create :procedure , administrateur : admin , instructeurs : [ instructeur_assigned_1 , instructeur_assigned_2 ] }
2022-03-24 12:38:32 +01:00
let! ( :instructeur_assigned_1 ) { create :instructeur , email : 'instructeur_1@ministere-a.gouv.fr' , administrateurs : [ admin ] }
let! ( :instructeur_assigned_2 ) { create :instructeur , email : 'instructeur_2@ministere-b.gouv.fr' , administrateurs : [ admin ] }
let! ( :instructeur_not_assigned_1 ) { create :instructeur , email : 'instructeur_3@ministere-a.gouv.fr' , administrateurs : [ admin ] }
let! ( :instructeur_not_assigned_2 ) { create :instructeur , email : 'instructeur_4@ministere-b.gouv.fr' , administrateurs : [ admin ] }
2020-06-12 18:16:07 +02:00
subject! { get :show , params : { procedure_id : procedure . id , id : gi_1_1 . id } }
it { expect ( response . status ) . to eq ( 200 ) }
it 'sets the assigned and not assigned instructeurs' do
expect ( assigns ( :instructeurs ) ) . to match_array ( [ instructeur_assigned_1 , instructeur_assigned_2 ] )
2022-03-24 12:38:32 +01:00
expect ( assigns ( :available_instructeur_emails ) ) . to match_array ( [ 'instructeur_3@ministere-a.gouv.fr' , 'instructeur_4@ministere-b.gouv.fr' ] )
2020-06-12 18:16:07 +02:00
end
end
2019-10-23 20:22:56 +02:00
end
2019-10-23 20:51:25 +02:00
describe '#create' do
before do
post :create ,
params : {
procedure_id : procedure . id ,
groupe_instructeur : { label : label }
}
end
context 'with a valid name' do
let ( :label ) { " nouveau_groupe " }
it { expect ( flash . notice ) . to be_present }
2020-07-07 12:03:32 +02:00
it { expect ( response ) . to redirect_to ( admin_procedure_groupe_instructeur_path ( procedure , procedure . groupe_instructeurs . last ) ) }
2019-10-23 20:51:25 +02:00
it { expect ( procedure . groupe_instructeurs . count ) . to eq ( 2 ) }
end
context 'with an invalid group name' do
let ( :label ) { gi_1_1 . label }
it { expect ( response ) . to render_template ( :index ) }
it { expect ( procedure . groupe_instructeurs . count ) . to eq ( 1 ) }
it { expect ( flash . alert ) . to be_present }
end
end
2019-10-23 20:54:59 +02:00
2020-01-08 14:13:51 +01:00
describe '#destroy' do
def delete_group ( group )
delete :destroy ,
params : {
procedure_id : procedure . id ,
id : group . id
}
end
context 'with only one group' do
before { delete_group gi_1_1 }
it { expect ( flash . alert ) . to be_present }
2020-07-07 12:03:32 +02:00
it { expect ( response ) . to redirect_to ( admin_procedure_groupe_instructeurs_path ( procedure ) ) }
2020-01-08 14:13:51 +01:00
it { expect ( procedure . groupe_instructeurs . count ) . to eq ( 1 ) }
end
context 'with many groups' do
let! ( :gi_1_2 ) { procedure . groupe_instructeurs . create ( label : 'groupe instructeur 2' ) }
2020-01-20 11:27:41 +01:00
context 'of a group that can be deleted' do
before { delete_group gi_1_2 }
2022-10-14 17:10:42 +02:00
it { expect ( flash . notice ) . to eq " le groupe « groupe instructeur 2 » a été supprimé et le routage a été désactivé. " }
2020-01-20 11:27:41 +01:00
it { expect ( procedure . groupe_instructeurs . count ) . to eq ( 1 ) }
2022-10-14 17:10:42 +02:00
it { expect ( procedure . reload . routing_enabled? ) . to eq ( false ) }
2020-07-07 12:03:32 +02:00
it { expect ( response ) . to redirect_to ( admin_procedure_groupe_instructeurs_path ( procedure ) ) }
2020-01-08 14:13:51 +01:00
end
2020-01-20 11:27:41 +01:00
context 'of a group with dossiers, that cannot be deleted' do
let! ( :dossier12 ) { create ( :dossier , procedure : procedure , state : Dossier . states . fetch ( :en_construction ) , groupe_instructeur : gi_1_2 ) }
2020-01-08 14:13:51 +01:00
before { delete_group gi_1_2 }
2020-01-20 11:27:41 +01:00
it { expect ( flash . alert ) . to be_present }
it { expect ( procedure . groupe_instructeurs . count ) . to eq ( 2 ) }
2020-07-07 12:03:32 +02:00
it { expect ( response ) . to redirect_to ( admin_procedure_groupe_instructeurs_path ( procedure ) ) }
2020-01-08 14:13:51 +01:00
end
end
end
2020-01-08 16:26:12 +01:00
describe '#reaffecter_dossiers' do
let! ( :gi_1_2 ) { procedure . groupe_instructeurs . create ( label : 'groupe instructeur 2' ) }
let! ( :gi_1_3 ) { procedure . groupe_instructeurs . create ( label : 'groupe instructeur 3' ) }
before do
get :reaffecter_dossiers ,
params : {
procedure_id : procedure . id ,
id : gi_1_2 . id
}
end
def reaffecter_url ( group )
2020-07-07 12:03:32 +02:00
reaffecter_admin_procedure_groupe_instructeur_path ( :id = > gi_1_2 ,
2020-01-08 16:26:12 +01:00
:target_group = > group )
end
it { expect ( response ) . to have_http_status ( :ok ) }
it { expect ( response . body ) . to include ( reaffecter_url ( procedure . defaut_groupe_instructeur ) ) }
it { expect ( response . body ) . not_to include ( reaffecter_url ( gi_1_2 ) ) }
it { expect ( response . body ) . to include ( reaffecter_url ( gi_1_3 ) ) }
end
describe '#reaffecter' do
let! ( :gi_1_2 ) { procedure . groupe_instructeurs . create ( label : 'groupe instructeur 2' ) }
2021-07-26 16:06:09 +02:00
let! ( :gi_1_3 ) { procedure . groupe_instructeurs . create ( label : 'groupe instructeur 3' ) }
2021-01-28 13:53:18 +01:00
let! ( :dossier12 ) { create ( :dossier , :en_construction , :with_individual , procedure : procedure , groupe_instructeur : gi_1_1 ) }
2021-07-26 16:06:09 +02:00
let! ( :instructeur ) { create ( :instructeur ) }
let! ( :bulk_message ) { BulkMessage . create ( dossier_count : 2 , dossier_state : " brouillon " , body : " hello " , sent_at : Time . zone . now , groupe_instructeurs : [ gi_1_1 , gi_1_3 ] , instructeur : instructeur ) }
2020-01-08 16:26:12 +01:00
describe 'when the new group is a group of the procedure' do
before do
post :reaffecter ,
params : {
procedure_id : procedure . id ,
id : gi_1_1 . id ,
target_group : gi_1_2 . id
}
dossier12 . reload
2021-07-26 16:06:09 +02:00
bulk_message . reload
2020-01-08 16:26:12 +01:00
end
2020-07-07 12:03:32 +02:00
it { expect ( response ) . to redirect_to ( admin_procedure_groupe_instructeurs_path ( procedure ) ) }
2020-01-08 16:26:12 +01:00
it { expect ( gi_1_2 . dossiers . last . id ) . to be ( dossier12 . id ) }
it { expect ( dossier12 . groupe_instructeur . id ) . to be ( gi_1_2 . id ) }
2021-12-16 17:07:49 +01:00
it { expect ( bulk_message . groupe_instructeurs ) . to contain_exactly ( gi_1_2 , gi_1_3 ) }
2020-01-08 16:26:12 +01:00
end
2020-01-20 11:27:41 +01:00
describe 'when the target group is not a possible group' do
subject {
2020-01-08 16:26:12 +01:00
post :reaffecter ,
params :
{
procedure_id : procedure . id ,
id : gi_1_1 . id ,
target_group : gi_2_2 . id
}
2020-01-20 11:27:41 +01:00
}
before do
2020-01-08 16:26:12 +01:00
dossier12 . reload
2021-07-26 16:06:09 +02:00
bulk_message . reload
2020-01-08 16:26:12 +01:00
end
2020-01-20 11:27:41 +01:00
it { expect { subject } . to raise_error ( ActiveRecord :: RecordNotFound ) }
2022-10-14 09:45:58 +02:00
it { expect ( bulk_message . groupe_instructeurs ) . to match_array ( [ gi_1_1 , gi_1_3 ] ) }
2020-01-08 16:26:12 +01:00
end
end
2019-10-23 20:54:59 +02:00
describe '#update' do
let ( :new_name ) { 'nouveau nom du groupe' }
2022-10-20 18:24:27 +02:00
let ( :closed_value ) { false }
2019-10-23 20:54:59 +02:00
before do
patch :update ,
params : {
procedure_id : procedure . id ,
id : gi_1_1 . id ,
2022-10-20 18:24:27 +02:00
groupe_instructeur : { label : new_name , closed : closed_value }
2019-10-23 20:54:59 +02:00
}
2022-06-20 16:14:27 +02:00
gi_1_1 . reload
2019-10-23 20:54:59 +02:00
end
2020-07-07 12:03:32 +02:00
it { expect ( response ) . to redirect_to ( admin_procedure_groupe_instructeur_path ( procedure , gi_1_1 ) ) }
2022-06-20 16:14:27 +02:00
it { expect ( gi_1_1 . label ) . to eq ( new_name ) }
2022-10-20 18:24:27 +02:00
it { expect ( gi_1_1 . closed ) . to eq ( false ) }
2019-10-23 20:54:59 +02:00
it { expect ( flash . notice ) . to be_present }
2022-10-20 18:24:27 +02:00
context 'when we try do disable the only groupe instructeur' do
let ( :closed_value ) { true }
it { expect ( response ) . to render_template ( :show ) }
it { expect ( gi_1_1 . label ) . not_to eq ( new_name ) }
it { expect ( gi_1_1 . closed ) . to eq ( false ) }
2022-12-01 18:14:08 +01:00
it { expect ( flash . alert ) . to eq ( [ 'Il doit y avoir au moins un groupe instructeur actif sur chaque démarche' ] ) }
2022-10-20 18:24:27 +02:00
end
2019-10-23 20:54:59 +02:00
context 'when the name is already taken' do
let! ( :gi_1_2 ) { procedure . groupe_instructeurs . create ( label : 'groupe instructeur 2' ) }
let ( :new_name ) { gi_1_2 . label }
2022-06-20 16:14:27 +02:00
it { expect ( gi_1_1 . label ) . not_to eq ( new_name ) }
2022-12-01 18:14:08 +01:00
it { expect ( flash . alert ) . to eq ( [ 'Le libellé est déjà utilisé(e)' ] ) }
2019-10-23 20:54:59 +02:00
end
end
2019-10-10 19:36:56 +02:00
2020-06-12 18:16:07 +02:00
describe '#add_instructeur_procedure_non_routee' do
2022-07-21 18:56:01 +02:00
let ( :procedure ) { create :procedure }
let! ( :groupe_instructeur ) { create ( :administrateurs_procedure , procedure : procedure , administrateur : admin , manager : manager ) }
2021-02-11 15:36:11 +01:00
let ( :emails ) { [ 'instructeur_3@ministere_a.gouv.fr' , 'instructeur_4@ministere_b.gouv.fr' ] . to_json }
2020-06-12 18:16:07 +02:00
subject { post :add_instructeur , params : { emails : emails , procedure_id : procedure . id , id : gi_1_1 . id } }
2022-07-21 18:56:01 +02:00
let ( :manager ) { false }
2020-06-12 18:16:07 +02:00
context 'when all emails are valid' do
2021-02-11 15:36:11 +01:00
let ( :emails ) { [ 'test@b.gouv.fr' , 'test2@b.gouv.fr' ] . to_json }
2020-06-12 18:16:07 +02:00
it { expect ( response . status ) . to eq ( 200 ) }
it { expect ( subject . request . flash [ :alert ] ) . to be_nil }
it { expect ( subject . request . flash [ :notice ] ) . to be_present }
2021-09-15 12:55:54 +02:00
it { expect ( subject ) . to redirect_to admin_procedure_groupe_instructeurs_path ( procedure ) }
2020-06-12 18:16:07 +02:00
end
context 'when there is at least one bad email' do
2021-02-11 15:36:11 +01:00
let ( :emails ) { [ 'badmail' , 'instructeur2@gmail.com' ] . to_json }
2020-06-12 18:16:07 +02:00
it { expect ( response . status ) . to eq ( 200 ) }
it { expect ( subject . request . flash [ :alert ] ) . to be_present }
it { expect ( subject . request . flash [ :notice ] ) . to be_present }
2021-09-15 12:55:54 +02:00
it { expect ( subject ) . to redirect_to admin_procedure_groupe_instructeurs_path ( procedure ) }
2020-06-12 18:16:07 +02:00
end
context 'when the admin wants to assign an instructor who is already assigned on this procedure' do
2021-02-11 15:36:11 +01:00
let ( :emails ) { [ 'instructeur_1@ministere_a.gouv.fr' ] . to_json }
2020-06-12 18:16:07 +02:00
it { expect ( subject . request . flash [ :alert ] ) . to be_present }
2021-09-15 12:55:54 +02:00
it { expect ( subject ) . to redirect_to admin_procedure_groupe_instructeurs_path ( procedure ) }
2020-06-12 18:16:07 +02:00
end
2022-07-21 18:56:01 +02:00
context 'when signed in admin comes from manager' do
let ( :manager ) { true }
it { is_expected . to have_http_status ( :forbidden ) }
end
2020-06-12 18:16:07 +02:00
end
2019-10-10 19:36:56 +02:00
describe '#add_instructeur' do
let! ( :instructeur ) { create ( :instructeur ) }
2020-06-12 18:16:07 +02:00
let ( :gi_1_2 ) { procedure . groupe_instructeurs . create ( label : 'groupe instructeur 2' ) }
2022-07-21 18:56:01 +02:00
let ( :do_request ) do
2019-10-10 19:36:56 +02:00
post :add_instructeur ,
params : {
procedure_id : procedure . id ,
2020-06-12 18:16:07 +02:00
id : gi_1_2 . id ,
2021-02-11 15:36:11 +01:00
emails : new_instructeur_emails . to_json
2019-10-10 19:36:56 +02:00
}
end
2022-07-21 18:56:01 +02:00
2023-02-06 16:11:08 +01:00
before { gi_1_2 . instructeurs << instructeur }
2019-10-10 19:36:56 +02:00
2019-11-04 14:49:53 +01:00
context 'of a news instructeurs' do
let ( :new_instructeur_emails ) { [ 'new_i1@mail.com' , 'new_i2@mail.com' ] }
2023-02-17 15:24:12 +01:00
before do
allow ( GroupeInstructeurMailer ) . to receive ( :notify_added_instructeurs )
. and_return ( double ( deliver_later : true ) )
do_request
end
2020-06-12 18:16:07 +02:00
it { expect ( gi_1_2 . instructeurs . pluck ( :email ) ) . to include ( * new_instructeur_emails ) }
2019-10-10 19:36:56 +02:00
it { expect ( flash . notice ) . to be_present }
2020-07-07 12:03:32 +02:00
it { expect ( response ) . to redirect_to ( admin_procedure_groupe_instructeur_path ( procedure , gi_1_2 ) ) }
2022-11-04 10:10:57 +01:00
it { expect ( procedure . routing_enabled? ) . to be_truthy }
2023-02-17 15:24:12 +01:00
it " calls GroupeInstructeurMailer with the right params " do
expect ( GroupeInstructeurMailer ) . to have_received ( :notify_added_instructeurs ) . with (
gi_1_2 ,
gi_1_2 . instructeurs . last ( 2 ) ,
admin . email
)
end
2019-10-10 19:36:56 +02:00
end
context 'of an instructeur already in the group' do
2019-11-04 14:49:53 +01:00
let ( :new_instructeur_emails ) { [ instructeur . email ] }
2022-07-21 18:56:01 +02:00
before { do_request }
2020-07-07 12:03:32 +02:00
it { expect ( response ) . to redirect_to ( admin_procedure_groupe_instructeur_path ( procedure , gi_1_2 ) ) }
2019-11-04 14:49:53 +01:00
end
context 'of badly formed email' do
let ( :new_instructeur_emails ) { [ 'badly_formed_email' ] }
2022-07-21 18:56:01 +02:00
before { do_request }
2019-10-10 19:36:56 +02:00
it { expect ( flash . alert ) . to be_present }
2020-07-07 12:03:32 +02:00
it { expect ( response ) . to redirect_to ( admin_procedure_groupe_instructeur_path ( procedure , gi_1_2 ) ) }
2019-10-10 19:36:56 +02:00
end
2019-11-27 10:06:07 +01:00
context 'of an empty string' do
2021-02-11 15:36:11 +01:00
let ( :new_instructeur_emails ) { [ '' ] }
2022-07-21 18:56:01 +02:00
before { do_request }
2020-07-07 12:03:32 +02:00
it { expect ( response ) . to redirect_to ( admin_procedure_groupe_instructeur_path ( procedure , gi_1_2 ) ) }
2019-11-27 10:06:07 +01:00
end
2022-07-21 18:56:01 +02:00
context 'when connected as an administrateur from manager' do
let ( :new_instructeur_emails ) { [ instructeur . email ] }
before do
admin . administrateurs_procedures . update_all ( manager : true )
do_request
end
it { expect ( response ) . to have_http_status ( :forbidden ) }
end
2019-10-10 19:36:56 +02:00
end
2019-10-09 18:23:29 +02:00
describe '#remove_instructeur' do
let! ( :instructeur ) { create ( :instructeur ) }
before { gi_1_1 . instructeurs << admin . instructeur << instructeur }
2019-10-25 10:19:58 +02:00
def remove_instructeur ( instructeur )
2019-10-09 18:23:29 +02:00
delete :remove_instructeur ,
params : {
procedure_id : procedure . id ,
id : gi_1_1 . id ,
2019-10-25 10:19:58 +02:00
instructeur : { id : instructeur . id }
2019-10-09 18:23:29 +02:00
}
end
context 'when there are many instructeurs' do
2023-02-14 11:17:52 +01:00
before do
2023-02-15 11:57:35 +01:00
allow ( GroupeInstructeurMailer ) . to receive ( :notify_removed_instructeur )
2023-02-14 11:17:52 +01:00
. and_return ( double ( deliver_later : true ) )
remove_instructeur ( admin . instructeur )
end
2019-10-09 18:23:29 +02:00
it { expect ( gi_1_1 . instructeurs ) . to include ( instructeur ) }
it { expect ( gi_1_1 . reload . instructeurs . count ) . to eq ( 1 ) }
2020-07-07 12:03:32 +02:00
it { expect ( response ) . to redirect_to ( admin_procedure_groupe_instructeur_path ( procedure , gi_1_1 ) ) }
2023-02-14 11:17:52 +01:00
it " calls GroupeInstructeurMailer with the right groupe and instructeur " do
2023-02-15 11:57:35 +01:00
expect ( GroupeInstructeurMailer ) . to have_received ( :notify_removed_instructeur ) . with (
2023-02-14 11:17:52 +01:00
gi_1_1 ,
2023-02-15 11:57:35 +01:00
admin . instructeur ,
2023-02-14 11:17:52 +01:00
admin . email
)
end
2019-10-09 18:23:29 +02:00
end
context 'when there is only one instructeur' do
before do
2019-10-25 10:19:58 +02:00
remove_instructeur ( admin . instructeur )
remove_instructeur ( instructeur )
2019-10-09 18:23:29 +02:00
end
it { expect ( gi_1_1 . instructeurs ) . to include ( instructeur ) }
it { expect ( gi_1_1 . instructeurs . count ) . to eq ( 1 ) }
it { expect ( flash . alert ) . to eq ( 'Suppression impossible : il doit y avoir au moins un instructeur dans le groupe' ) }
2020-07-07 12:03:32 +02:00
it { expect ( response ) . to redirect_to ( admin_procedure_groupe_instructeur_path ( procedure , gi_1_1 ) ) }
2019-10-09 18:23:29 +02:00
end
end
2019-10-17 10:57:58 +02:00
2020-06-12 18:16:07 +02:00
describe '#remove_instructeur_procedure_non_routee' do
let ( :procedure ) { create :procedure , administrateur : admin , instructeurs : [ instructeur_assigned_1 , instructeur_assigned_2 ] }
2022-03-24 12:38:32 +01:00
let! ( :instructeur_assigned_1 ) { create :instructeur , email : 'instructeur_1@ministere-a.gouv.fr' , administrateurs : [ admin ] }
let! ( :instructeur_assigned_2 ) { create :instructeur , email : 'instructeur_2@ministere-b.gouv.fr' , administrateurs : [ admin ] }
let! ( :instructeur_assigned_3 ) { create :instructeur , email : 'instructeur_3@ministere-a.gouv.fr' , administrateurs : [ admin ] }
2020-06-12 18:16:07 +02:00
subject! { get :show , params : { procedure_id : procedure . id , id : gi_1_1 . id } }
it 'sets the assigned instructeurs' do
expect ( assigns ( :instructeurs ) ) . to match_array ( [ instructeur_assigned_1 , instructeur_assigned_2 ] )
end
context 'when the instructor is assigned to the procedure' do
subject { delete :remove_instructeur , params : { instructeur : { id : instructeur_assigned_1 . id } , procedure_id : procedure . id , id : gi_1_1 . id } }
it { expect ( subject . request . flash [ :notice ] ) . to be_present }
it { expect ( subject . request . flash [ :alert ] ) . to be_nil }
it { expect ( response . status ) . to eq ( 302 ) }
2021-09-15 12:55:54 +02:00
it { expect ( subject ) . to redirect_to admin_procedure_groupe_instructeurs_path ( procedure ) }
2020-06-12 18:16:07 +02:00
end
context 'when the instructor is not assigned to the procedure' do
subject { delete :remove_instructeur , params : { instructeur : { id : instructeur_assigned_3 . id } , procedure_id : procedure . id , id : gi_1_1 . id } }
it { expect ( subject . request . flash [ :alert ] ) . to be_present }
it { expect ( subject . request . flash [ :notice ] ) . to be_nil }
it { expect ( response . status ) . to eq ( 302 ) }
2021-09-15 12:55:54 +02:00
it { expect ( subject ) . to redirect_to admin_procedure_groupe_instructeurs_path ( procedure ) }
2020-06-12 18:16:07 +02:00
end
end
2021-06-09 17:52:29 +02:00
describe '#add_groupe_instructeurs_via_csv_file' do
subject do
post :import , params : { procedure_id : procedure . id , group_csv_file : csv_file }
end
2021-07-15 16:16:59 +02:00
context 'when the csv file is less than 1 mo and content type text/csv' do
2021-06-09 17:52:29 +02:00
let ( :csv_file ) { fixture_file_upload ( 'spec/fixtures/files/groupe-instructeur.csv' , 'text/csv' ) }
before { subject }
it { expect ( response . status ) . to eq ( 302 ) }
2022-11-08 12:42:16 +01:00
it { expect ( procedure . groupe_instructeurs . first . label ) . to eq ( " Afrique " ) }
2021-06-09 17:52:29 +02:00
it { expect ( flash . alert ) . to be_present }
it { expect ( flash . alert ) . to eq ( " Import terminé. Cependant les emails suivants ne sont pas pris en compte: kara " ) }
end
2021-07-15 16:16:59 +02:00
context 'when the file content type is application/vnd.ms-excel' do
let ( :csv_file ) { fixture_file_upload ( 'spec/fixtures/files/groupe_avec_caracteres_speciaux.csv' , " application/vnd.ms-excel " ) }
before { subject }
it { expect ( flash . notice ) . to be_present }
it { expect ( flash . notice ) . to eq ( " La liste des instructeurs a été importée avec succès " ) }
end
2021-07-12 14:00:26 +02:00
context 'when the content of csv contains special characters' do
let ( :csv_file ) { fixture_file_upload ( 'spec/fixtures/files/groupe_avec_caracteres_speciaux.csv' , 'text/csv' ) }
before { subject }
2022-11-08 12:42:16 +01:00
it { expect ( procedure . groupe_instructeurs . pluck ( :label ) ) . to match_array ( [ " Auvergne-Rhône-Alpes " , " Vendée " , " défaut " ] ) }
2021-07-12 14:00:26 +02:00
it { expect ( flash . notice ) . to be_present }
it { expect ( flash . notice ) . to eq ( " La liste des instructeurs a été importée avec succès " ) }
end
2021-06-09 17:52:29 +02:00
context 'when the csv file length is more than 1 mo' do
let ( :csv_file ) { fixture_file_upload ( 'spec/fixtures/files/groupe-instructeur.csv' , 'text/csv' ) }
before do
allow_any_instance_of ( ActionDispatch :: Http :: UploadedFile ) . to receive ( :size ) . and_return ( 3 . megabytes )
subject
end
it { expect ( flash . alert ) . to be_present }
2021-08-20 20:03:24 +02:00
it { expect ( flash . alert ) . to eq ( " Importation impossible : le poids du fichier est supérieur à 1 Mo " ) }
2021-06-09 17:52:29 +02:00
end
2021-07-15 16:16:59 +02:00
context 'when the file content type is not accepted' do
2021-06-09 17:52:29 +02:00
let ( :csv_file ) { fixture_file_upload ( 'spec/fixtures/files/french-flag.gif' , 'image/gif' ) }
before { subject }
it { expect ( flash . alert ) . to be_present }
it { expect ( flash . alert ) . to eq ( " Importation impossible : veuillez importer un fichier CSV " ) }
end
2021-06-22 14:30:16 +02:00
context 'when the headers are wrong' do
let ( :csv_file ) { fixture_file_upload ( 'spec/fixtures/files/invalid-group-file.csv' , 'text/csv' ) }
before { subject }
it { expect ( flash . alert ) . to be_present }
2021-10-05 10:57:09 +02:00
it { expect ( flash . alert ) . to eq ( " Importation impossible, veuillez importer un csv <a href= \" /csv/ #{ I18n . locale } /import-groupe-test.csv \" >suivant ce modèle</a> " ) }
2021-06-22 14:30:16 +02:00
end
2023-02-09 09:44:06 +01:00
context 'when procedure is closed' do
let ( :procedure ) { create ( :procedure , :closed , administrateurs : [ admin ] ) }
let ( :csv_file ) { fixture_file_upload ( 'spec/fixtures/files/groupe-instructeur.csv' , 'text/csv' ) }
before { subject }
it { expect ( procedure . groupe_instructeurs . first . label ) . to eq ( " Afrique " ) }
it { expect ( flash . alert ) . to eq ( " Import terminé. Cependant les emails suivants ne sont pas pris en compte: kara " ) }
end
2021-06-09 17:52:29 +02:00
end
2021-10-04 18:18:54 +02:00
describe '#export_groupe_instructeurs' do
let ( :procedure ) { create ( :procedure , :published ) }
let ( :gi_1_2 ) { procedure . groupe_instructeurs . create ( label : 'groupe instructeur 1 2' ) }
2022-03-24 12:38:32 +01:00
let ( :instructeur_assigned_1 ) { create :instructeur , email : 'instructeur_1@ministere-a.gouv.fr' , administrateurs : [ admin ] }
let ( :instructeur_assigned_2 ) { create :instructeur , email : 'instructeur_2@ministere-b.gouv.fr' , administrateurs : [ admin ] }
2021-10-04 18:18:54 +02:00
subject do
get :export_groupe_instructeurs , params : { procedure_id : procedure . id , format : :csv }
end
before do
procedure . administrateurs << admin
gi_1_2 . instructeurs << [ instructeur_assigned_1 , instructeur_assigned_2 ]
end
it 'generates a CSV file containing the instructeurs and groups' do
expect ( subject . status ) . to eq ( 200 )
expect ( subject . stream . body . split ( " \n " ) . size ) . to eq ( 3 )
expect ( subject . stream . body ) . to include ( " groupe instructeur 1 2 " )
expect ( subject . stream . body ) . to include ( instructeur_assigned_1 . email )
expect ( subject . stream . body ) . to include ( instructeur_assigned_2 . email )
expect ( subject . header [ " Content-Disposition " ] ) . to include ( " #{ procedure . id } -groupe-instructeurs- #{ Date . today } .csv " )
end
end
2019-10-17 10:57:58 +02:00
describe '#update_routing_criteria_name' do
before do
patch :update_routing_criteria_name ,
params : {
procedure_id : procedure . id ,
procedure : { routing_criteria_name : 'new name !' }
}
end
it { expect ( procedure . reload . routing_criteria_name ) . to eq ( 'new name !' ) }
end
2019-10-17 15:13:50 +02:00
end