Merge pull request #10483 from colinux/fast-tests

Tech (tests): default administrateur fixtures
This commit is contained in:
Colin Darie 2024-07-01 21:35:11 +00:00 committed by GitHub
commit eee6e5e651
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
83 changed files with 490 additions and 378 deletions

View file

@ -129,6 +129,7 @@ group :test do
gem 'shoulda-matchers', require: false gem 'shoulda-matchers', require: false
gem 'simplecov', require: false gem 'simplecov', require: false
gem 'simplecov-cobertura', require: false gem 'simplecov-cobertura', require: false
gem "test-prof"
gem 'timecop' gem 'timecop'
gem 'vcr' gem 'vcr'
gem 'webmock' gem 'webmock'

View file

@ -783,6 +783,7 @@ GEM
temple (0.8.2) temple (0.8.2)
terminal-table (3.0.2) terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3) unicode-display_width (>= 1.1.1, < 3)
test-prof (1.3.3)
thor (1.3.1) thor (1.3.1)
thread_safe (0.3.6) thread_safe (0.3.6)
tilt (2.3.0) tilt (2.3.0)
@ -1019,6 +1020,7 @@ DEPENDENCIES
string-similarity string-similarity
strong_migrations strong_migrations
sys-proctable sys-proctable
test-prof
timecop timecop
turbo-rails turbo-rails
typhoeus typhoeus

View file

@ -196,7 +196,7 @@ RSpec.describe Dossiers::MessageComponent, type: :component do
describe 'groupe_gestionnaire' do describe 'groupe_gestionnaire' do
let(:show_reply_button) { false } let(:show_reply_button) { false }
let(:commentaire) { create(:commentaire_groupe_gestionnaire, sender: create(:administrateur)) } let(:commentaire) { create(:commentaire_groupe_gestionnaire, sender: administrateurs(:default_admin)) }
let(:groupe_gestionnaire) { commentaire.groupe_gestionnaire } let(:groupe_gestionnaire) { commentaire.groupe_gestionnaire }
let(:connected_user) { commentaire.sender } let(:connected_user) { commentaire.sender }
subject { render_inline(component).to_html } subject { render_inline(component).to_html }
@ -222,7 +222,7 @@ RSpec.describe Dossiers::MessageComponent, type: :component do
context 'with an gestionnaire message' do context 'with an gestionnaire message' do
let(:gestionnaire) { create(:gestionnaire) } let(:gestionnaire) { create(:gestionnaire) }
let(:commentaire) { create(:commentaire_groupe_gestionnaire, sender: create(:administrateur), gestionnaire: gestionnaire, body: 'Second message') } let(:commentaire) { create(:commentaire_groupe_gestionnaire, sender: administrateurs(:default_admin), gestionnaire: gestionnaire, body: 'Second message') }
it 'should display gestionnaire\'s email' do it 'should display gestionnaire\'s email' do
is_expected.to have_text(gestionnaire.email) is_expected.to have_text(gestionnaire.email)
@ -237,14 +237,14 @@ RSpec.describe Dossiers::MessageComponent, type: :component do
end end
context 'when commentaire had been written by connected gestionnaire and discarded' do context 'when commentaire had been written by connected gestionnaire and discarded' do
let(:commentaire) { create(:commentaire_groupe_gestionnaire, sender: create(:administrateur), gestionnaire: gestionnaire, body: 'Second message', discarded_at: 2.days.ago) } let(:commentaire) { create(:commentaire_groupe_gestionnaire, sender: administrateurs(:default_admin), gestionnaire: gestionnaire, body: 'Second message', discarded_at: 2.days.ago) }
it { is_expected.not_to have_selector("form[action=\"#{form_url}\"]") } it { is_expected.not_to have_selector("form[action=\"#{form_url}\"]") }
it { is_expected.to have_selector(".rich-text", text: component.t('.deleted_body')) } it { is_expected.to have_selector(".rich-text", text: component.t('.deleted_body')) }
end end
context 'on a procedure where commentaire had been written another gestionnaire' do context 'on a procedure where commentaire had been written another gestionnaire' do
let(:commentaire) { create(:commentaire_groupe_gestionnaire, sender: create(:administrateur), gestionnaire: create(:gestionnaire), body: 'Second message') } let(:commentaire) { create(:commentaire_groupe_gestionnaire, sender: administrateurs(:default_admin), gestionnaire: create(:gestionnaire), body: 'Second message') }
it { is_expected.not_to have_selector("form[action=\"#{form_url}\"]") } it { is_expected.not_to have_selector("form[action=\"#{form_url}\"]") }
end end
@ -261,7 +261,7 @@ RSpec.describe Dossiers::MessageComponent, type: :component do
let(:present_date) { Time.zone.local(2018, 9, 2, 10, 5, 0) } let(:present_date) { Time.zone.local(2018, 9, 2, 10, 5, 0) }
let(:creation_date) { present_date } let(:creation_date) { present_date }
let(:commentaire) do let(:commentaire) do
Timecop.freeze(creation_date) { create(:commentaire_groupe_gestionnaire, sender: create(:administrateur)) } Timecop.freeze(creation_date) { create(:commentaire_groupe_gestionnaire, sender: administrateurs(:default_admin)) }
end end
subject do subject do

View file

@ -1,6 +1,6 @@
describe Administrateurs::ActivateController, type: :controller do describe Administrateurs::ActivateController, type: :controller do
describe '#new' do describe '#new' do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:token) { admin.user.send(:set_reset_password_token) } let(:token) { admin.user.send(:set_reset_password_token) }
before { allow(controller).to receive(:trust_device) } before { allow(controller).to receive(:trust_device) }
@ -19,7 +19,7 @@ describe Administrateurs::ActivateController, type: :controller do
end end
describe '#create' do describe '#create' do
let!(:administrateur) { create(:administrateur) } let!(:administrateur) { administrateurs(:default_admin) }
let(:token) { administrateur.user.send(:set_reset_password_token) } let(:token) { administrateur.user.send(:set_reset_password_token) }
let(:password) { 'Another-password-ok!@#123?' } let(:password) { 'Another-password-ok!@#123?' }

View file

@ -1,5 +1,5 @@
describe Administrateurs::APITokensController, type: :controller do describe Administrateurs::APITokensController, type: :controller do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:procedure) { create(:procedure, administrateur: admin) } let(:procedure) { create(:procedure, administrateur: admin) }
before { sign_in(admin.user) } before { sign_in(admin.user) }
@ -84,7 +84,7 @@ describe Administrateurs::APITokensController, type: :controller do
end end
context 'with procedure filtering on a procedure not owned by the admin' do context 'with procedure filtering on a procedure not owned by the admin' do
let(:another_procedure) { create(:procedure) } let(:another_procedure) { create(:procedure, :new_administrateur) }
let(:params) { default_params.merge(target: 'custom', targets: [another_procedure.id]) } let(:params) { default_params.merge(target: 'custom', targets: [another_procedure.id]) }
it do it do

View file

@ -1,7 +1,6 @@
describe Administrateurs::ArchivesController, type: :controller do describe Administrateurs::ArchivesController, type: :controller do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:procedure) { create :procedure, groupe_instructeurs: [groupe_instructeur1, groupe_instructeur2] } let(:procedure) { create :procedure, groupe_instructeurs: [groupe_instructeur1, groupe_instructeur2] }
let(:administrateur_procedure) { create(:administrateurs_procedure, procedure: procedure, administrateur: admin, manager: manager) }
let(:groupe_instructeur1) { create(:groupe_instructeur) } let(:groupe_instructeur1) { create(:groupe_instructeur) }
let(:groupe_instructeur2) { create(:groupe_instructeur) } let(:groupe_instructeur2) { create(:groupe_instructeur) }
@ -15,7 +14,7 @@ describe Administrateurs::ArchivesController, type: :controller do
context 'when logged in as administrateur_procedure.manager=false' do context 'when logged in as administrateur_procedure.manager=false' do
let(:manager) { false } let(:manager) { false }
before do before do
administrateur_procedure admin.administrateurs_procedures.where(procedure:).update_all(manager:)
sign_in(admin.user) sign_in(admin.user)
end end
@ -30,7 +29,7 @@ describe Administrateurs::ArchivesController, type: :controller do
let(:manager) { true } let(:manager) { true }
before do before do
administrateur_procedure admin.administrateurs_procedures.where(procedure:).update_all(manager:)
sign_in(admin.user) sign_in(admin.user)
end end
@ -49,13 +48,13 @@ describe Administrateurs::ArchivesController, type: :controller do
let(:manager) { false } let(:manager) { false }
before do before do
administrateur_procedure admin.administrateurs_procedures.where(procedure:).update_all(manager:)
sign_in(admin.user) sign_in(admin.user)
end end
it { is_expected.to redirect_to(admin_procedure_archives_path(procedure)) }
it 'enqueue the creation job' do it 'enqueue the creation job' do
expect { subject }.to have_enqueued_job(ArchiveCreationJob).with(procedure, an_instance_of(Archive), admin) expect { subject }.to have_enqueued_job(ArchiveCreationJob).with(procedure, an_instance_of(Archive), admin)
expect(subject).to redirect_to(admin_procedure_archives_path(procedure))
end end
end end
@ -63,7 +62,7 @@ describe Administrateurs::ArchivesController, type: :controller do
let(:manager) { true } let(:manager) { true }
before do before do
administrateur_procedure admin.administrateurs_procedures.where(procedure:).update_all(manager:)
sign_in(admin.user) sign_in(admin.user)
end end

View file

@ -1,5 +1,5 @@
describe Administrateurs::AttestationTemplateV2sController, type: :controller do describe Administrateurs::AttestationTemplateV2sController, type: :controller do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:attestation_template) { build(:attestation_template, :v2) } let(:attestation_template) { build(:attestation_template, :v2) }
let(:procedure) { create(:procedure, :published, administrateur: admin, attestation_template:, libelle: "Ma démarche") } let(:procedure) { create(:procedure, :published, administrateur: admin, attestation_template:, libelle: "Ma démarche") }
let(:logo) { fixture_file_upload('spec/fixtures/files/white.png', 'image/png') } let(:logo) { fixture_file_upload('spec/fixtures/files/white.png', 'image/png') }

View file

@ -1,5 +1,5 @@
describe Administrateurs::AttestationTemplatesController, type: :controller do describe Administrateurs::AttestationTemplatesController, type: :controller do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:attestation_template) { build(:attestation_template) } let(:attestation_template) { build(:attestation_template) }
let(:procedure) { create(:procedure, administrateur: admin, attestation_template: attestation_template) } let(:procedure) { create(:procedure, administrateur: admin, attestation_template: attestation_template) }
let(:logo) { fixture_file_upload('spec/fixtures/files/white.png', 'image/png') } let(:logo) { fixture_file_upload('spec/fixtures/files/white.png', 'image/png') }

View file

@ -1,5 +1,5 @@
describe Administrateurs::DossierSubmittedMessagesController, type: :controller do describe Administrateurs::DossierSubmittedMessagesController, type: :controller do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
before { sign_in(administrateur.user) } before { sign_in(administrateur.user) }

View file

