demarches-normaliennes/spec/controllers/administrateurs/procedure_administrateurs_controller_spec.rb
2024-08-22 09:26:48 +02:00

62 lines
2.1 KiB
Ruby

# frozen_string_literal: true
describe Administrateurs::ProcedureAdministrateursController, type: :controller do
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!(:administrateurs_procedure) { create(:administrateurs_procedure, administrateur: signed_in_admin, procedure: procedure, manager: manager) }
let!(:procedure) { create(:procedure, administrateurs: [other_admin]) }
render_views
before do
sign_in(signed_in_admin.user)
end
describe '#create' do
context 'as manager' do
let(:manager) { true }
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) }
end
end
describe '#destroy' do
let(:manager) { false }
def destroy_admin(admin_to_remove)
delete :destroy, params: { procedure_id: procedure.id, id: admin_to_remove.id }, format: :turbo_stream
end
context 'when removing another admin' do
before do
destroy_admin(other_admin)
end
it 'removes the admin from the procedure' do
expect(response.body).to include('alert-success')
expect(other_admin.procedures.reload).not_to include(procedure)
end
context 'then removing oneself' do
before do
destroy_admin(signed_in_admin)
end
it 'removes the admin from the procedure' do
expect(response.body).to include('alert-danger')
expect(signed_in_admin.procedures.reload).to include(procedure)
end
end
end
context 'when removing oneself from a procedure' do
before do
destroy_admin(signed_in_admin)
end
it 'removes the admin from the procedure' do
expect(response).to redirect_to admin_procedures_path
expect(signed_in_admin.procedures.reload).not_to include(procedure)
end
end
end
end