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