diff --git a/spec/controllers/administrateurs/exports_controller_spec.rb b/spec/controllers/administrateurs/exports_controller_spec.rb
index 43751a0eb..39ee2815a 100644
--- a/spec/controllers/administrateurs/exports_controller_spec.rb
+++ b/spec/controllers/administrateurs/exports_controller_spec.rb
@@ -19,11 +19,10 @@ describe Administrateurs::ExportsController, type: :controller do
context 'when the export is does not exist' do
it 'displays an notice' do
- is_expected.to redirect_to(admin_procedure_archives_url(procedure))
+ expect { subject }.to change(Export, :count).by(1)
+ expect(subject).to redirect_to(admin_procedure_archives_url(procedure))
expect(flash.notice).to be_present
end
-
- it { expect { subject }.to change(Export, :count).by(1) }
end
context 'when the export is not ready' do
diff --git a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb
index d020c6b3f..2d3cb0174 100644
--- a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb
+++ b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb
@@ -52,9 +52,8 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
let!(:instructeur_not_assigned_2) { create :instructeur, email: 'instructeur_4@ministere-b.gouv.fr', administrateurs: [admin] }
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(response.status).to eq(200)
expect(assigns(:instructeurs)).to match_array([instructeur_assigned_1, instructeur_assigned_2])
expect(assigns(:available_instructeur_emails)).to match_array(['instructeur_3@ministere-a.gouv.fr', 'instructeur_4@ministere-b.gouv.fr'])
end
@@ -104,17 +103,21 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
context 'with a valid name' do
let(:label) { "nouveau_groupe" }
- it { expect(flash.notice).to be_present }
- it { expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, procedure.groupe_instructeurs.last)) }
- it { expect(procedure.groupe_instructeurs.count).to eq(3) }
+ it do
+ expect(flash.notice).to be_present
+ expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, procedure.groupe_instructeurs.last))
+ expect(procedure.groupe_instructeurs.count).to eq(3)
+ end
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(2) }
- it { expect(flash.alert).to be_present }
+ it do
+ expect(response).to render_template(:index)
+ expect(procedure.groupe_instructeurs.count).to eq(2)
+ expect(flash.alert).to be_present
+ end
end
end
@@ -132,28 +135,35 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
delete_group gi_1_1
end
- it { expect(flash.alert).to be_present }
- it { expect(flash.alert).to eq "Suppression impossible : le groupe « défaut » est le groupe par défaut." }
- it { expect(response).to redirect_to(admin_procedure_groupe_instructeurs_path(procedure)) }
- it { expect(procedure.groupe_instructeurs.count).to eq(2) }
+ it 'verifies flash alerts and redirections' do
+ expect(flash.alert).to be_present
+ expect(flash.alert).to eq "Suppression impossible : le groupe « défaut » est le groupe par défaut."
+ expect(response).to redirect_to(admin_procedure_groupe_instructeurs_path(procedure))
+ expect(procedure.groupe_instructeurs.count).to eq(2)
+ end
end
context 'with many groups' do
context 'of a group that can be deleted' do
before { delete_group gi_1_2 }
- it { expect(flash.notice).to eq "le groupe « deuxième groupe » a été supprimé et le routage a été désactivé." }
- it { expect(procedure.groupe_instructeurs.count).to eq(1) }
- it { expect(procedure.reload.routing_enabled?).to eq(false) }
- it { expect(response).to redirect_to(admin_procedure_groupe_instructeurs_path(procedure)) }
+
+ it 'deletes the group and updates routing' do
+ expect(flash.notice).to eq "le groupe « deuxième groupe » a été supprimé et le routage a été désactivé."
+ expect(procedure.groupe_instructeurs.count).to eq(1)
+ expect(procedure.reload.routing_enabled?).to eq(false)
+ expect(response).to redirect_to(admin_procedure_groupe_instructeurs_path(procedure))
+ end
end
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) }
before { delete_group gi_1_2 }
- it { expect(flash.alert).to be_present }
- it { expect(procedure.groupe_instructeurs.count).to eq(2) }
- it { expect(response).to redirect_to(admin_procedure_groupe_instructeurs_path(procedure)) }
+ it 'attempts to delete a group with active dossiers and fails' do
+ expect(flash.alert).to be_present
+ expect(procedure.groupe_instructeurs.count).to eq(2)
+ expect(response).to redirect_to(admin_procedure_groupe_instructeurs_path(procedure))
+ end
end
end
end
@@ -173,10 +183,12 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
: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)) }
+ it 'checks response and body content for specific conditions' do
+ expect(response).to have_http_status(:ok)
+ expect(response.body).to include(reaffecter_url(procedure.defaut_groupe_instructeur))
+ expect(response.body).not_to include(reaffecter_url(gi_1_2))
+ expect(response.body).to include(reaffecter_url(gi_1_3))
+ end
end
describe '#reaffecter' do
@@ -328,18 +340,20 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
subject { post :add_instructeur, params: { emails: emails, procedure_id: procedure_non_routee.id, id: procedure_non_routee.defaut_groupe_instructeur.id } }
context 'when all emails are valid' do
let(:emails) { ['test@b.gouv.fr', 'test2@b.gouv.fr'].to_json }
- 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 }
- it { expect(subject).to redirect_to admin_procedure_groupe_instructeurs_path(procedure_non_routee) }
+ it do
+ expect(subject).to redirect_to admin_procedure_groupe_instructeurs_path(procedure_non_routee)
+ expect(subject.request.flash[:alert]).to be_nil
+ expect(subject.request.flash[:notice]).to be_present
+ end
end
context 'when there is at least one bad email' do
let(:emails) { ['badmail', 'instructeur2@gmail.com'].to_json }
- 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 }
- it { expect(subject).to redirect_to admin_procedure_groupe_instructeurs_path(procedure_non_routee) }
+ it do
+ expect(subject).to redirect_to admin_procedure_groupe_instructeurs_path(procedure_non_routee)
+ expect(subject.request.flash[:alert]).to be_present
+ expect(subject.request.flash[:notice]).to be_present
+ end
end
context 'when the admin wants to assign an instructor who is already assigned on this procedure' do
@@ -375,11 +389,11 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
.and_return(double(deliver_later: true))
do_request
end
- it { expect(gi_1_2.instructeurs.pluck(:email)).to include(*new_instructeur_emails) }
- it { expect(flash.notice).to be_present }
- it { expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_2)) }
- it { expect(procedure.routing_enabled?).to be_truthy }
- it "calls GroupeInstructeurMailer with the right params" do
+ it 'validates changes and responses' do
+ expect(gi_1_2.instructeurs.pluck(:email)).to include(*new_instructeur_emails)
+ expect(flash.notice).to be_present
+ expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_2))
+ expect(procedure.routing_enabled?).to be_truthy
expect(GroupeInstructeurMailer).to have_received(:notify_added_instructeurs).with(
gi_1_2,
gi_1_2.instructeurs.last(2),
@@ -397,8 +411,10 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
context 'of badly formed email' do
let(:new_instructeur_emails) { ['badly_formed_email'] }
before { do_request }
- it { expect(flash.alert).to be_present }
- it { expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_2)) }
+ it do
+ expect(flash.alert).to be_present
+ expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_2))
+ end
end
context 'of an empty string' do
@@ -442,10 +458,10 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
remove_instructeur(admin.instructeur)
end
- it { expect(gi_1_1.instructeurs).to include(instructeur) }
- it { expect(gi_1_1.reload.instructeurs.count).to eq(1) }
- it { expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_1)) }
- it "calls GroupeInstructeurMailer with the right groupe and instructeur" do
+ it 'verifies instructeurs and sends notifications' do
+ expect(gi_1_1.instructeurs).to include(instructeur)
+ expect(gi_1_1.reload.instructeurs.count).to eq(1)
+ expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_1))
expect(GroupeInstructeurMailer).to have_received(:notify_removed_instructeur).with(
gi_1_1,
admin.instructeur,
@@ -460,10 +476,12 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
remove_instructeur(instructeur)
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') }
- it { expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_1)) }
+ it 'validates remaining instructeur and checks alert message' do
+ expect(gi_1_1.instructeurs).to include(instructeur)
+ expect(gi_1_1.instructeurs.count).to eq(1)
+ expect(flash.alert).to eq('Suppression impossible : il doit y avoir au moins un instructeur dans le groupe')
+ expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_1))
+ end
end
end
@@ -478,19 +496,37 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
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_non_routee.id, id: procedure_non_routee.defaut_groupe_instructeur.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) }
- it { expect(subject).to redirect_to admin_procedure_groupe_instructeurs_path(procedure_non_routee) }
+ subject do
+ delete :remove_instructeur, params: {
+ instructeur: { id: instructeur_assigned_1.id },
+ procedure_id: procedure_non_routee.id,
+ id: procedure_non_routee.defaut_groupe_instructeur.id
+ }
+ end
+
+ it 'processes the removal of an assigned instructeur and checks response' do
+ expect(subject.request.flash[:notice]).to be_present
+ expect(subject.request.flash[:alert]).to be_nil
+ expect(response.status).to eq(302)
+ expect(subject).to redirect_to admin_procedure_groupe_instructeurs_path(procedure_non_routee)
+ end
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_non_routee.id, id: procedure_non_routee.defaut_groupe_instructeur.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) }
- it { expect(subject).to redirect_to admin_procedure_groupe_instructeurs_path(procedure_non_routee) }
+ subject do
+ delete :remove_instructeur, params: {
+ instructeur: { id: instructeur_assigned_3.id },
+ procedure_id: procedure_non_routee.id,
+ id: procedure_non_routee.defaut_groupe_instructeur.id
+ }
+ end
+
+ it 'attempts to remove an unassigned instructeur and validates alerts' do
+ expect(subject.request.flash[:alert]).to be_present
+ expect(subject.request.flash[:notice]).to be_nil
+ expect(response.status).to eq(302)
+ expect(subject).to redirect_to admin_procedure_groupe_instructeurs_path(procedure_non_routee)
+ end
end
end
@@ -505,10 +541,12 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
before { subject }
- it { expect(response.status).to eq(302) }
- it { expect(procedure.groupe_instructeurs.first.label).to eq("Afrique") }
- 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") }
+ it 'checks multiple response aspects after CSV upload' do
+ expect(response.status).to eq(302)
+ expect(procedure.groupe_instructeurs.first.label).to eq("Afrique")
+ expect(flash.alert).to be_present
+ expect(flash.alert).to eq("Import terminé. Cependant les emails suivants ne sont pas pris en compte: kara")
+ end
end
context 'when the csv file has only one column' do
@@ -516,10 +554,12 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
before { subject }
- it { expect { subject }.not_to raise_error }
- it { expect(response.status).to eq(302) }
- it { expect(flash.alert).to be_present }
- it { expect(flash.alert).to eq("Importation impossible, veuillez importer un csv suivant ce modèle pour une procédure sans routage ou celui-ci pour une procédure routée") }
+ it 'handles one column CSV file gracefully' do
+ expect { subject }.not_to raise_error
+ expect(response.status).to eq(302)
+ expect(flash.alert).to be_present
+ expect(flash.alert).to eq("Importation impossible, veuillez importer un csv suivant ce modèle pour une procédure sans routage ou celui-ci pour une procédure routée")
+ end
end
context 'when the file content type is application/vnd.ms-excel' do
@@ -527,8 +567,10 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
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") }
+ it 'imports excel file with success notice' do
+ expect(flash.notice).to be_present
+ expect(flash.notice).to eq("La liste des instructeurs a été importée avec succès")
+ end
end
context 'when the content of csv contains special characters' do
@@ -540,10 +582,12 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
subject
end
- it { expect(procedure.groupe_instructeurs.pluck(:label)).to match_array(["Auvergne-Rhône-Alpes", "Vendée", "défaut", "deuxième groupe"]) }
- it { expect(flash.notice).to be_present }
- it { expect(flash.notice).to eq("La liste des instructeurs a été importée avec succès") }
- it { expect(GroupeInstructeurMailer).to have_received(:notify_added_instructeurs).twice }
+ it 'processes CSV with special characters and sends notifications' do
+ expect(procedure.groupe_instructeurs.pluck(:label)).to match_array(["Auvergne-Rhône-Alpes", "Vendée", "défaut", "deuxième groupe"])
+ expect(flash.notice).to be_present
+ expect(flash.notice).to eq("La liste des instructeurs a été importée avec succès")
+ expect(GroupeInstructeurMailer).to have_received(:notify_added_instructeurs).twice
+ end
end
context 'when the csv file length is more than 1 mo' do
@@ -554,8 +598,10 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
subject
end
- it { expect(flash.alert).to be_present }
- it { expect(flash.alert).to eq("Importation impossible : le poids du fichier est supérieur à 1 Mo") }
+ it 'verifies the file size limitation' do
+ expect(flash.alert).to be_present
+ expect(flash.alert).to eq("Importation impossible : le poids du fichier est supérieur à 1 Mo")
+ end
end
context 'when the file content type is not accepted' do
@@ -563,8 +609,10 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
before { subject }
- it { expect(flash.alert).to be_present }
- it { expect(flash.alert).to eq("Importation impossible : veuillez importer un fichier CSV") }
+ it 'checks file format acceptance' do
+ expect(flash.alert).to be_present
+ expect(flash.alert).to eq("Importation impossible : veuillez importer un fichier CSV")
+ end
end
context 'when the headers are wrong' do
@@ -572,8 +620,10 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
before { subject }
- it { expect(flash.alert).to be_present }
- it { expect(flash.alert).to eq("Importation impossible, veuillez importer un csv suivant ce modèle pour une procédure sans routage ou celui-ci pour une procédure routée") }
+ it 'validates the header format of CSV' do
+ expect(flash.alert).to be_present
+ expect(flash.alert).to eq("Importation impossible, veuillez importer un csv suivant ce modèle pour une procédure sans routage ou celui-ci pour une procédure routée")
+ end
end
context 'when procedure is closed' do
@@ -582,8 +632,10 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
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") }
+ it 'handles imports with closed procedures' do
+ expect(procedure.groupe_instructeurs.first.label).to eq("Afrique")
+ expect(flash.alert).to eq("Import terminé. Cependant les emails suivants ne sont pas pris en compte: kara")
+ end
end
context 'when emails are invalid' do
@@ -596,8 +648,10 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
subject
end
- it { expect(flash.alert).to include("Import terminé. Cependant les emails suivants ne sont pas pris en compte:") }
- it { expect(GroupeInstructeurMailer).not_to have_received(:notify_added_instructeurs) }
+ it 'manages CSV with invalid emails and checks for mailer action' do
+ expect(flash.alert).to include("Import terminé. Cependant les emails suivants ne sont pas pris en compte:")
+ expect(GroupeInstructeurMailer).not_to have_received(:notify_added_instructeurs)
+ end
end
end
@@ -617,11 +671,11 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
subject
end
- it { expect(response.status).to eq(302) }
- it { expect(procedure_non_routee.instructeurs.pluck(:email)).to match_array(["kara@beta-gouv.fr", "philippe@mail.com", "lisa@gouv.fr"]) }
- 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: eric") }
- it "calls GroupeInstructeurMailer" do
+ it 'verifies response status, updates instructors, and sends alerts with email issues' do
+ expect(response.status).to eq(302)
+ expect(procedure_non_routee.instructeurs.pluck(:email)).to match_array(["kara@beta-gouv.fr", "philippe@mail.com", "lisa@gouv.fr"])
+ expect(flash.alert).to be_present
+ expect(flash.alert).to eq("Import terminé. Cependant les emails suivants ne sont pas pris en compte: eric")
expect(GroupeInstructeurMailer).to have_received(:notify_added_instructeurs).with(
procedure_non_routee.defaut_groupe_instructeur,
any_args,
@@ -635,19 +689,24 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
before { subject }
- it { expect(response.status).to eq(302) }
- 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") }
- it { expect(procedure_non_routee.reload.routing_enabled?).to be_truthy }
+ it 'confirms multiple column CSV import, response, and routing changes' do
+ expect(response.status).to eq(302)
+ expect(flash.alert).to be_present
+ expect(flash.alert).to eq("Import terminé. Cependant les emails suivants ne sont pas pris en compte: kara")
+ expect(procedure_non_routee.reload.routing_enabled?).to be_truthy
+ end
end
context 'when the file content type is application/vnd.ms-excel' do
let(:csv_file) { fixture_file_upload('spec/fixtures/files/valid-instructeurs-file.csv', "application/vnd.ms-excel") }
before { subject }
- it { expect(procedure_non_routee.instructeurs.pluck(:email)).to match_array(["kara@beta-gouv.fr", "philippe@mail.com", "lisa@gouv.fr"]) }
- it { expect(flash.notice).to be_present }
- it { expect(flash.notice).to eq("La liste des instructeurs a été importée avec succès") }
+
+ it 'handles excel file upload and verifies imported instructor emails' do
+ expect(procedure_non_routee.instructeurs.pluck(:email)).to match_array(["kara@beta-gouv.fr", "philippe@mail.com", "lisa@gouv.fr"])
+ expect(flash.notice).to be_present
+ expect(flash.notice).to eq("La liste des instructeurs a été importée avec succès")
+ end
end
context 'when the csv file length is more than 1 mo' do
@@ -658,8 +717,10 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
subject
end
- it { expect(flash.alert).to be_present }
- it { expect(flash.alert).to eq("Importation impossible : le poids du fichier est supérieur à 1 Mo") }
+ it 'checks for file size limit and displays appropriate flash alert' do
+ expect(flash.alert).to be_present
+ expect(flash.alert).to eq("Importation impossible : le poids du fichier est supérieur à 1 Mo")
+ end
end
context 'when the file content type is not accepted' do
@@ -667,8 +728,10 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
before { subject }
- it { expect(flash.alert).to be_present }
- it { expect(flash.alert).to eq("Importation impossible : veuillez importer un fichier CSV") }
+ it 'validates file format and displays a flash alert' do
+ expect(flash.alert).to be_present
+ expect(flash.alert).to eq("Importation impossible : veuillez importer un fichier CSV")
+ end
end
context 'when emails are invalid' do
@@ -680,8 +743,10 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
subject
end
- it { expect(flash.alert).to include("Import terminé. Cependant les emails suivants ne sont pas pris en compte:") }
- it { expect(GroupeInstructeurMailer).not_to have_received(:notify_added_instructeurs) }
+ it 'verifies email validity in CSV imports and checks for mailer not being called' do
+ expect(flash.alert).to include("Import terminé. Cependant les emails suivants ne sont pas pris en compte:")
+ expect(GroupeInstructeurMailer).not_to have_received(:notify_added_instructeurs)
+ end
end
end
end
@@ -848,7 +913,9 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
}
}
- it { expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_1)) }
- it { expect(gi_1_1.signature).to be_attached }
+ it do
+ expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_1))
+ expect(gi_1_1.signature).to be_attached
+ end
end
end
diff --git a/spec/controllers/administrateurs/procedures_controller_spec.rb b/spec/controllers/administrateurs/procedures_controller_spec.rb
index afeabd712..d5198d952 100644
--- a/spec/controllers/administrateurs/procedures_controller_spec.rb
+++ b/spec/controllers/administrateurs/procedures_controller_spec.rb
@@ -384,16 +384,15 @@ describe Administrateurs::ProceduresController, type: :controller do
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
+ it 'displays expected procedures' do
+ # 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
+ # doesn’t display procedures without a significant number of dossiers'
expect(response_procedures).not_to include(small_closed_procedure)
- end
- it 'doesn’t display draft procedures' do
+ # doesn’t display draft procedures'
expect(response_procedures).not_to include(large_draft_procedure)
end
end
@@ -486,19 +485,19 @@ describe Administrateurs::ProceduresController, type: :controller do
post :create, params: { procedure: procedure_params }
end
- describe 'procedure attributs in database' do
- subject { Procedure.last }
+ 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) }
- it { expect(subject.tags).to eq(["planete", "environnement"]) }
+ it "create attributes" do
+ expect(subject.libelle).to eq(libelle)
+ expect(subject.description).to eq(description)
+ expect(subject.organisation).to eq(organisation)
+ expect(subject.administrateurs).to eq([admin])
+ expect(subject.duree_conservation_dossiers_dans_ds).to eq(duree_conservation_dossiers_dans_ds)
+ expect(subject.tags).to eq(["planete", "environnement"])
+
+ expect(response).to redirect_to(champs_admin_procedure_path(Procedure.last))
+ expect(flash[:notice]).to be_present
end
-
- it { is_expected.to redirect_to(champs_admin_procedure_path(Procedure.last)) }
- it { expect(flash[:notice]).to be_present }
end
describe "procedure is saved with custom retention period" do
@@ -510,10 +509,9 @@ describe Administrateurs::ProceduresController, type: :controller do
subject { post :create, params: { procedure: procedure_params } }
- it { expect { subject }.to change { Procedure.count }.by(1) }
-
it "must save retention period and max retention period" do
- subject
+ expect { subject }.to change { Procedure.count }.by(1)
+
last_procedure = Procedure.last
expect(last_procedure.duree_conservation_dossiers_dans_ds).to eq(duree_conservation_dossiers_dans_ds)
expect(last_procedure.max_duree_conservation_dossiers_dans_ds).to eq(Expired::DEFAULT_DOSSIER_RENTENTION_IN_MONTH)
@@ -589,15 +587,19 @@ describe Administrateurs::ProceduresController, type: :controller do
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) }
- it { expect(subject.procedure_expires_when_termine_enabled).to eq(true) }
+ it "update attributes" do
+ expect(subject.libelle).to eq(libelle)
+ expect(subject.description).to eq(description)
+ expect(subject.organisation).to eq(organisation)
+ expect(subject.duree_conservation_dossiers_dans_ds).to eq(duree_conservation_dossiers_dans_ds)
+ expect(subject.procedure_expires_when_termine_enabled).to eq(true)
+ end
end
- it { is_expected.to redirect_to(admin_procedure_path id: procedure.id) }
- it { expect(flash[:notice]).to be_present }
+ it do
+ is_expected.to redirect_to(admin_procedure_path id: procedure.id)
+ expect(flash[:notice]).to be_present
+ end
end
context 'when many attributs are not valid' do
@@ -629,11 +631,11 @@ describe Administrateurs::ProceduresController, type: :controller do
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] }
+ it 'only some properties can be updated' do
+ expect(subject.libelle).to eq procedure_params[:libelle]
+ expect(subject.description).to eq procedure_params[:description]
+ expect(subject.organisation).to eq procedure_params[:organisation]
+ expect(subject.for_individual).not_to eq procedure_params[:for_individual]
end
end
end
@@ -955,30 +957,26 @@ describe Administrateurs::ProceduresController, type: :controller do
context 'when all attributes are present' do
render_views
- before { update_monavis }
+ subject { update_monavis }
context 'when the embed code is valid' do
- describe 'the monavis field is updated' do
- subject { procedure }
+ it 'the monavis field is updated' do
+ subject
- it { expect(subject.monavis_embed).to eq(monavis_embed) }
+ expect(procedure.monavis_embed).to eq(monavis_embed)
+ expect(flash[:notice]).to be_present
+ expect(response).to redirect_to(admin_procedure_path(procedure.id))
end
-
- it { expect(flash[:notice]).to be_present }
- it { expect(response).to redirect_to(admin_procedure_path(procedure.id)) }
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) }
+ it 'the monavis field is not updated' do
+ expect(subject.monavis_embed).to eq(nil)
+ expect(flash[:alert]).to be_present
+ expect(response.body).to include "MonAvis"
end
-
- it { expect(flash[:alert]).to be_present }
- it { expect(response.body).to include "MonAvis" }
end
end
@@ -1016,26 +1014,32 @@ describe Administrateurs::ProceduresController, type: :controller do
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) }
+ it do
+ expect(flash.alert).to be_nil
+ expect(flash.notice).to eq('Le jeton a bien été mis à jour')
+ expect(procedure.reload.api_entreprise_token).to eq(token)
+ end
end
context 'when jeton is invalid' do
let(:token_is_valid) { false }
- it { expect(flash.alert).to eq("Mise à jour impossible : le jeton n’est pas valide") }
- it { expect(flash.notice).to be_nil }
- it { expect(procedure.reload.api_entreprise_token).not_to eq(token) }
+ it do
+ expect(flash.alert).to eq("Mise à jour impossible : le jeton n’est pas valide")
+ expect(flash.notice).to be_nil
+ expect(procedure.reload.api_entreprise_token).not_to eq(token)
+ end
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
- it { expect(flash.alert).to eq("Mise à jour impossible : le jeton n’est pas valide") }
- it { expect(flash.notice).to be_nil }
- it { expect(procedure.reload.api_entreprise_token).not_to eq(token) }
+ it do
+ expect(flash.alert).to eq("Mise à jour impossible : le jeton n’est pas valide")
+ expect(flash.notice).to be_nil
+ expect(procedure.reload.api_entreprise_token).not_to eq(token)
+ end
end
end
@@ -1221,10 +1225,12 @@ describe Administrateurs::ProceduresController, type: :controller do
context 'when admin is unknow' do
let(:email_admin) { 'plop' }
- it { expect(subject.status).to eq 302 }
- it { expect(response.body).to include(admin_procedure_transfert_path(procedure.id)) }
- it { expect(flash[:alert]).to be_present }
- it { expect(flash[:alert]).to eq("Envoi vers #{email_admin} impossible : cet administrateur n’existe pas") }
+ it do
+ expect(subject.status).to eq 302
+ expect(response.body).to include(admin_procedure_transfert_path(procedure.id))
+ expect(flash[:alert]).to be_present
+ expect(flash[:alert]).to eq("Envoi vers #{email_admin} impossible : cet administrateur n’existe pas")
+ end
end
context 'when admin is known' do
@@ -1233,8 +1239,10 @@ describe Administrateurs::ProceduresController, type: :controller do
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 do
+ expect { subject }.to change(new_admin.procedures, :count).by(1)
+ expect(subject.status).to eq 302
+ end
it "should create a new service" do
subject
@@ -1245,8 +1253,10 @@ describe Administrateurs::ProceduresController, type: :controller do
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) }
+ it do
+ expect { subject }.to change(Procedure, :count).by(1)
+ expect(subject.status).to eq 302
+ end
end
describe "correctly assigns the new admin" do
@@ -1308,8 +1318,10 @@ describe Administrateurs::ProceduresController, type: :controller do
procedure.reload
end
- it { expect(procedure.discarded?).to be_falsy }
- it { expect(procedure.dossiers.first.hidden_by_administration_at).to be_nil }
+ it do
+ expect(procedure.discarded?).to be_falsy
+ expect(procedure.dossiers.first.hidden_by_administration_at).to be_nil
+ end
end
end
end
diff --git a/spec/controllers/instructeurs/groupe_instructeurs_controller_spec.rb b/spec/controllers/instructeurs/groupe_instructeurs_controller_spec.rb
index 702a966b1..bc5bf8e2b 100644
--- a/spec/controllers/instructeurs/groupe_instructeurs_controller_spec.rb
+++ b/spec/controllers/instructeurs/groupe_instructeurs_controller_spec.rb
@@ -35,11 +35,11 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
let(:procedure) { create(:procedure, :published, instructeurs_self_management_enabled: true) }
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_2.label) }
- it { expect(response.body).not_to include(gi_1_1.label) }
- it { expect(response.body).not_to include(gi_2_2.label) }
+ it 'when a procedure has multiple groups' do
+ expect(response).to have_http_status(:ok)
+ expect(response.body).to include(gi_1_2.label)
+ expect(response.body).not_to include(gi_1_1.label)
+ expect(response.body).not_to include(gi_2_2.label)
end
end
@@ -47,8 +47,10 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
let(:procedure) { create(:procedure, :published, :new_administrateur, instructeurs_self_management_enabled: false) }
before { get :index, params: { procedure_id: procedure.id } }
- it { expect(response).to have_http_status(:redirect) }
- it { expect(flash.alert).to eq("Vous n’avez pas le droit de gérer les instructeurs de cette démarche") }
+ it "works" do
+ expect(response).to have_http_status(:redirect)
+ expect(flash.alert).to eq("Vous n’avez pas le droit de gérer les instructeurs de cette démarche")
+ end
end
context 'i am an instructor, not on the procedure' do
@@ -58,8 +60,10 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
get :index, params: { procedure_id: procedure.id }
end
- it { expect(response).to have_http_status(:redirect) }
- it { expect(flash.alert).to eq("Vous n’avez pas accès à cette démarche") }
+ it "works" do
+ expect(response).to have_http_status(:redirect)
+ expect(flash.alert).to eq("Vous n’avez pas accès à cette démarche")
+ end
end
end
@@ -85,24 +89,30 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
let(:new_instructeur_email) { 'new_instructeur@mail.com' }
before { subject }
- it { expect(gi_1_2.instructeurs.map(&:email)).to include(new_instructeur_email) }
- it { expect(flash.notice).to be_present }
- it { expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_2)) }
+ it "works" do
+ expect(gi_1_2.instructeurs.map(&:email)).to include(new_instructeur_email)
+ expect(flash.notice).to be_present
+ expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_2))
+ end
end
context 'of an instructeur already in the group' do
let(:new_instructeur_email) { instructeur.email }
before { subject }
- it { expect(flash.alert).to be_present }
- it { expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_2)) }
+ it "works" do
+ expect(flash.alert).to be_present
+ expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_2))
+ end
end
context 'invalid email' do
let(:new_instructeur_email) { 'invalid' }
- it { subject; expect(flash.alert).to include(new_instructeur_email) }
- it { expect { subject }.not_to enqueue_email }
+ it "works" do
+ expect { subject }.not_to enqueue_email
+ expect(flash.alert).to include(new_instructeur_email)
+ end
end
end
@@ -128,10 +138,12 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
context 'when there are many instructeurs' do
before { remove_instructeur(new_instructeur) }
- it { expect(gi_1_1.instructeurs).to include(instructeur) }
- it { expect(gi_1_1.reload.instructeurs.count).to eq(1) }
- it { expect(new_instructeur.reload.follows.count).to eq(0) }
- it { expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_1)) }
+ it "works" do
+ expect(gi_1_1.instructeurs).to include(instructeur)
+ expect(gi_1_1.reload.instructeurs.count).to eq(1)
+ expect(new_instructeur.reload.follows.count).to eq(0)
+ expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_1))
+ end
end
context 'when there is only one instructeur' do
@@ -140,10 +152,12 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
remove_instructeur(instructeur)
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') }
- it { expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_1)) }
+ it "works" do
+ expect(gi_1_1.instructeurs).to include(instructeur)
+ expect(gi_1_1.instructeurs.count).to eq(1)
+ expect(flash.alert).to eq('Suppression impossible : il doit y avoir au moins un instructeur dans le groupe')
+ expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_1))
+ end
end
end
@@ -161,7 +175,9 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
}
end
- it { expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_2)) }
- it { expect(gi_1_2.reload.signature).to be_attached }
+ it "works" do
+ expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_2))
+ expect(gi_1_2.reload.signature).to be_attached
+ end
end
end
diff --git a/spec/models/administrateur_spec.rb b/spec/models/administrateur_spec.rb
index abbe1e6d6..84c33fb4a 100644
--- a/spec/models/administrateur_spec.rb
+++ b/spec/models/administrateur_spec.rb
@@ -1,12 +1,12 @@
describe Administrateur, type: :model do
let(:administration) { create(:administration) }
- describe 'associations' do
- it { is_expected.to have_many(:commentaire_groupe_gestionnaires) }
- it { is_expected.to have_many(:archives) }
- it { is_expected.to have_many(:exports) }
- it { is_expected.to have_and_belong_to_many(:instructeurs) }
- it { is_expected.to belong_to(:groupe_gestionnaire).optional }
+ it 'define associations' do
+ is_expected.to have_many(:commentaire_groupe_gestionnaires)
+ is_expected.to have_many(:archives)
+ is_expected.to have_many(:exports)
+ is_expected.to have_and_belong_to_many(:instructeurs)
+ is_expected.to belong_to(:groupe_gestionnaire).optional
end
describe "#can_be_deleted?" do