test: merge similar examples

This commit is contained in:
Colin Darie 2024-06-03 11:53:03 +02:00
parent 9e80962ea5
commit 2041623ded
No known key found for this signature in database
GPG key ID: 4FB865FDBCA4BCC4
5 changed files with 293 additions and 199 deletions

View file

@ -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

View file

@ -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 <a href=\"/csv/import-instructeurs-test.csv\">ce modèle</a> pour une procédure sans routage ou <a href=\"/csv/fr/import-groupe-test.csv\">celui-ci</a> 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 <a href=\"/csv/import-instructeurs-test.csv\">ce modèle</a> pour une procédure sans routage ou <a href=\"/csv/fr/import-groupe-test.csv\">celui-ci</a> 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 <a href=\"/csv/import-instructeurs-test.csv\">ce modèle</a> pour une procédure sans routage ou <a href=\"/csv/fr/import-groupe-test.csv\">celui-ci</a> 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 <a href=\"/csv/import-instructeurs-test.csv\">ce modèle</a> pour une procédure sans routage ou <a href=\"/csv/fr/import-groupe-test.csv\">celui-ci</a> 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

View file

@ -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 'doesnt display procedures without a significant number of dossiers' do
# doesnt display procedures without a significant number of dossiers'
expect(response_procedures).not_to include(small_closed_procedure)
end
it 'doesnt display draft procedures' do
# doesnt 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 nest 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 nest 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 nest 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 nest 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 nexiste 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 nexiste 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

View file

@ -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 navez 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 navez 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 navez pas accès à cette démarche") }
it "works" do
expect(response).to have_http_status(:redirect)
expect(flash.alert).to eq("Vous navez 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

View file

@ -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