@ -1,5 +1,5 @@
describe Administrateurs::ExpertsProceduresController, type: :controller do describe Administrateurs::ExpertsProceduresController, type: :controller do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:procedure) { create :procedure, administrateur: admin } let(:procedure) { create :procedure, administrateur: admin }
before do before do

View file

@ -1,6 +1,6 @@
describe Administrateurs::ExportsController, type: :controller do describe Administrateurs::ExportsController, type: :controller do
describe '#download' do describe '#download' do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
before { sign_in(administrateur.user) } before { sign_in(administrateur.user) }
subject do subject do
@ -8,7 +8,7 @@ describe Administrateurs::ExportsController, type: :controller do
end end
context 'when the procedure does not belongs to admin' do context 'when the procedure does not belongs to admin' do
let!(:procedure) { create(:procedure, administrateurs: [create(:administrateur)]) } let!(:procedure) { create(:procedure, :new_administrateur) }
it 'blocks' do it 'blocks' do
is_expected.to have_http_status(:not_found) is_expected.to have_http_status(:not_found)
end end
@ -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
@ -66,7 +65,9 @@ describe Administrateurs::ExportsController, type: :controller do
context 'when admin is allowed present as manager' do context 'when admin is allowed present as manager' do
let!(:procedure) { create(:procedure) } let!(:procedure) { create(:procedure) }
let!(:administrateur_procedure) { create(:administrateurs_procedure, procedure: procedure, administrateur: administrateur, manager: true) } before do
procedure.administrateurs_procedures.update_all(manager: true)
end
context 'get #index.html' do context 'get #index.html' do
it { is_expected.to have_http_status(:forbidden) } it { is_expected.to have_http_status(:forbidden) }

View file

@ -1,5 +1,5 @@
describe Administrateurs::GroupeGestionnaireController, type: :controller do describe Administrateurs::GroupeGestionnaireController, type: :controller do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
describe "#show" do describe "#show" do
subject { get :show } subject { get :show }

View file

@ -2,7 +2,7 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
render_views render_views
include Logic include Logic
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:procedure) { create(:procedure, :routee, :published, :for_individual, administrateurs: [admin]) } let(:procedure) { create(:procedure, :routee, :published, :for_individual, administrateurs: [admin]) }
let!(:gi_1_1) { procedure.defaut_groupe_instructeur } let!(:gi_1_1) { procedure.defaut_groupe_instructeur }
@ -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
@ -319,25 +331,29 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
describe '#add_instructeur_procedure_non_routee' do describe '#add_instructeur_procedure_non_routee' do
# faire la meme chose sur une procedure non routee # faire la meme chose sur une procedure non routee
let(:procedure_non_routee) { create :procedure } let(:procedure_non_routee) { create(:procedure, administrateur: admin) }
let!(:groupe_instructeur) { create(:administrateurs_procedure, procedure: procedure_non_routee, administrateur: admin, manager: manager) }
let(:emails) { ['instructeur_3@ministere_a.gouv.fr', 'instructeur_4@ministere_b.gouv.fr'].to_json } let(:emails) { ['instructeur_3@ministere_a.gouv.fr', 'instructeur_4@ministere_b.gouv.fr'].to_json }
subject { post :add_instructeur, params: { emails: emails, procedure_id: procedure_non_routee.id, id: procedure_non_routee.defaut_groupe_instructeur.id } }
let(:manager) { false } let(:manager) { false }
before {
procedure_non_routee.administrateurs_procedures.where(administrateur: admin).update_all(manager:)
}
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
@ -379,11 +395,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,
[instructeur_email_verified], [instructeur_email_verified],
@ -415,8 +431,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
@ -460,10 +478,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,
@ -478,10 +496,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
@ -496,19 +516,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
@ -523,10 +561,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
@ -534,10 +574,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
@ -545,8 +587,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
@ -558,10 +602,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
@ -572,8 +618,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
@ -581,8 +629,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
@ -590,8 +640,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
@ -600,8 +652,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
@ -614,8 +668,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
@ -635,11 +691,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,
@ -653,19 +709,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
@ -676,8 +737,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
@ -685,8 +748,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
@ -698,8 +763,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
@ -866,7 +933,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

View file

@ -1,5 +1,5 @@
describe Administrateurs::JetonParticulierController, type: :controller do describe Administrateurs::JetonParticulierController, type: :controller do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:procedure) { create(:procedure, administrateur: admin) } let(:procedure) { create(:procedure, administrateur: admin) }
before do before do

View file

@ -3,7 +3,7 @@ describe Administrateurs::MailTemplatesController, type: :controller do
let(:procedure) { create :procedure } let(:procedure) { create :procedure }
let(:initiated_mail) { Mails::InitiatedMail.default_for_procedure(procedure) } let(:initiated_mail) { Mails::InitiatedMail.default_for_procedure(procedure) }
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
before do before do
sign_in(procedure.administrateurs.first.user) sign_in(procedure.administrateurs.first.user)

View file

@ -1,5 +1,5 @@
describe Administrateurs::ProcedureAdministrateursController, type: :controller do describe Administrateurs::ProcedureAdministrateursController, type: :controller do
let(:signed_in_admin) { create(:administrateur).tap { _1.user.update(last_sign_in_at: Time.zone.now) } } let(:signed_in_admin) { administrateurs(:default_admin).tap { _1.user.update(last_sign_in_at: Time.zone.now) } }
let(:other_admin) { create(:administrateur).tap { _1.user.update(last_sign_in_at: Time.zone.now) } } let(:other_admin) { create(:administrateur).tap { _1.user.update(last_sign_in_at: Time.zone.now) } }
let!(:administrateurs_procedure) { create(:administrateurs_procedure, administrateur: signed_in_admin, procedure: procedure, manager: manager) } let!(:administrateurs_procedure) { create(:administrateurs_procedure, administrateur: signed_in_admin, procedure: procedure, manager: manager) }
let!(:procedure) { create(:procedure, administrateurs: [other_admin]) } let!(:procedure) { create(:procedure, administrateurs: [other_admin]) }
@ -12,7 +12,7 @@ describe Administrateurs::ProcedureAdministrateursController, type: :controller
describe '#create' do describe '#create' do
context 'as manager' do context 'as manager' do
let(:manager) { true } let(:manager) { true }
subject { post :create, params: { procedure_id: procedure.id, administrateur: { email: create(:administrateur).email } }, format: :turbo_stream } subject { post :create, params: { procedure_id: procedure.id, administrateur: { email: administrateurs(:default_admin).email } }, format: :turbo_stream }
it { is_expected.to have_http_status(:forbidden) } it { is_expected.to have_http_status(:forbidden) }
end end
end end

View file

@ -1,5 +1,5 @@
describe Administrateurs::ProceduresController, type: :controller do describe Administrateurs::ProceduresController, type: :controller do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:bad_procedure_id) { 100000 } let(:bad_procedure_id) { 100000 }
let(:path) { 'ma-jolie-demarche' } let(:path) { 'ma-jolie-demarche' }
@ -124,8 +124,8 @@ describe Administrateurs::ProceduresController, type: :controller do
context 'for default admin zones' do context 'for default admin zones' do
let(:zone1) { create(:zone) } let(:zone1) { create(:zone) }
let(:zone2) { create(:zone) } let(:zone2) { create(:zone) }
let!(:procedure1) { create(:procedure, :published, zones: [zone1]) } let!(:procedure1) { create(:procedure, :published, :new_administrateur, zones: [zone1]) }
let!(:procedure2) { create(:procedure, :published, zones: [zone1, zone2]) } let!(:procedure2) { create(:procedure, :published, :new_administrateur, zones: [zone1, zone2]) }
let!(:admin_procedure) { create(:procedure, :published, zones: [zone2], administrateur: admin) } let!(:admin_procedure) { create(:procedure, :published, zones: [zone2], administrateur: admin) }
subject { get :all, params: { zone_ids: :admin_default } } subject { get :all, params: { zone_ids: :admin_default } }
@ -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 '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) 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) 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)
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 end
it { is_expected.to redirect_to(champs_admin_procedure_path(Procedure.last)) }
it { expect(flash[:notice]).to be_present }
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
@ -673,7 +675,7 @@ describe Administrateurs::ProceduresController, type: :controller do
end end
context 'when admin is not the owner of the procedure' do context 'when admin is not the owner of the procedure' do
let(:admin_2) { create(:administrateur) } let(:admin_2) { administrateurs(:default_admin) }
before do before do
sign_out(admin.user) sign_out(admin.user)
@ -688,7 +690,7 @@ describe Administrateurs::ProceduresController, type: :controller do
end end
context 'when procedure has invalid fields' do context 'when procedure has invalid fields' do
let(:admin_2) { create(:administrateur) } let(:admin_2) { administrateurs(:default_admin) }
let(:path) { 'spec/fixtures/files/invalid_file_format.json' } let(:path) { 'spec/fixtures/files/invalid_file_format.json' }
before do before do
@ -915,7 +917,7 @@ describe Administrateurs::ProceduresController, type: :controller do
end end
context "when administrateur does not own the procedure" do context "when administrateur does not own the procedure" do
let(:dossier) { create(:dossier) } let(:dossier) { create(:dossier, procedure: create(:procedure, :new_administrateur)) }
it { expect { subject }.to raise_error(ActiveRecord::RecordNotFound) } it { expect { subject }.to raise_error(ActiveRecord::RecordNotFound) }
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 nest pas valide") } it do
it { expect(flash.notice).to be_nil } expect(flash.alert).to eq("Mise à jour impossible : le jeton nest 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 nest pas valide") } it do
it { expect(flash.notice).to be_nil } expect(flash.alert).to eq("Mise à jour impossible : le jeton nest 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
@ -1068,7 +1072,7 @@ describe Administrateurs::ProceduresController, type: :controller do
describe 'PUT #publish' do describe 'PUT #publish' do
let(:procedure) { create(:procedure, administrateur: admin, lien_site_web: lien_site_web) } let(:procedure) { create(:procedure, administrateur: admin, lien_site_web: lien_site_web) }
let(:procedure2) { create(:procedure, :published, administrateur: admin, lien_site_web: lien_site_web) } let(:procedure2) { create(:procedure, :published, administrateur: admin, lien_site_web: lien_site_web) }
let(:procedure3) { create(:procedure, :published, lien_site_web: lien_site_web) } let(:procedure3) { create(:procedure, :published, :new_administrateur, lien_site_web: lien_site_web) }
let(:lien_site_web) { 'http://some.administration/' } let(:lien_site_web) { 'http://some.administration/' }
subject(:perform_request) { put :publish, params: { procedure_id: procedure.id, path: path, lien_site_web: lien_site_web } } subject(:perform_request) { put :publish, params: { procedure_id: procedure.id, path: path, lien_site_web: lien_site_web } }
@ -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 nexiste pas") } expect(flash[:alert]).to be_present
expect(flash[:alert]).to eq("Envoi vers #{email_admin} impossible : cet administrateur nexiste 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

View file

@ -1,5 +1,5 @@
describe Administrateurs::ServicesController, type: :controller do describe Administrateurs::ServicesController, type: :controller do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:procedure) { create(:procedure, administrateur: admin) } let(:procedure) { create(:procedure, administrateur: admin) }
describe '#create' do describe '#create' do
@ -159,7 +159,7 @@ describe Administrateurs::ServicesController, type: :controller do
end end
describe "#index" do describe "#index" do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
before do before do
sign_in(admin.user) sign_in(admin.user)

View file

@ -1,5 +1,5 @@
describe Administrateurs::SourcesParticulierController, type: :controller do describe Administrateurs::SourcesParticulierController, type: :controller do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
before { sign_in(admin.user) } before { sign_in(admin.user) }

View file

@ -1,8 +1,8 @@
describe API::V1::DossiersController do describe API::V1::DossiersController do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:token) { APIToken.generate(admin)[1] } let(:token) { APIToken.generate(admin)[1] }
let(:procedure) { create(:procedure, :with_type_de_champ, :with_type_de_champ_private, administrateur: admin) } let(:procedure) { create(:procedure, :with_type_de_champ, :with_type_de_champ_private, administrateur: admin) }
let(:wrong_procedure) { create(:procedure) } let(:wrong_procedure) { create(:procedure, :new_administrateur) }
it { expect(described_class).to be < APIController } it { expect(described_class).to be < APIController }

View file

@ -1,6 +1,6 @@
describe API::V2::BaseController, type: :controller do describe API::V2::BaseController, type: :controller do
describe 'ensure_authorized_network and token_is_not_expired' do describe 'ensure_authorized_network and token_is_not_expired' do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:token_bearer_couple) { APIToken.generate(admin) } let(:token_bearer_couple) { APIToken.generate(admin) }
let(:token) { token_bearer_couple[0] } let(:token) { token_bearer_couple[0] }
let(:bearer) { token_bearer_couple[1] } let(:bearer) { token_bearer_couple[1] }

View file

@ -1,5 +1,5 @@
describe API::V2::GraphqlController do describe API::V2::GraphqlController do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:generated_token) { APIToken.generate(admin) } let(:generated_token) { APIToken.generate(admin) }
let(:api_token) { generated_token.first } let(:api_token) { generated_token.first }
let(:token) { generated_token.second } let(:token) { generated_token.second }

View file

@ -1,5 +1,5 @@
describe API::V2::GraphqlController do describe API::V2::GraphqlController do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:generated_token) { APIToken.generate(admin) } let(:generated_token) { APIToken.generate(admin) }
let(:api_token) { generated_token.first } let(:api_token) { generated_token.first }
let(:token) { generated_token.second } let(:token) { generated_token.second }
@ -1386,7 +1386,7 @@ describe API::V2::GraphqlController do
} }
context 'when unauthorized' do context 'when unauthorized' do
let(:dossier) { create(:dossier, :en_construction, :with_individual) } let(:dossier) { create(:dossier, :en_construction, :with_individual, procedure: create(:procedure, :new_administrateur, :for_individual)) }
it { it {
expect(message.discarded?).to be_falsey expect(message.discarded?).to be_falsey

View file

@ -41,7 +41,7 @@ describe APIController, type: :controller do
end end
describe 'ensure_authorized_network and token is not expired' do describe 'ensure_authorized_network and token is not expired' do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:token_bearer_couple) { APIToken.generate(admin) } let(:token_bearer_couple) { APIToken.generate(admin) }
let(:token) { token_bearer_couple[0] } let(:token) { token_bearer_couple[0] }
let(:bearer) { token_bearer_couple[1] } let(:bearer) { token_bearer_couple[1] }

View file

@ -70,7 +70,7 @@ describe ApplicationController, type: :controller do
context 'when someone is logged as a user, instructeur, administrateur and super_admin' do context 'when someone is logged as a user, instructeur, administrateur and super_admin' do
let(:current_user) { create(:user) } let(:current_user) { create(:user) }
let(:current_instructeur) { create(:instructeur) } let(:current_instructeur) { create(:instructeur) }
let(:current_administrateur) { create(:administrateur) } let(:current_administrateur) { administrateurs(:default_admin) }
let(:current_super_admin) { create(:super_admin) } let(:current_super_admin) { create(:super_admin) }
it do it do

View file

@ -1,5 +1,5 @@
describe DataSources::ChorusController do describe DataSources::ChorusController do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
render_views render_views

View file

@ -47,7 +47,7 @@ describe Gestionnaires::GroupeGestionnaireAdministrateursController, type: :cont
end end
context 'when administrateur has some procedure' do context 'when administrateur has some procedure' do
let(:administrateur_with_procedure) { create(:administrateur) } let(:administrateur_with_procedure) { administrateurs(:default_admin) }
let!(:procedure) { create(:procedure_with_dossiers, administrateur: administrateur_with_procedure) } let!(:procedure) { create(:procedure_with_dossiers, administrateur: administrateur_with_procedure) }
before do before do
groupe_gestionnaire.administrateurs << administrateur_with_procedure groupe_gestionnaire.administrateurs << administrateur_with_procedure
@ -59,7 +59,7 @@ describe Gestionnaires::GroupeGestionnaireAdministrateursController, type: :cont
end end
context 'when administrateur is not in the groupe_gestionnaire' do context 'when administrateur is not in the groupe_gestionnaire' do
let(:other_administrateur) { create(:administrateur) } let(:other_administrateur) { administrateurs(:default_admin) }
before { destroy(other_administrateur) } before { destroy(other_administrateur) }
it { expect(groupe_gestionnaire.reload.administrateurs.count).to eq(1) } it { expect(groupe_gestionnaire.reload.administrateurs.count).to eq(1) }

View file

@ -1,6 +1,6 @@
describe Gestionnaires::GroupeGestionnaireCommentairesController, type: :controller do describe Gestionnaires::GroupeGestionnaireCommentairesController, type: :controller do
let(:gestionnaire) { create(:gestionnaire).tap { _1.user.update(last_sign_in_at: Time.zone.now) } } let(:gestionnaire) { create(:gestionnaire).tap { _1.user.update(last_sign_in_at: Time.zone.now) } }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire], administrateurs: [administrateur]) } let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire], administrateurs: [administrateur]) }
let!(:commentaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur) } let!(:commentaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur) }

View file

@ -2,11 +2,10 @@ describe Instructeurs::DossiersController, type: :controller do
render_views render_views
let(:instructeur) { create(:instructeur) } let(:instructeur) { create(:instructeur) }
let(:administrateur) { create(:administrateur) }
let(:administration) { create(:administration) } let(:administration) { create(:administration) }
let(:instructeurs) { [instructeur] } let(:instructeurs) { [instructeur] }
let(:procedure) { create(:procedure, :published, :for_individual, instructeurs: instructeurs) } let(:procedure) { create(:procedure, :published, :for_individual, instructeurs: instructeurs) }
let(:procedure_accuse_lecture) { create(:procedure, :published, :for_individual, :accuse_lecture, instructeurs: instructeurs) } let(:procedure_accuse_lecture) { create(:procedure, :published, :for_individual, :accuse_lecture, :new_administrateur, instructeurs: instructeurs) }
let(:dossier) { create(:dossier, :en_construction, :with_individual, procedure: procedure) } let(:dossier) { create(:dossier, :en_construction, :with_individual, procedure: procedure) }
let(:dossier_accuse_lecture) { create(:dossier, :en_construction, :with_individual, procedure: procedure_accuse_lecture) } let(:dossier_accuse_lecture) { create(:dossier, :en_construction, :with_individual, procedure: procedure_accuse_lecture) }
let(:dossier_for_tiers) { create(:dossier, :en_construction, :for_tiers_with_notification, procedure: procedure) } let(:dossier_for_tiers) { create(:dossier, :en_construction, :for_tiers_with_notification, procedure: procedure) }
@ -1309,7 +1308,7 @@ describe Instructeurs::DossiersController, type: :controller do
describe '#reaffectation' do describe '#reaffectation' do
let!(:gi_2) { GroupeInstructeur.create(label: 'deuxième groupe', procedure: procedure) } let!(:gi_2) { GroupeInstructeur.create(label: 'deuxième groupe', procedure: procedure) }
let!(:gi_3) { GroupeInstructeur.create(label: 'troisième groupe', procedure: procedure) } let!(:gi_3) { GroupeInstructeur.create(label: 'troisième groupe', procedure: procedure) }
let!(:dossier) { create(:dossier, :en_construction, procedure: procedure, groupe_instructeur: procedure.groupe_instructeurs.first) } let!(:dossier) { create(:dossier, :en_construction, procedure: procedure, groupe_instructeur: procedure.groupe_instructeurs.reorder(:id).first) }
before do before do
post :reaffectation, post :reaffectation,
@ -1361,8 +1360,8 @@ describe Instructeurs::DossiersController, type: :controller do
describe '#personnes_impliquees' do describe '#personnes_impliquees' do
let(:routed_procedure) { create(:procedure, :routee, :published, :for_individual) } let(:routed_procedure) { create(:procedure, :routee, :published, :for_individual) }
let(:gi_1) { routed_procedure.groupe_instructeurs.first } let(:gi_1) { routed_procedure.groupe_instructeurs.reorder(:id).first }
let(:gi_2) { routed_procedure.groupe_instructeurs.last } let(:gi_2) { routed_procedure.groupe_instructeurs.reorder(:id).last }
let(:dossier) { create(:dossier, :en_construction, :with_individual, procedure: routed_procedure, groupe_instructeur: gi_1) } let(:dossier) { create(:dossier, :en_construction, :with_individual, procedure: routed_procedure, groupe_instructeur: gi_1) }
let(:new_instructeur) { create(:instructeur) } let(:new_instructeur) { create(:instructeur) }

View file

@ -32,34 +32,38 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
end end
context 'when i am an instructeur of the procedure and instructeurs_self_management_enabled is true' do context 'when i am an instructeur of the procedure and instructeurs_self_management_enabled is true' do
let(:procedure) { create(:procedure, :published, administrateurs: [create(:administrateur)], 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
context 'when i am an instructor of the procedure, and instructeurs_self_management_enabled is false' do context 'when i am an instructor of the procedure, and instructeurs_self_management_enabled is false' do
let(:procedure) { create(:procedure, :published, administrateurs: [create(: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 navez 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 navez 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
let(:procedure) { create(:procedure, :published, administrateurs: [create(:administrateur)], instructeurs_self_management_enabled: true) } let(:procedure) { create(:procedure, :published, :new_administrateur, instructeurs_self_management_enabled: true) }
before do before do
sign_in(create(:instructeur).user) sign_in(create(:instructeur).user)
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 navez pas accès à cette démarche") } expect(response).to have_http_status(:redirect)
expect(flash.alert).to eq("Vous navez 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

View file

@ -1,6 +1,6 @@
describe Manager::AdministrateursController, type: :controller do describe Manager::AdministrateursController, type: :controller do
let(:super_admin) { create(:super_admin) } let(:super_admin) { create(:super_admin) }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
before do before do
sign_in super_admin sign_in super_admin

View file

@ -1,7 +1,7 @@
describe Manager::ProceduresController, type: :controller do describe Manager::ProceduresController, type: :controller do
let(:super_admin) { create :super_admin } let(:super_admin) { create :super_admin }
let(:administrateur) { create(:administrateur, email: super_admin.email) } let(:administrateur) { create(:administrateur, email: super_admin.email) }
let(:autre_administrateur) { create(:administrateur) } let(:autre_administrateur) { administrateurs(:default_admin) }
before { sign_in super_admin } before { sign_in super_admin }
describe '#whitelist' do describe '#whitelist' do

View file

@ -34,7 +34,7 @@ describe RootController, type: :controller do
context 'when Administrateur is connected' do context 'when Administrateur is connected' do
before do before do
sign_in(create(:administrateur).user) sign_in(administrateurs(:default_admin).user)
end end
it { expect(subject).to redirect_to(admin_procedures_path) } it { expect(subject).to redirect_to(admin_procedures_path) }

View file

@ -1,6 +1,6 @@
FactoryBot.define do FactoryBot.define do
factory :administrateurs_procedure do factory :administrateurs_procedure do
association :administrateur administrateur { Administrateur.find_by(user: { email: "default_admin@admin.com" }) }
association :procedure association :procedure
end end
end end

View file

@ -9,7 +9,7 @@ FactoryBot.define do
trait :archiver do trait :archiver do
operation { BatchOperation.operations.fetch(:archiver) } operation { BatchOperation.operations.fetch(:archiver) }
after(:build) do |batch_operation, evaluator| after(:build) do |batch_operation, evaluator|
procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur], administrateurs: [create(:administrateur)]) procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur])
batch_operation.dossiers = [ batch_operation.dossiers = [
create(:dossier, :with_individual, :accepte, procedure: procedure), create(:dossier, :with_individual, :accepte, procedure: procedure),
create(:dossier, :with_individual, :refuse, procedure: procedure), create(:dossier, :with_individual, :refuse, procedure: procedure),
@ -21,7 +21,7 @@ FactoryBot.define do
trait :desarchiver do trait :desarchiver do
operation { BatchOperation.operations.fetch(:desarchiver) } operation { BatchOperation.operations.fetch(:desarchiver) }
after(:build) do |batch_operation, evaluator| after(:build) do |batch_operation, evaluator|
procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur], administrateurs: [create(:administrateur)]) procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur])
batch_operation.dossiers = [ batch_operation.dossiers = [
create(:dossier, :with_individual, :accepte, procedure: procedure, archived: true), create(:dossier, :with_individual, :accepte, procedure: procedure, archived: true),
create(:dossier, :with_individual, :refuse, procedure: procedure, archived: true), create(:dossier, :with_individual, :refuse, procedure: procedure, archived: true),
@ -33,7 +33,7 @@ FactoryBot.define do
trait :passer_en_instruction do trait :passer_en_instruction do
operation { BatchOperation.operations.fetch(:passer_en_instruction) } operation { BatchOperation.operations.fetch(:passer_en_instruction) }
after(:build) do |batch_operation, evaluator| after(:build) do |batch_operation, evaluator|
procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur], administrateurs: [create(:administrateur)]) procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur])
batch_operation.dossiers = [ batch_operation.dossiers = [
create(:dossier, :with_individual, :en_construction, procedure: procedure), create(:dossier, :with_individual, :en_construction, procedure: procedure),
create(:dossier, :with_individual, :en_construction, procedure: procedure) create(:dossier, :with_individual, :en_construction, procedure: procedure)
@ -44,7 +44,7 @@ FactoryBot.define do
trait :repousser_expiration do trait :repousser_expiration do
operation { BatchOperation.operations.fetch(:repousser_expiration) } operation { BatchOperation.operations.fetch(:repousser_expiration) }
after(:build) do |batch_operation, evaluator| after(:build) do |batch_operation, evaluator|
procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur], administrateurs: [create(:administrateur)]) procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur])
batch_operation.dossiers = [ batch_operation.dossiers = [
create(:dossier, :with_individual, :accepte, procedure: procedure, processed_at: 12.months.ago), create(:dossier, :with_individual, :accepte, procedure: procedure, processed_at: 12.months.ago),
create(:dossier, :with_individual, :accepte, procedure: procedure, processed_at: 12.months.ago) create(:dossier, :with_individual, :accepte, procedure: procedure, processed_at: 12.months.ago)
@ -55,7 +55,7 @@ FactoryBot.define do
trait :accepter do trait :accepter do
operation { BatchOperation.operations.fetch(:accepter) } operation { BatchOperation.operations.fetch(:accepter) }
after(:build) do |batch_operation, evaluator| after(:build) do |batch_operation, evaluator|
procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur], administrateurs: [create(:administrateur)]) procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur])
batch_operation.dossiers = [ batch_operation.dossiers = [
create(:dossier, :with_individual, :en_instruction, procedure: procedure), create(:dossier, :with_individual, :en_instruction, procedure: procedure),
create(:dossier, :with_individual, :en_instruction, procedure: procedure) create(:dossier, :with_individual, :en_instruction, procedure: procedure)
@ -66,7 +66,7 @@ FactoryBot.define do
trait :refuser do trait :refuser do
operation { BatchOperation.operations.fetch(:refuser) } operation { BatchOperation.operations.fetch(:refuser) }
after(:build) do |batch_operation, evaluator| after(:build) do |batch_operation, evaluator|
procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur], administrateurs: [create(:administrateur)]) procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur])
batch_operation.dossiers = [ batch_operation.dossiers = [
create(:dossier, :with_individual, :en_instruction, procedure: procedure), create(:dossier, :with_individual, :en_instruction, procedure: procedure),
create(:dossier, :with_individual, :en_instruction, procedure: procedure) create(:dossier, :with_individual, :en_instruction, procedure: procedure)
@ -77,7 +77,7 @@ FactoryBot.define do
trait :classer_sans_suite do trait :classer_sans_suite do
operation { BatchOperation.operations.fetch(:classer_sans_suite) } operation { BatchOperation.operations.fetch(:classer_sans_suite) }
after(:build) do |batch_operation, evaluator| after(:build) do |batch_operation, evaluator|
procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur], administrateurs: [create(:administrateur)]) procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur])
batch_operation.dossiers = [ batch_operation.dossiers = [
create(:dossier, :with_individual, :en_instruction, procedure: procedure), create(:dossier, :with_individual, :en_instruction, procedure: procedure),
create(:dossier, :with_individual, :en_instruction, procedure: procedure) create(:dossier, :with_individual, :en_instruction, procedure: procedure)
@ -88,7 +88,7 @@ FactoryBot.define do
trait :follow do trait :follow do
operation { BatchOperation.operations.fetch(:follow) } operation { BatchOperation.operations.fetch(:follow) }
after(:build) do |batch_operation, evaluator| after(:build) do |batch_operation, evaluator|
procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur], administrateurs: [create(:administrateur)]) procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur])
batch_operation.dossiers = [ batch_operation.dossiers = [
create(:dossier, :with_individual, :en_instruction, procedure: procedure), create(:dossier, :with_individual, :en_instruction, procedure: procedure),
create(:dossier, :with_individual, :en_construction, procedure: procedure) create(:dossier, :with_individual, :en_construction, procedure: procedure)
@ -99,7 +99,7 @@ FactoryBot.define do
trait :unfollow do trait :unfollow do
operation { BatchOperation.operations.fetch(:unfollow) } operation { BatchOperation.operations.fetch(:unfollow) }
after(:build) do |batch_operation, evaluator| after(:build) do |batch_operation, evaluator|
procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur], administrateurs: [create(:administrateur)]) procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur])
batch_operation.dossiers = [ batch_operation.dossiers = [
create(:dossier, :with_individual, :en_instruction, procedure: procedure, followers_instructeurs: procedure.instructeurs), create(:dossier, :with_individual, :en_instruction, procedure: procedure, followers_instructeurs: procedure.instructeurs),
create(:dossier, :with_individual, :en_construction, procedure: procedure, followers_instructeurs: procedure.instructeurs) create(:dossier, :with_individual, :en_construction, procedure: procedure, followers_instructeurs: procedure.instructeurs)
@ -110,7 +110,7 @@ FactoryBot.define do
trait :restaurer do trait :restaurer do
operation { BatchOperation.operations.fetch(:restaurer) } operation { BatchOperation.operations.fetch(:restaurer) }
after(:build) do |batch_operation, evaluator| after(:build) do |batch_operation, evaluator|
procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur], administrateurs: [create(:administrateur)]) procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur])
batch_operation.dossiers = [ batch_operation.dossiers = [
create(:dossier, :with_individual, :accepte, procedure: procedure, hidden_by_administration_at: Time.zone.now), create(:dossier, :with_individual, :accepte, procedure: procedure, hidden_by_administration_at: Time.zone.now),
create(:dossier, :with_individual, :refuse, procedure: procedure, hidden_by_administration_at: Time.zone.now) create(:dossier, :with_individual, :refuse, procedure: procedure, hidden_by_administration_at: Time.zone.now)
@ -121,7 +121,7 @@ FactoryBot.define do
trait :repasser_en_construction do trait :repasser_en_construction do
operation { BatchOperation.operations.fetch(:repasser_en_construction) } operation { BatchOperation.operations.fetch(:repasser_en_construction) }
after(:build) do |batch_operation, evaluator| after(:build) do |batch_operation, evaluator|
procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur], administrateurs: [create(:administrateur)]) procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur])
batch_operation.dossiers = [ batch_operation.dossiers = [
create(:dossier, :with_individual, :en_instruction, procedure: procedure), create(:dossier, :with_individual, :en_instruction, procedure: procedure),
create(:dossier, :with_individual, :en_instruction, procedure: procedure) create(:dossier, :with_individual, :en_instruction, procedure: procedure)
@ -132,7 +132,7 @@ FactoryBot.define do
trait :supprimer do trait :supprimer do
operation { BatchOperation.operations.fetch(:supprimer) } operation { BatchOperation.operations.fetch(:supprimer) }
after(:build) do |batch_operation, evaluator| after(:build) do |batch_operation, evaluator|
procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur], administrateurs: [create(:administrateur)]) procedure = create(:simple_procedure, :published, instructeurs: [evaluator.invalid_instructeur.presence || batch_operation.instructeur])
batch_operation.dossiers = [ batch_operation.dossiers = [
create(:dossier, :with_individual, :accepte, procedure: procedure), create(:dossier, :with_individual, :accepte, procedure: procedure),
create(:dossier, :with_individual, :refuse, procedure: procedure) create(:dossier, :with_individual, :refuse, procedure: procedure)

View file

@ -17,10 +17,14 @@ FactoryBot.define do
sva_svr { {} } sva_svr { {} }
groupe_instructeurs { [association(:groupe_instructeur, :default, procedure: instance, strategy: :build)] } groupe_instructeurs { [association(:groupe_instructeur, :default, procedure: instance, strategy: :build)] }
administrateurs { administrateur.present? ? [administrateur] : [association(:administrateur)] } administrateurs { [administrateur] }
trait(:new_administrateur) do
administrateur { create(:administrateur) }
end
transient do transient do
administrateur {} administrateur { Administrateur.find_by(user: { email: "default_admin@admin.com" }) }
instructeurs { [] } instructeurs { [] }
types_de_champ_public { [] } types_de_champ_public { [] }
types_de_champ_private { [] } types_de_champ_private { [] }
@ -79,10 +83,8 @@ FactoryBot.define do
end end
after(:create) do |procedure, evaluator| after(:create) do |procedure, evaluator|
user = create(:user) user = User.find_by(email: "default_user@user.com")
evaluator.dossiers_count.times do create_list(:dossier, evaluator.dossiers_count, procedure: procedure, user: user)
create(:dossier, procedure: procedure, user: user)
end
end end
end end

2
spec/fixtures/administrateurs.yml vendored Normal file
View file

@ -0,0 +1,2 @@
default_admin:
user: default_user_admin

3
spec/fixtures/instructeurs.yml vendored Normal file
View file

@ -0,0 +1,3 @@
default_instructeur_admin:
user: default_user_admin
bypass_email_login_token: true

9
spec/fixtures/users.yml vendored Normal file
View file

@ -0,0 +1,9 @@
default_user:
email: default_user@user.com
encrypted_password: <%= Devise::Encryptor.digest(User, '{My-$3cure-p4ssWord}') %>
confirmed_at: <%= Time.current.to_s(:db) %>
default_user_admin:
email: default_admin@admin.com
encrypted_password: <%= Devise::Encryptor.digest(User, '{My-$3cure-p4ssWord}') %>
confirmed_at: <%= Time.current.to_s(:db) %>

View file

@ -1,5 +1,5 @@
RSpec.describe Mutations::DossierModifierAnnotation, type: :graphql do RSpec.describe Mutations::DossierModifierAnnotation, type: :graphql do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:procedure) { create(:procedure, :published, :for_individual, types_de_champ_private: [{ type: :repetition, children: [{ libelle: 'Nom' }, { type: :integer_number, libelle: 'Age' }] }, {}], administrateurs: [admin]) } let(:procedure) { create(:procedure, :published, :for_individual, types_de_champ_private: [{ type: :repetition, children: [{ libelle: 'Nom' }, { type: :integer_number, libelle: 'Age' }] }, {}], administrateurs: [admin]) }
let(:dossiers) { [] } let(:dossiers) { [] }
let(:instructeur) { create(:instructeur, followed_dossiers: dossiers) } let(:instructeur) { create(:instructeur, followed_dossiers: dossiers) }

View file

@ -1,5 +1,5 @@
RSpec.describe Types::DemarcheType, type: :graphql do RSpec.describe Types::DemarcheType, type: :graphql do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:query) { '' } let(:query) { '' }
let(:context) { { procedure_ids: admin.procedure_ids } } let(:context) { { procedure_ids: admin.procedure_ids } }
let(:variables) { {} } let(:variables) { {} }

View file

@ -1,6 +1,6 @@
RSpec.describe Cron::AdministrateurActivateBeforeExpirationJob, type: :job do RSpec.describe Cron::AdministrateurActivateBeforeExpirationJob, type: :job do
describe 'perform' do describe 'perform' do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:user) { administrateur.user } let(:user) { administrateur.user }
let(:mailer_double) { double('mailer', deliver_later: true) } let(:mailer_double) { double('mailer', deliver_later: true) }

View file

@ -8,14 +8,14 @@ RSpec.describe Cron::PurgeManagerAdministrateurSessionsJob, type: :job do
context "with an inactive administrateur" do context "with an inactive administrateur" do
before do before do
AdministrateursProcedure.create(procedure: procedure, administrateur: administrateur, manager: true) AdministrateursProcedure.create(procedure: procedure, administrateur: administrateur, manager: true)
expect(AdministrateursProcedure.where(manager: true).count).to eq(1)
expect(AdministrateursProcedure.count).to eq(2)
subject
end end
it { it {
expect(AdministrateursProcedure.where(manager: true).count).to eq(0) expect(AdministrateursProcedure.where(procedure:, manager: true).count).to eq(1)
expect(AdministrateursProcedure.count).to eq(1) expect(AdministrateursProcedure.where(procedure:).count).to eq(2)
subject
expect(AdministrateursProcedure.where(procedure:, manager: true).count).to eq(0)
expect(AdministrateursProcedure.where(procedure:).count).to eq(1)
} }
end end
end end

View file

@ -1,6 +1,6 @@
RSpec.describe Cron::SendAPITokenExpirationNoticeJob, type: :job do RSpec.describe Cron::SendAPITokenExpirationNoticeJob, type: :job do
describe 'perform' do describe 'perform' do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let!(:token) { APIToken.generate(administrateur).first } let!(:token) { APIToken.generate(administrateur).first }
let(:mailer_double) { double('mailer', deliver_later: true) } let(:mailer_double) { double('mailer', deliver_later: true) }
let(:today) { Date.new(2018, 01, 01) } let(:today) { Date.new(2018, 01, 01) }

View file

@ -21,8 +21,10 @@ RSpec.describe Cron::WeeklyOverviewJob, type: :job do
run_job run_job
end end
it { expect(InstructeurMailer).to have_received(:last_week_overview).with(instructeur) } it do
it { expect(mailer_double).to have_received(:deliver_later) } expect(InstructeurMailer).to have_received(:last_week_overview).with(instructeur)
expect(mailer_double).to have_received(:deliver_later).at_least(1).times
end
end end
context 'with one instructeur with no overviews' do context 'with one instructeur with no overviews' do

View file

@ -1,6 +1,6 @@
describe ActiveStorage::DownloadableFile do describe ActiveStorage::DownloadableFile do
let(:dossier) { create(:dossier, :en_construction) } let(:dossier) { create(:dossier, :en_construction) }
let(:user_profile) { create(:administrateur) } let(:user_profile) { administrateurs(:default_admin) }
let(:dossiers) { Dossier.where(id: dossier.id) } let(:dossiers) { Dossier.where(id: dossier.id) }
subject(:list) { ActiveStorage::DownloadableFile.create_list_from_dossiers(user_profile:, dossiers:) } subject(:list) { ActiveStorage::DownloadableFile.create_list_from_dossiers(user_profile:, dossiers:) }

View file

@ -24,7 +24,7 @@ describe 'service tasks' do
describe 'service:notify_no_siret' do describe 'service:notify_no_siret' do
let(:task) { 'service:email_no_siret' } let(:task) { 'service:email_no_siret' }
let!(:procedure_without_siret_service) { create(:procedure, :published, service: service, administrateur: administrateur) } let!(:procedure_without_siret_service) { create(:procedure, :published, service: service, administrateur: administrateur) }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:service) do let(:service) do
s = build(:service, siret: nil, administrateur: administrateur) s = build(:service, siret: nil, administrateur: administrateur)
s.save(validate: false) s.save(validate: false)

View file

@ -2,7 +2,7 @@ describe 're_routing_dossiers' do
describe 'run' do describe 'run' do
include Logic include Logic
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:procedure) { create(:procedure, types_de_champ_public: [{ type: :departements, libelle: 'Votre département' }], administrateurs: [admin]) } let(:procedure) { create(:procedure, types_de_champ_public: [{ type: :departements, libelle: 'Votre département' }], administrateurs: [admin]) }
let(:dossier1) { create(:dossier, :en_construction, :with_populated_champs, procedure: procedure) } let(:dossier1) { create(:dossier, :en_construction, :with_populated_champs, procedure: procedure) }
let!(:dossier2) { create(:dossier, :en_construction, :with_populated_champs, procedure: procedure) } let!(:dossier2) { create(:dossier, :en_construction, :with_populated_champs, procedure: procedure) }

View file

@ -10,7 +10,7 @@ describe 'support' do
after { rake_task.reenable } after { rake_task.reenable }
# the admin to remove # the admin to remove
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
# the super admin doing the removal # the super admin doing the removal
let(:super_admin) { create(:super_admin) } let(:super_admin) { create(:super_admin) }

View file

@ -1,5 +1,5 @@
RSpec.describe NotificationMailer, type: :mailer do RSpec.describe NotificationMailer, type: :mailer do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:user) { create(:user) } let(:user) { create(:user) }
let(:procedure) { create(:simple_procedure, :with_service) } let(:procedure) { create(:simple_procedure, :with_service) }

View file

@ -114,7 +114,7 @@ RSpec.describe UserMailer, type: :mailer do
end end
context 'administrateur' do context 'administrateur' do
let(:role) { create(:administrateur) } let(:role) { administrateurs(:default_admin) }
it 'sends email with correct links to administrateur' do it 'sends email with correct links to administrateur' do
expect(subject.to).to eq([role.user.email]) expect(subject.to).to eq([role.user.email])
expect(subject.body).to have_link('Consulter mes archives', href: admin_procedure_archives_url(procedure, host: ENV.fetch("APP_HOST_LEGACY"))) expect(subject.body).to have_link('Consulter mes archives', href: admin_procedure_archives_url(procedure, host: ENV.fetch("APP_HOST_LEGACY")))
@ -123,7 +123,7 @@ RSpec.describe UserMailer, type: :mailer do
end end
context 'when perform_later is called' do context 'when perform_later is called' do
let(:role) { create(:administrateur) } let(:role) { administrateurs(:default_admin) }
let(:custom_queue) { 'low_priority' } let(:custom_queue) { 'low_priority' }
before { ENV['BULK_EMAIL_QUEUE'] = custom_queue } before { ENV['BULK_EMAIL_QUEUE'] = custom_queue }
it 'enqueues email is custom queue for low priority delivery' do it 'enqueues email is custom queue for low priority delivery' do

View file

@ -1,19 +1,19 @@
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
subject { administrateur.can_be_deleted? } subject { administrateur.can_be_deleted? }
context "when the administrateur's procedures have other administrateurs" do context "when the administrateur's procedures have other administrateurs" do
let!(:administrateur) { create(:administrateur) } let!(:administrateur) { administrateurs(:default_admin) }
let!(:autre_administrateur) { create(:administrateur) } let!(:autre_administrateur) { create(:administrateur) }
let!(:procedure) { create(:procedure, administrateurs: [administrateur, autre_administrateur]) } let!(:procedure) { create(:procedure, administrateurs: [administrateur, autre_administrateur]) }
@ -21,14 +21,14 @@ describe Administrateur, type: :model do
end end
context "when the administrateur has a procedure with dossiers where they is the only admin" do context "when the administrateur has a procedure with dossiers where they is the only admin" do
let!(:administrateur) { create(:administrateur) } let!(:administrateur) { administrateurs(:default_admin) }
let!(:procedure) { create(:procedure_with_dossiers, administrateurs: [administrateur]) } let!(:procedure) { create(:procedure_with_dossiers, administrateurs: [administrateur]) }
it { is_expected.to be false } it { is_expected.to be false }
end end
context "when the administrateur has a procedure with dossiers and with other admins" do context "when the administrateur has a procedure with dossiers and with other admins" do
let!(:administrateur) { create(:administrateur) } let!(:administrateur) { administrateurs(:default_admin) }
let!(:administrateur2) { create(:administrateur) } let!(:administrateur2) { create(:administrateur) }
let!(:procedure) { create(:procedure_with_dossiers, administrateurs: [administrateur, administrateur2]) } let!(:procedure) { create(:procedure_with_dossiers, administrateurs: [administrateur, administrateur2]) }
@ -36,21 +36,21 @@ describe Administrateur, type: :model do
end end
context "when the administrateur has a procedure without dossiers" do context "when the administrateur has a procedure without dossiers" do
let!(:administrateur) { create(:administrateur) } let!(:administrateur) { administrateurs(:default_admin) }
let!(:procedure) { create(:procedure, administrateurs: [administrateur]) } let!(:procedure) { create(:procedure, administrateurs: [administrateur]) }
it { is_expected.to be true } it { is_expected.to be true }
end end
context "when the administrateur has no procedure" do context "when the administrateur has no procedure" do
let!(:administrateur) { create(:administrateur) } let!(:administrateur) { administrateurs(:default_admin) }
it { is_expected.to be true } it { is_expected.to be true }
end end
end end
describe '#merge' do describe '#merge' do
let(:new_admin) { create(:administrateur) } let(:new_admin) { administrateurs(:default_admin) }
let(:old_admin) { create(:administrateur) } let(:old_admin) { create(:administrateur) }
subject { new_admin.merge(old_admin) } subject { new_admin.merge(old_admin) }
@ -78,14 +78,7 @@ describe Administrateur, type: :model do
end end
context 'when both admins share a procedure' do context 'when both admins share a procedure' do
let(:procedure) { create(:procedure) } let(:procedure) { create(:procedure, administrateurs: [old_admin, new_admin]) }
before do
new_admin.procedures << procedure
old_admin.procedures << procedure
subject
[new_admin, old_admin].map(&:reload)
end
it 'removes the procedure from the old one' do it 'removes the procedure from the old one' do
expect(old_admin.procedures).to be_empty expect(old_admin.procedures).to be_empty
@ -185,7 +178,7 @@ describe Administrateur, type: :model do
describe 'unused' do describe 'unused' do
subject { Administrateur.unused } subject { Administrateur.unused }
let(:new_admin) { create(:administrateur) } let(:new_admin) { administrateurs(:default_admin) }
let(:unused_admin) { create(:administrateur, :with_api_token) } let(:unused_admin) { create(:administrateur, :with_api_token) }
before do before do
@ -237,7 +230,7 @@ describe Administrateur, type: :model do
end end
describe 'zones' do describe 'zones' do
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:zone1) { create(:zone) } let(:zone1) { create(:zone) }
let(:zone2) { create(:zone) } let(:zone2) { create(:zone) }
let!(:procedure) { create(:procedure, administrateurs: [admin], zones: [zone1, zone2]) } let!(:procedure) { create(:procedure, administrateurs: [admin], zones: [zone1, zone2]) }
@ -250,7 +243,7 @@ describe Administrateur, type: :model do
describe "#unread_commentaires?" do describe "#unread_commentaires?" do
context "commentaire_seen_at is nil" do context "commentaire_seen_at is nil" do
let(:gestionnaire) { create(:gestionnaire) } let(:gestionnaire) { create(:gestionnaire) }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) } let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) }
let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, gestionnaire: gestionnaire, created_at: 12.hours.ago) } let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, gestionnaire: gestionnaire, created_at: 12.hours.ago) }
@ -285,7 +278,7 @@ describe Administrateur, type: :model do
describe "#mark_commentaire_as_seen" do describe "#mark_commentaire_as_seen" do
let(:now) { Time.zone.now.beginning_of_minute } let(:now) { Time.zone.now.beginning_of_minute }
let(:gestionnaire) { create(:gestionnaire) } let(:gestionnaire) { create(:gestionnaire) }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) } let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) }
let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, created_at: 12.hours.ago) } let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, created_at: 12.hours.ago) }

View file

@ -1,5 +1,5 @@
describe APIToken, type: :model do describe APIToken, type: :model do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
describe '#generate' do describe '#generate' do
let(:api_token_and_packed_token) { APIToken.generate(administrateur) } let(:api_token_and_packed_token) { APIToken.generate(administrateur) }
@ -59,7 +59,7 @@ describe APIToken, type: :model do
end end
context 'but acces to a wrong procedure_id' do context 'but acces to a wrong procedure_id' do
let(:forbidden_procedure) { create(:procedure) } let(:forbidden_procedure) { create(:procedure, :new_administrateur) }
before do before do
api_token.update(allowed_procedure_ids: [forbidden_procedure.id]) api_token.update(allowed_procedure_ids: [forbidden_procedure.id])

View file

@ -9,7 +9,7 @@ describe CommentaireGroupeGestionnaire, type: :model do
let(:commentaire_groupe_gestionnaire) { create :commentaire_groupe_gestionnaire, sender: sender, gestionnaire: gestionnaire } let(:commentaire_groupe_gestionnaire) { create :commentaire_groupe_gestionnaire, sender: sender, gestionnaire: gestionnaire }
context 'when created by an administrateur' do context 'when created by an administrateur' do
let(:sender) { create(:administrateur) } let(:sender) { administrateurs(:default_admin) }
let(:gestionnaire) { nil } let(:gestionnaire) { nil }
it 'set correctly sender_email and gestionnaire_email' do it 'set correctly sender_email and gestionnaire_email' do
expect(commentaire_groupe_gestionnaire.sender_email).to eq(sender.email) expect(commentaire_groupe_gestionnaire.sender_email).to eq(sender.email)
@ -18,7 +18,7 @@ describe CommentaireGroupeGestionnaire, type: :model do
end end
context 'when answer by a gestionnaire' do context 'when answer by a gestionnaire' do
let(:sender) { create(:administrateur) } let(:sender) { administrateurs(:default_admin) }
let(:gestionnaire) { create(:gestionnaire) } let(:gestionnaire) { create(:gestionnaire) }
it 'set correctly sender_email and gestionnaire_email' do it 'set correctly sender_email and gestionnaire_email' do
@ -34,7 +34,7 @@ describe CommentaireGroupeGestionnaire, type: :model do
let(:commentaire_groupe_gestionnaire) { build :commentaire_groupe_gestionnaire, sender: sender, gestionnaire: gestionnaire } let(:commentaire_groupe_gestionnaire) { build :commentaire_groupe_gestionnaire, sender: sender, gestionnaire: gestionnaire }
context 'with a commentaire_groupe_gestionnaire created by an administrateur deleted by administrateur' do context 'with a commentaire_groupe_gestionnaire created by an administrateur deleted by administrateur' do
let(:sender) { create(:administrateur) } let(:sender) { administrateurs(:default_admin) }
let(:user) { sender } let(:user) { sender }
let(:gestionnaire) { nil } let(:gestionnaire) { nil }
@ -42,7 +42,7 @@ describe CommentaireGroupeGestionnaire, type: :model do
end end
context 'with a commentaire_groupe_gestionnaire created by an administrateur deleted by gestionnaire' do context 'with a commentaire_groupe_gestionnaire created by an administrateur deleted by gestionnaire' do
let(:sender) { create(:administrateur) } let(:sender) { administrateurs(:default_admin) }
let(:user) { create(:gestionnaire) } let(:user) { create(:gestionnaire) }
let(:gestionnaire) { nil } let(:gestionnaire) { nil }
@ -59,7 +59,7 @@ describe CommentaireGroupeGestionnaire, type: :model do
context 'with a commentaire_groupe_gestionnaire created by an gestionnaire deleted by administrateur' do context 'with a commentaire_groupe_gestionnaire created by an gestionnaire deleted by administrateur' do
let(:sender) { create(:gestionnaire) } let(:sender) { create(:gestionnaire) }
let(:user) { create(:administrateur) } let(:user) { administrateurs(:default_admin) }
let(:gestionnaire) { sender } let(:gestionnaire) { sender }
it { is_expected.to be_falsy } it { is_expected.to be_falsy }
@ -72,14 +72,14 @@ describe CommentaireGroupeGestionnaire, type: :model do
let(:commentaire_groupe_gestionnaire) { build :commentaire_groupe_gestionnaire, sender: sender } let(:commentaire_groupe_gestionnaire) { build :commentaire_groupe_gestionnaire, sender: sender }
context 'with a commentaire_groupe_gestionnaire created by an administrateur so sent by administrateur' do context 'with a commentaire_groupe_gestionnaire created by an administrateur so sent by administrateur' do
let(:sender) { create(:administrateur) } let(:sender) { administrateurs(:default_admin) }
let(:user) { sender } let(:user) { sender }
it { is_expected.to be_truthy } it { is_expected.to be_truthy }
end end
context 'with a commentaire_groupe_gestionnaire created by an administrateur so not sent by gestionnaire' do context 'with a commentaire_groupe_gestionnaire created by an administrateur so not sent by gestionnaire' do
let(:sender) { create(:administrateur) } let(:sender) { administrateurs(:default_admin) }
let(:user) { create(:gestionnaire) } let(:user) { create(:gestionnaire) }
it { is_expected.to be_falsy } it { is_expected.to be_falsy }
@ -94,7 +94,7 @@ describe CommentaireGroupeGestionnaire, type: :model do
context 'with a commentaire_groupe_gestionnaire created by an gestionnaire so not sent by administrateur' do context 'with a commentaire_groupe_gestionnaire created by an gestionnaire so not sent by administrateur' do
let(:sender) { create(:gestionnaire) } let(:sender) { create(:gestionnaire) }
let(:user) { create(:administrateur) } let(:user) { administrateurs(:default_admin) }
it { is_expected.to be_falsy } it { is_expected.to be_falsy }
end end

View file

@ -1,6 +1,6 @@
describe InitiationProcedureConcern do describe InitiationProcedureConcern do
describe '.create_initiation_procedure' do describe '.create_initiation_procedure' do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
subject { Procedure.create_initiation_procedure(administrateur) } subject { Procedure.create_initiation_procedure(administrateur) }
it "returns a new procedure" do it "returns a new procedure" do

View file

@ -1848,7 +1848,7 @@ describe Dossier, type: :model do
end end
describe 'brouillon_expired and en_construction_expired' do describe 'brouillon_expired and en_construction_expired' do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:user) { administrateur.user } let(:user) { administrateur.user }
let(:reason) { DeletedDossier.reasons.fetch(:user_request) } let(:reason) { DeletedDossier.reasons.fetch(:user_request) }

View file

