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