app: remove old Admin::InstructeursController

It was only hosting the deprecated "Instructeurs globally attached to
this admin", which wasn't used anywhere in the app anymore.
This commit is contained in:
Pierre de La Morinerie 2021-08-31 15:54:45 -05:00
parent e87ab1dc40
commit 0f9d7d6b8c
9 changed files with 6 additions and 333 deletions

View file

@ -1,63 +0,0 @@
class Admin::InstructeursController < AdminController
include SmartListing::Helper::ControllerExtensions
helper SmartListing::Helper
def index
@instructeurs = smart_listing_create :instructeurs,
current_administrateur.instructeurs,
partial: "admin/instructeurs/list",
array: true
end
def create
email = params[:instructeur][:email].downcase
@instructeur = Instructeur.by_email(email)
procedure_id = params[:procedure_id]
procedure = Procedure.find_by(id: procedure_id)
if @instructeur.nil?
invite_instructeur(email)
else
assign_instructeur!
end
if procedure_id.present?
redirect_to admin_procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur)
else
redirect_to admin_instructeurs_path
end
end
def destroy
Instructeur.find(params[:id]).administrateurs.delete current_administrateur
redirect_to admin_instructeurs_path
end
private
def invite_instructeur(email)
user = User.create_or_promote_to_instructeur(
email,
SecureRandom.hex,
administrateurs: [current_administrateur]
)
if user.valid?
user.invite!
flash.notice = 'Instructeur ajouté'
else
flash.alert = user.errors.full_messages
end
end
def assign_instructeur!
if current_administrateur.instructeurs.include?(@instructeur)
flash.alert = 'Instructeur déjà ajouté'
else
@instructeur.administrateurs.push current_administrateur
flash.notice = 'Instructeur ajouté'
# TODO Mailer no assign_to
end
end
end

View file

@ -1,4 +0,0 @@
.form-group
%p.notice
= 'Email *'
= text_field_tag 'instructeur[email]', nil, class: 'form-control', placeholder: 'ex : laura.azema@exemple.gouv.fr'

View file

@ -1,22 +0,0 @@
- if smart_listing.present?
%table.table#liste-instructeur
%thead
%th#libelle= smart_listing.sortable 'Email', 'email'
%th
- @instructeurs.each do |instructeur|
%tr
%td{ style: 'padding-top: 11px; font-size: 15px;' }= instructeur.email
%td{ style: 'text-align: right;' }
.delete.btn.btn-sm.fa.fa-trash
.confirm
= link_to 'Valider', admin_instructeur_path(id: instructeur.id), { method: :delete, class: 'btn btn-sm btn-success' }
.cancel.btn.btn-sm.btn-danger.fa.fa-minus{ style: 'top: 0;' }
= smart_listing.paginate
= smart_listing.pagination_per_page_links
- else
%h4.center
Aucun instructeur

View file

@ -1,28 +0,0 @@
%h1 Instructeurs disponibles
%p
Cette page vous permet de gérer la liste des instructeurs disponibles pour être affectés à une démarche.
%p{ style: 'font-style: italic' }
N.B. : cette page ne concerne que la liste des personnes disponibles. Si vous souhaitez affecter ou enlever un instructeur dune démarche particulière,
utilisez plutôt la
= link_to "page de la démarche", admin_procedures_path
concernée.
.row
.col-xs-4
= smart_listing_render :instructeurs
.col-xs-1
&nbsp;
.col-xs-6
%h3 Ajouter un instructeur
#procedure_new.section.section-label
= form_with url: { controller: 'admin/instructeurs', action: :create } do
.row
.col-xs-5
= render partial: 'admin/instructeurs/informations'
.col-xs-2
%br
%br
= submit_tag 'Ajouter', class: 'btn btn-info', style: 'float: left;'

View file

@ -1 +0,0 @@
<%= smart_listing_update :instructeurs %>

View file

@ -212,8 +212,6 @@ Rails.application.routes.draw do
namespace :assigns do
get 'show' # delete after fixed tests admin/instructeurs/show_spec without this line
end
resources :instructeurs, only: [:index, :create, :destroy]
end
resources :invites, only: [:show, :destroy] do

View file

@ -1,177 +0,0 @@
describe Admin::InstructeursController, type: :controller do
let(:admin) { create(:administrateur) }
let(:email_2) { 'plip@octo.com' }
let(:admin_2) { create :administrateur, email: email_2 }
before do
sign_in(admin.user)
end
describe 'GET #index' do
subject { get :index }
it { expect(subject.status).to eq(200) }
end
describe 'GET #index with sorting and pagination' do
subject {
get :index, params: {
'instructeurs_smart_listing[page]': 1,
'instructeurs_smart_listing[per_page]': 10,
'instructeurs_smart_listing[sort][email]': 'asc'
}
}
it { expect(subject.status).to eq(200) }
end
describe 'POST #create' do
let(:email) { 'test@plop.com' }
let(:procedure_id) { nil }
subject { post :create, params: { instructeur: { email: email }, procedure_id: procedure_id } }
context 'When email is valid' do
before do
subject
end
let(:instructeur) { Instructeur.last }
it { expect(response.status).to eq(302) }
it { expect(response).to redirect_to admin_instructeurs_path }
context 'when procedure_id params is not null' do
let(:procedure) { create :procedure }
let(:procedure_id) { procedure.id }
it { expect(response.status).to eq(302) }
it { expect(response).to redirect_to admin_procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur) }
end
describe 'Instructeur attributs in database' do
it { expect(instructeur.email).to eq(email) }
end
describe 'New instructeur is assign to the admin' do
it { expect(instructeur.administrateurs).to include admin }
it { expect(admin.instructeurs).to include instructeur }
end
end
context 'when email is not valid' do
before do
subject
end
let(:email) { 'piou' }
it { expect(response.status).to eq(302) }
it { expect { response }.not_to change(Instructeur, :count) }
it { expect(flash[:alert]).to be_present }
describe 'Email Notification' do
it {
expect(InstructeurMailer).not_to receive(:new_instructeur)
expect(InstructeurMailer).not_to receive(:deliver_later)
subject
}
end
end
context 'when email is empty' do
before do
subject
end
let(:email) { '' }
it { expect(response.status).to eq(302) }
it { expect { response }.not_to change(Instructeur, :count) }
it 'Notification email is not send' do
expect(InstructeurMailer).not_to receive(:new_instructeur)
expect(InstructeurMailer).not_to receive(:deliver_later)
end
end
context 'when email is already assign at the admin' do
before do
create :instructeur, email: email, administrateurs: [admin]
subject
end
it { expect(response.status).to eq(302) }
it { expect { response }.not_to change(Instructeur, :count) }
it { expect(flash[:alert]).to be_present }
describe 'Email notification' do
it 'is not sent when email already exists' do
expect(InstructeurMailer).not_to receive(:new_instructeur)
expect(InstructeurMailer).not_to receive(:deliver_later)
subject
end
end
end
context 'when an other admin will add the same email' do
let(:instructeur) { Instructeur.by_email(email) }
before do
create :instructeur, email: email, administrateurs: [admin]
sign_out(admin.user)
sign_in(admin_2.user)
subject
end
it { expect(response.status).to eq(302) }
it { expect { response }.not_to change(Instructeur, :count) }
it { expect(flash[:notice]).to be_present }
it { expect(admin_2.instructeurs).to include instructeur }
it { expect(instructeur.administrateurs.size).to eq 2 }
end
context 'when an other admin will add the same email with some uppercase in it' do
let(:email) { 'Test@Plop.com' }
let(:instructeur) { Instructeur.by_email(email.downcase) }
before do
create :instructeur, email: email, administrateurs: [admin]
sign_out(admin.user)
sign_in(admin_2.user)
subject
end
it { expect(admin_2.instructeurs).to include instructeur }
end
context 'Email notification' do
it 'Notification email is sent when instructeur is create' do
expect_any_instance_of(User).to receive(:invite!)
subject
end
end
end
describe 'DELETE #destroy' do
let(:email) { 'test@plop.com' }
let!(:admin) { create :administrateur }
let!(:instructeur) { create :instructeur, email: email, administrateurs: [admin] }
subject { delete :destroy, params: { id: instructeur.id } }
context "when gestionaire_id is valid" do
before do
subject
admin.reload
instructeur.reload
end
it { expect(response.status).to eq(302) }
it { expect(response).to redirect_to admin_instructeurs_path }
it { expect(admin.instructeurs).not_to include instructeur }
it { expect(instructeur.administrateurs).not_to include admin }
end
it { expect { subject }.not_to change(Instructeur, :count) }
end
end

View file

@ -5,13 +5,14 @@ feature 'As an instructeur', js: true do
before do
login_as administrateur.user, scope: :user
visit admin_instructeurs_path
fill_in :instructeur_email, with: instructeur_email
visit admin_procedure_path(procedure)
find('#groupe-instructeurs').click
perform_enqueued_jobs do
click_button 'Ajouter'
end
find("input[aria-label='email instructeur'").send_keys(instructeur_email, :enter)
perform_enqueued_jobs { click_on 'Affecter' }
expect(page).to have_text("Les instructeurs ont bien été affectés à la démarche")
end
scenario 'I can register' do

View file

@ -1,31 +0,0 @@
describe 'admin/instructeurs/index.html.haml', type: :view do
let(:admin) { create(:administrateur) }
before do
assign(:instructeurs, (smart_listing_create :instructeurs,
admin.instructeurs,
partial: "admin/instructeurs/list",
array: true))
assign(:instructeur, create(:instructeur))
end
context 'Aucun instructeur' do
before do
render
end
it { expect(rendered).to have_content('Aucun instructeur') }
end
context 'Ajout d\'un instructeur' do
before do
create(:instructeur, administrateurs: [admin])
admin.reload
assign(:instructeurs, (smart_listing_create :instructeurs,
admin.instructeurs,
partial: "admin/instructeurs/list",
array: true))
render
end
it { expect(rendered).to match(/inst\d+@inst.com/) }
end
end