@ -83,18 +83,18 @@ describe Gestionnaire, type: :model do
describe "#unread_commentaires?" do describe "#unread_commentaires?" do
context "over three different groupe_gestionnaire" do context "over three different groupe_gestionnaire" do
let(:gestionnaire) { create(:gestionnaire) } let(:gestionnaire) { create(:gestionnaire) }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) } let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) }
let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, created_at: 12.hours.ago) } let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, created_at: 12.hours.ago) }
let!(:follow_commentaire_groupe_gestionnaire) { create(:follow_commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, gestionnaire: gestionnaire, sender: administrateur, commentaire_seen_at: Time.zone.now) } let!(:follow_commentaire_groupe_gestionnaire) { create(:follow_commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, gestionnaire: gestionnaire, sender: administrateur, commentaire_seen_at: Time.zone.now) }
let(:gestionnaire_unread_commentaire_cause_never_seen) { create(:gestionnaire) } let(:gestionnaire_unread_commentaire_cause_never_seen) { create(:gestionnaire) }
let(:administrateur_unread_commentaire_cause_never_seen) { create(:administrateur) } let(:administrateur_unread_commentaire_cause_never_seen) { administrateurs(:default_admin) }
let(:groupe_gestionnaire_unread_commentaire_cause_never_seen) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire_unread_commentaire_cause_never_seen]) } let(:groupe_gestionnaire_unread_commentaire_cause_never_seen) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire_unread_commentaire_cause_never_seen]) }
let!(:commentaire_groupe_gestionnaire_unread_commentaire_cause_never_seen) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire_unread_commentaire_cause_never_seen, sender: administrateur_unread_commentaire_cause_never_seen, created_at: 12.hours.ago) } let!(:commentaire_groupe_gestionnaire_unread_commentaire_cause_never_seen) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire_unread_commentaire_cause_never_seen, sender: administrateur_unread_commentaire_cause_never_seen, created_at: 12.hours.ago) }
let(:gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire) { create(:gestionnaire) } let(:gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire) { create(:gestionnaire) }
let(:administrateur_unread_commentaire_cause_seen_at_before_last_commentaire) { create(:administrateur) } let(:administrateur_unread_commentaire_cause_seen_at_before_last_commentaire) { administrateurs(:default_admin) }
let(:groupe_gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire]) } let(:groupe_gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire]) }
let!(:commentaire_groupe_gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire, sender: administrateur_unread_commentaire_cause_seen_at_before_last_commentaire, created_at: 12.hours.ago) } let!(:commentaire_groupe_gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire, sender: administrateur_unread_commentaire_cause_seen_at_before_last_commentaire, created_at: 12.hours.ago) }
let!(:follow_commentaire_groupe_gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire) { create(:follow_commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire, gestionnaire: gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire, sender: administrateur_unread_commentaire_cause_seen_at_before_last_commentaire, commentaire_seen_at: 1.day.ago) } let!(:follow_commentaire_groupe_gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire) { create(:follow_commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire, gestionnaire: gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire, sender: administrateur_unread_commentaire_cause_seen_at_before_last_commentaire, commentaire_seen_at: 1.day.ago) }
@ -110,7 +110,7 @@ describe Gestionnaire, type: :model do
let(:gestionnaire) { create(:gestionnaire) } let(:gestionnaire) { create(:gestionnaire) }
let(:gestionnaire_unread_commentaire_cause_never_seen) { create(:gestionnaire) } let(:gestionnaire_unread_commentaire_cause_never_seen) { create(:gestionnaire) }
let(:gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire) { create(:gestionnaire) } let(:gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire) { create(:gestionnaire) }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire, gestionnaire_unread_commentaire_cause_never_seen, gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire]) } let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire, gestionnaire_unread_commentaire_cause_never_seen, gestionnaire_unread_commentaire_cause_seen_at_before_last_commentaire]) }
let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, created_at: 12.hours.ago) } let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, created_at: 12.hours.ago) }
@ -128,7 +128,7 @@ describe Gestionnaire, type: :model do
describe "#commentaire_seen_at" do describe "#commentaire_seen_at" do
context "when already seen commentaire" do context "when already seen commentaire" do
let(:gestionnaire) { create(:gestionnaire) } let(:gestionnaire) { create(:gestionnaire) }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) } let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) }
let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, created_at: 12.hours.ago) } let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, created_at: 12.hours.ago) }
let!(:follow_commentaire_groupe_gestionnaire) { create(:follow_commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, gestionnaire: gestionnaire, sender: administrateur, commentaire_seen_at: Time.zone.now) } let!(:follow_commentaire_groupe_gestionnaire) { create(:follow_commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, gestionnaire: gestionnaire, sender: administrateur, commentaire_seen_at: Time.zone.now) }
@ -138,7 +138,7 @@ describe Gestionnaire, type: :model do
context "when never seen commentaire" do context "when never seen commentaire" do
let(:gestionnaire) { create(:gestionnaire) } let(:gestionnaire) { create(:gestionnaire) }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) } let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) }
let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, created_at: 12.hours.ago) } let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, created_at: 12.hours.ago) }
@ -150,7 +150,7 @@ describe Gestionnaire, type: :model do
context "when already seen commentaire" do context "when already seen commentaire" do
let(:now) { Time.zone.now.beginning_of_minute } let(:now) { Time.zone.now.beginning_of_minute }
let(:gestionnaire) { create(:gestionnaire) } let(:gestionnaire) { create(:gestionnaire) }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) } let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) }
let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, created_at: 12.hours.ago) } let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, created_at: 12.hours.ago) }
let!(:follow_commentaire_groupe_gestionnaire) { create(:follow_commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, gestionnaire: gestionnaire, sender: administrateur, commentaire_seen_at: 12.hours.ago) } let!(:follow_commentaire_groupe_gestionnaire) { create(:follow_commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, gestionnaire: gestionnaire, sender: administrateur, commentaire_seen_at: 12.hours.ago) }
@ -170,7 +170,7 @@ describe Gestionnaire, type: :model do
context "when never seen commentaire" do context "when never seen commentaire" do
let(:now) { Time.zone.now.beginning_of_minute } let(:now) { Time.zone.now.beginning_of_minute }
let(:gestionnaire) { create(:gestionnaire) } let(:gestionnaire) { create(:gestionnaire) }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) } let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) }
let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, created_at: 12.hours.ago) } let!(:commentaire_groupe_gestionnaire) { create(:commentaire_groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire, sender: administrateur, created_at: 12.hours.ago) }

View file

@ -21,7 +21,7 @@ describe GroupeGestionnaire, type: :model do
describe "#add_administrateur" do describe "#add_administrateur" do
let(:groupe_gestionnaire) { create(:groupe_gestionnaire) } let(:groupe_gestionnaire) { create(:groupe_gestionnaire) }
let(:gestionnaire) { create(:gestionnaire) } let(:gestionnaire) { create(:gestionnaire) }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
subject { groupe_gestionnaire.add_administrateur(administrateur) } subject { groupe_gestionnaire.add_administrateur(administrateur) }

View file

@ -554,7 +554,7 @@ describe Instructeur, type: :model do
subject { instructeur.can_be_deleted? } subject { instructeur.can_be_deleted? }
context 'when the instructeur is an administrateur' do context 'when the instructeur is an administrateur' do
let!(:administrateur) { create(:administrateur) } let!(:administrateur) { administrateurs(:default_admin) }
let(:instructeur) { administrateur.instructeur } let(:instructeur) { administrateur.instructeur }
it { is_expected.to be false } it { is_expected.to be false }
@ -817,7 +817,7 @@ describe Instructeur, type: :model do
end end
context 'when the old instructeur is on on admin list' do context 'when the old instructeur is on on admin list' do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
before do before do
administrateur.instructeurs << old_instructeur administrateur.instructeurs << old_instructeur
@ -830,7 +830,7 @@ describe Instructeur, type: :model do
end end
context 'when both are on the same admin list' do context 'when both are on the same admin list' do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
before do before do
administrateur.instructeurs << old_instructeur administrateur.instructeurs << old_instructeur

View file

@ -1,6 +1,6 @@
describe Service, type: :model do describe Service, type: :model do
describe 'validation' do describe 'validation' do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:params) do let(:params) do
{ {
nom: 'service des jardins', nom: 'service des jardins',

View file

@ -122,7 +122,7 @@ describe User, type: :model do
end end
context 'with an administrateur' do context 'with an administrateur' do
let(:admins) { [create(:administrateur)] } let(:admins) { [administrateurs(:default_admin)] }
it do it do
user = subject user = subject
@ -141,7 +141,7 @@ describe User, type: :model do
end end
context 'with an existing instructeur' do context 'with an existing instructeur' do
let(:old_admins) { [create(:administrateur)] } let(:old_admins) { [administrateurs(:default_admin)] }
let(:admins) { [create(:administrateur)] } let(:admins) { [create(:administrateur)] }
let!(:instructeur) { create(:instructeur, email: 'i@mail.com', administrateurs: old_admins) } let!(:instructeur) { create(:instructeur, email: 'i@mail.com', administrateurs: old_admins) }
@ -237,7 +237,7 @@ describe User, type: :model do
describe 'invite_administrateur!' do describe 'invite_administrateur!' do
let(:super_admin) { create(:super_admin) } let(:super_admin) { create(:super_admin) }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:user) { administrateur.user } let(:user) { administrateur.user }
let(:mailer_double) { double('mailer', deliver_later: true) } let(:mailer_double) { double('mailer', deliver_later: true) }
@ -284,7 +284,7 @@ describe User, type: :model do
describe '#can_be_deleted?' do describe '#can_be_deleted?' do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:instructeur) { create(:instructeur) } let(:instructeur) { create(:instructeur) }
let(:expert) { create(:expert) } let(:expert) { create(:expert) }
@ -383,7 +383,7 @@ describe User, type: :model do
it { expect { subject }.not_to raise_error } it { expect { subject }.not_to raise_error }
it { expect { subject }.to change { FranceConnectInformation.count }.from(2).to(0) } it { expect { subject }.to change { FranceConnectInformation.count }.from(2).to(0) }
it { expect { subject }.to change { User.count }.from(1).to(0) } it { expect { subject }.to change { User.count }.by(-1) }
end end
end end

View file

@ -62,6 +62,8 @@ RSpec.configure do |config|
# instead of true. # instead of true.
config.use_transactional_fixtures = true config.use_transactional_fixtures = true
config.global_fixtures = :administrateurs, :instructeurs, :users
# RSpec Rails can automatically mix in different behaviours to your tests # RSpec Rails can automatically mix in different behaviours to your tests
# based on their file location, for example enabling you to call `get` and # based on their file location, for example enabling you to call `get` and
# `post` in specs under `spec/controllers`. # `post` in specs under `spec/controllers`.

View file

@ -1,13 +1,13 @@
describe AdministrateurDeletionService do describe AdministrateurDeletionService do
let(:super_admin) { create(:super_admin) } let(:super_admin) { create(:super_admin) }
let(:admin) { create(:administrateur) } let(:admin) { administrateurs(:default_admin) }
let(:service) { create(:service, administrateur: admin) } let(:service) { create(:service, administrateur: admin) }
let(:other_admin) { create(:administrateur) } let(:other_admin) { create(:administrateur) }
let(:procedure) { create(:procedure, service: service, administrateurs: [admin, other_admin]) } let(:procedure) { create(:procedure, service: service, administrateurs: [admin, other_admin]) }
let(:owned_procedure_service) { create(:service, administrateur: admin) } let(:owned_procedure_service) { create(:service, administrateur: admin) }
let(:owned_procedure) { create(:procedure, service: owned_procedure_service, administrateurs: [admin]) } let(:owned_procedure) { create(:procedure, service: owned_procedure_service, administrateurs: [admin]) }
describe '#call' do describe '' do
subject { AdministrateurDeletionService.new(super_admin, admin).call } subject { AdministrateurDeletionService.new(super_admin, admin).call }
context 'when admin can be deleted' do context 'when admin can be deleted' do

