supprime un instructeur
This commit is contained in:
parent
d4de5769ee
commit
a6d007dbd3
6 changed files with 74 additions and 4 deletions
|
@ -6,5 +6,19 @@ module Manager
|
|||
flash[:notice] = "Instructeur réinvité."
|
||||
redirect_to manager_instructeur_path(instructeur)
|
||||
end
|
||||
|
||||
def delete
|
||||
instructeur = Instructeur.find(params[:id])
|
||||
|
||||
if !instructeur.can_be_deleted?
|
||||
fail "Impossible de supprimer cet instructeur car il est administrateur ou il est le seul instructeur sur une démarche"
|
||||
end
|
||||
instructeur.destroy
|
||||
|
||||
logger.info("L'instructeur #{instructeur.id} est supprimé par #{current_administration.id}")
|
||||
flash[:notice] = "L'instructeur #{instructeur.id} est supprimé"
|
||||
|
||||
redirect_to manager_instructeurs_path
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -17,9 +17,9 @@ class Instructeur < ApplicationRecord
|
|||
has_many :previously_followed_dossiers, -> { distinct }, through: :previous_follows, source: :dossier
|
||||
has_many :avis
|
||||
has_many :dossiers_from_avis, through: :avis, source: :dossier
|
||||
has_many :trusted_device_tokens
|
||||
has_many :trusted_device_tokens, dependent: :destroy
|
||||
|
||||
has_one :user
|
||||
has_one :user, dependent: :nullify
|
||||
|
||||
default_scope { eager_load(:user) }
|
||||
|
||||
|
@ -176,6 +176,10 @@ class Instructeur < ApplicationRecord
|
|||
trusted_device_token&.token_young?
|
||||
end
|
||||
|
||||
def can_be_deleted?
|
||||
user.administrateur.nil? && procedures.all? { |p| p.defaut_groupe_instructeur.instructeurs.count > 1 }
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def annotations_hash(demande, annotations_privees, avis, messagerie)
|
||||
|
|
|
@ -34,7 +34,10 @@ as well as a link to its edit page.
|
|||
|
||||
<div>
|
||||
<%= link_to 'Réinviter', reinvite_manager_instructeur_path(instructeur), method: :post, class: 'button' %>
|
||||
</div>
|
||||
<div>
|
||||
<%= button_to "Supprimer", delete_manager_instructeur_path(page.resource), method: :delete, disabled: !page.resource.can_be_deleted?, class: "button", data: { confirm: "Confirmez-vous la suppression de l'instructeur ?" }, title: page.resource.can_be_deleted? ? "Supprimer" : "Cet instructeur est administrateur ou a des démarches dont il est le seul instructeur et ne peut être supprimé" %>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section class="main-content__body">
|
||||
|
|
|
@ -32,6 +32,7 @@ Rails.application.routes.draw do
|
|||
|
||||
resources :instructeurs, only: [:index, :show] do
|
||||
post 'reinvite', on: :member
|
||||
delete 'delete', on: :member
|
||||
end
|
||||
|
||||
resources :dossiers, only: [:show]
|
||||
|
|
17
spec/controllers/manager/instructeurs_controller_spec.rb
Normal file
17
spec/controllers/manager/instructeurs_controller_spec.rb
Normal file
|
@ -0,0 +1,17 @@
|
|||
describe Manager::InstructeursController, type: :controller do
|
||||
let(:administration) { create(:administration) }
|
||||
|
||||
describe '#delete' do
|
||||
let!(:instructeur) { create(:instructeur) }
|
||||
|
||||
before { sign_in administration }
|
||||
|
||||
subject { delete :delete, params: { id: instructeur.id } }
|
||||
|
||||
it 'deletes the instructeur' do
|
||||
subject
|
||||
|
||||
expect(Instructeur.find_by(id: instructeur.id)).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
|
@ -424,9 +424,40 @@ describe Instructeur, type: :model do
|
|||
it { expect(instructeur_a.procedures.all.to_ary).to eq([procedure_a]) }
|
||||
end
|
||||
|
||||
describe "#can_be_deleted?" do
|
||||
subject { instructeur.can_be_deleted? }
|
||||
|
||||
context 'when the instructeur is an administrateur' do
|
||||
let!(:administrateur) { create(:administrateur) }
|
||||
let(:instructeur) { administrateur.instructeur }
|
||||
|
||||
it { is_expected.to be false }
|
||||
end
|
||||
|
||||
context "when the instructeur's procedures have other instructeurs" do
|
||||
let(:instructeur_not_admin) { create(:instructeur) }
|
||||
let(:autre_instructeur) { create(:instructeur) }
|
||||
|
||||
it "can be deleted" do
|
||||
assign(procedure, instructeur_assigne: instructeur_not_admin)
|
||||
assign(procedure, instructeur_assigne: autre_instructeur)
|
||||
expect(autre_instructeur.can_be_deleted?).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context "when the instructeur's procedures is the only one" do
|
||||
let(:instructeur_not_admin) { create :instructeur }
|
||||
let(:autre_procedure) { create :procedure }
|
||||
it "can be deleted" do
|
||||
assign(autre_procedure, instructeur_assigne: instructeur_not_admin)
|
||||
expect(instructeur_not_admin.can_be_deleted?).to be_falsy
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def assign(procedure_to_assign)
|
||||
create :assign_to, instructeur: instructeur, procedure: procedure_to_assign, groupe_instructeur: procedure_to_assign.defaut_groupe_instructeur
|
||||
def assign(procedure_to_assign, instructeur_assigne: instructeur)
|
||||
create :assign_to, instructeur: instructeur_assigne, procedure: procedure_to_assign, groupe_instructeur: procedure_to_assign.defaut_groupe_instructeur
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue