demarches-normaliennes/spec/controllers/gestionnaires/groupe_gestionnaire_gestionnaires_controller_spec.rb

61 lines
2.2 KiB
Ruby

describe Gestionnaires::GroupeGestionnaireGestionnairesController, type: :controller do
let(:gestionnaire) { create(:gestionnaire).tap { _1.user.update(last_sign_in_at: Time.zone.now) } }
let(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) }
before { sign_in gestionnaire.user }
describe '#create' do
before do
post :create,
params: {
groupe_gestionnaire_id: groupe_gestionnaire.id,
gestionnaire: { email: new_gestionnaire_email }
},
format: :turbo_stream
end
context 'of a new gestionnaire' do
let(:new_gestionnaire_email) { 'new_gestionnaire@mail.com' }
it { expect(groupe_gestionnaire.reload.gestionnaires.map(&:email)).to include(new_gestionnaire_email) }
it { expect(flash.notice).to eq("Les gestionnaires ont bien été affectés au groupe d'administrateurs") }
end
end
describe '#destroy' do
let(:gestionnaire) { create(:gestionnaire) }
let(:new_gestionnaire) { create(:gestionnaire) }
before do
groupe_gestionnaire.gestionnaires << gestionnaire << new_gestionnaire
end
def remove_gestionnaire(gestionnaire)
delete :destroy,
params: {
groupe_gestionnaire_id: groupe_gestionnaire.id,
id: gestionnaire.id
},
format: :turbo_stream
end
context 'when there are many gestionnaires' do
before { remove_gestionnaire(new_gestionnaire) }
it { expect(groupe_gestionnaire.gestionnaires).to include(gestionnaire) }
it { expect(groupe_gestionnaire.reload.gestionnaires.count).to eq(1) }
it { expect(flash.notice).to eq("Le gestionnaire « #{new_gestionnaire.email} » a été retiré du groupe.") }
end
context 'when there is only one gestionnaire' do
before do
remove_gestionnaire(new_gestionnaire)
remove_gestionnaire(gestionnaire)
end
it { expect(groupe_gestionnaire.gestionnaires).to include(gestionnaire) }
it { expect(groupe_gestionnaire.gestionnaires.count).to eq(1) }
it { expect(flash.alert).to eq('Suppression impossible : il doit y avoir au moins un gestionnaire dans le groupe racine') }
end
end
end