View file

@ -6,8 +6,8 @@ describe DossierSearchService do
described_class.matching_dossiers(instructeur_1.dossiers, terms) described_class.matching_dossiers(instructeur_1.dossiers, terms)
end end
let(:administrateur_1) { create(:administrateur) } let(:administrateur_1) { administrateurs(:default_admin) }
let(:administrateur_2) { create(:administrateur) } let(:administrateur_2) { administrateurs(:default_admin) }
let(:instructeur_1) { create(:instructeur, administrateurs: [administrateur_1]) } let(:instructeur_1) { create(:instructeur, administrateurs: [administrateur_1]) }
let(:instructeur_2) { create(:instructeur, administrateurs: [administrateur_2]) } let(:instructeur_2) { create(:instructeur, administrateurs: [administrateur_2]) }

View file

@ -4,7 +4,7 @@ describe Expired::DossiersDeletionService do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:procedure_opts) { {} } let(:procedure_opts) { {} }
let(:procedure) { create(:procedure, :published, procedure_opts) } let(:procedure) { create(:procedure, :published, procedure_opts) }
let(:procedure_2) { create(:procedure, :published, procedure_opts) } let(:procedure_2) { create(:procedure, :published, :new_administrateur, procedure_opts) }
let(:reference_date) { Date.parse("March 8") } let(:reference_date) { Date.parse("March 8") }
let(:service) { Expired::DossiersDeletionService.new } let(:service) { Expired::DossiersDeletionService.new }
describe '#process_expired_dossiers_brouillon' do describe '#process_expired_dossiers_brouillon' do

View file

@ -139,12 +139,12 @@ describe Expired::UsersDeletionService do
end end
context 'when user is expired and has an admin' do context 'when user is expired and has an admin' do
let(:user) { create(:user, administrateur: create(:administrateur), last_sign_in_at: last_signed_in_expired) } let(:user) { create(:user, administrateur: administrateurs(:default_admin), last_sign_in_at: last_signed_in_expired) }
it { is_expected.not_to include(user) } it { is_expected.not_to include(user) }
end end
context 'when user is expired but have a dossier' do context 'when user is expired but have a dossier' do
let(:user) { create(:user, administrateur: create(:administrateur), last_sign_in_at: last_signed_in_expired) } let(:user) { users(:default_user_admin).tap { _1.update(last_sign_in_at: last_signed_in_expired) } }
let(:dossier) { create(:dossier, :brouillon, user:, created_at: last_signed_in_expired) } let(:dossier) { create(:dossier, :brouillon, user:, created_at: last_signed_in_expired) }
it { is_expected.not_to include(user) } it { is_expected.not_to include(user) }
end end
@ -210,7 +210,7 @@ describe Expired::UsersDeletionService do
context 'when user is expired and has an admin' do context 'when user is expired and has an admin' do
let(:dossier) { create(:dossier, user:, created_at: last_signed_in_expired) } let(:dossier) { create(:dossier, user:, created_at: last_signed_in_expired) }
let(:user) { create(:user, administrateur: create(:administrateur), last_sign_in_at: last_signed_in_expired) } let(:user) { users(:default_user_admin).tap { _1.update(last_sign_in_at: last_signed_in_expired) } }
it { is_expected.not_to include(user) } it { is_expected.not_to include(user) }
end end
end end

View file

@ -1,7 +1,7 @@
describe ProcedureArchiveService do describe ProcedureArchiveService do
let(:procedure) { create(:procedure, :published, administrateurs: [administrateur]) } let(:procedure) { create(:procedure, :published, administrateurs: [administrateur]) }
let(:instructeur) { create(:instructeur) } let(:instructeur) { create(:instructeur) }
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:service) { ProcedureArchiveService.new(procedure) } let(:service) { ProcedureArchiveService.new(procedure) }
let(:year) { 2020 } let(:year) { 2020 }
let(:month) { 3 } let(:month) { 3 }

View file

@ -3,11 +3,11 @@ require 'system/administrateurs/procedure_spec_helper'
describe 'Administrateurs can manage administrateurs', js: true do describe 'Administrateurs can manage administrateurs', js: true do
include ProcedureSpecHelper include ProcedureSpecHelper
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let!(:procedure) { create(:procedure) } let(:procedure) { create(:procedure) }
let!(:administrateurs_procedure) { create(:administrateurs_procedure, administrateur: administrateur, procedure: procedure, manager: manager) }
let(:manager) { false } let(:manager) { false }
before do before do
procedure.administrateurs_procedures.update_all(manager:)
login_as administrateur.user, scope: :user login_as administrateur.user, scope: :user
end end

View file

@ -3,7 +3,7 @@ require 'system/administrateurs/procedure_spec_helper'
describe 'Creating a new procedure', js: true do describe 'Creating a new procedure', js: true do
include ProcedureSpecHelper include ProcedureSpecHelper
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:procedure) do let(:procedure) do
create(:procedure, :with_service, :with_instructeur, create(:procedure, :with_service, :with_instructeur,
aasm_state: :publiee, aasm_state: :publiee,

View file

@ -3,7 +3,7 @@ require 'system/administrateurs/procedure_spec_helper'
describe 'As an administrateur, I want to manage the procedures attestation', js: true do describe 'As an administrateur, I want to manage the procedures attestation', js: true do
include ProcedureSpecHelper include ProcedureSpecHelper
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:procedure) do let(:procedure) do
create(:procedure, :with_service, :with_instructeur, :with_zone, create(:procedure, :with_service, :with_instructeur, :with_zone,
aasm_state: :brouillon, aasm_state: :brouillon,

View file

@ -3,7 +3,7 @@ require 'system/administrateurs/procedure_spec_helper'
describe 'As an administrateur I wanna clone a procedure', js: true do describe 'As an administrateur I wanna clone a procedure', js: true do
include ProcedureSpecHelper include ProcedureSpecHelper
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
before do before do
create(:procedure, :with_service, :with_instructeur, :with_zone, create(:procedure, :with_service, :with_instructeur, :with_zone,

View file

@ -3,7 +3,7 @@ require 'system/administrateurs/procedure_spec_helper'
describe 'Closing a procedure', js: true do describe 'Closing a procedure', js: true do
include ProcedureSpecHelper include ProcedureSpecHelper
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let!(:procedure) do let!(:procedure) do
create(:procedure_with_dossiers, create(:procedure_with_dossiers,
:published, :published,

View file

@ -3,7 +3,7 @@ require 'system/administrateurs/procedure_spec_helper'
describe 'Creating a new procedure', js: true do describe 'Creating a new procedure', js: true do
include ProcedureSpecHelper include ProcedureSpecHelper
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
before do before do
login_as administrateur.user, scope: :user login_as administrateur.user, scope: :user

View file

@ -3,11 +3,11 @@ require 'system/administrateurs/procedure_spec_helper'
describe 'Manage procedure instructeurs', js: true do describe 'Manage procedure instructeurs', js: true do
include ProcedureSpecHelper include ProcedureSpecHelper
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let!(:procedure) { create(:procedure) } let(:procedure) { create(:procedure) }
let!(:administrateurs_procedure) { create(:administrateurs_procedure, administrateur: administrateur, procedure: procedure, manager: manager) }
let(:manager) { false } let(:manager) { false }
before do before do
procedure.administrateurs_procedures.update_all(manager:)
login_as administrateur.user, scope: :user login_as administrateur.user, scope: :user
end end

View file

@ -1,5 +1,5 @@
describe 'procedure locked' do describe 'procedure locked' do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
before do before do
login_as administrateur.user, scope: :user login_as administrateur.user, scope: :user

View file

@ -3,7 +3,7 @@ require 'system/administrateurs/procedure_spec_helper'
describe 'Publishing a procedure', js: true do describe 'Publishing a procedure', js: true do
include ProcedureSpecHelper include ProcedureSpecHelper
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:other_administrateur) { create(:administrateur) } let(:other_administrateur) { create(:administrateur) }
let(:instructeurs) { [administrateur.user.instructeur] } let(:instructeurs) { [administrateur.user.instructeur] }

View file

@ -3,7 +3,7 @@ require 'system/administrateurs/procedure_spec_helper'
describe 'Administrateurs can edit procedures', js: true do describe 'Administrateurs can edit procedures', js: true do
include ProcedureSpecHelper include ProcedureSpecHelper
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let!(:procedure) do let!(:procedure) do
create(:procedure_with_dossiers, create(:procedure_with_dossiers,
:published, :published,

View file

@ -1,5 +1,5 @@
describe 'fetch API Particulier Data', js: true do describe 'fetch API Particulier Data', js: true do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:expected_token) { 'd7e9c9f4c3ca00caadde31f50fd4521a' } let(:expected_token) { 'd7e9c9f4c3ca00caadde31f50fd4521a' }

View file

@ -4,7 +4,7 @@ describe 'BatchOperation a dossier:', js: true do
let(:password) { 'demarches-simplifiees' } let(:password) { 'demarches-simplifiees' }
let(:instructeur) { create(:instructeur, password: password) } let(:instructeur) { create(:instructeur, password: password) }
let(:procedure) { create(:simple_procedure, :published, instructeurs: [instructeur], administrateurs: [create(:administrateur)]) } let(:procedure) { create(:simple_procedure, :published, instructeurs: [instructeur], administrateurs: [administrateurs(:default_admin)]) }
context 'with an instructeur' do context 'with an instructeur' do
scenario 'create a BatchOperation' do scenario 'create a BatchOperation' do

View file

@ -1,5 +1,5 @@
describe 'Accessing the /patron page:' do describe 'Accessing the /patron page:' do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
before { sign_in administrateur.user } before { sign_in administrateur.user }
scenario 'I can display a page with all form fields and UI elements' do scenario 'I can display a page with all form fields and UI elements' do

View file

@ -29,7 +29,7 @@ describe 'Managing password:', js: true do
end end
context 'for admins' do context 'for admins' do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:user) { administrateur.user } let(:user) { administrateur.user }
let(:weak_password) { '12345678' } let(:weak_password) { '12345678' }
let(:strong_password) { 'a new, long, and complicated password!' } let(:strong_password) { 'a new, long, and complicated password!' }

View file

@ -1,6 +1,6 @@
describe 'Sign out' do describe 'Sign out' do
context 'when a user is logged in' do context 'when a user is logged in' do
let(:user) { create(:administrateur).user } let(:user) { administrateurs(:default_admin).user }
before { login_as user, scope: :user } before { login_as user, scope: :user }

View file

@ -1,5 +1,5 @@
describe 'administrateurs/procedures/zones' do describe 'administrateurs/procedures/zones' do
let(:administrateur) { create(:administrateur) } let(:administrateur) { administrateurs(:default_admin) }
let(:procedure) { create(:procedure) } let(:procedure) { create(:procedure) }
let(:populate_zones_task) { Rake::Task['after_party:populate_zones_with_tchap_hs'] } let(:populate_zones_task) { Rake::Task['after_party:populate_zones_with_tchap_hs'] }