Merge pull request #10959 from thibpoullain/fix/procedure_minimal_admin
🛠️ Fix | Procedure minimal admins presence
This commit is contained in:
commit
f04e052dc9
2 changed files with 21 additions and 1 deletions
|
@ -119,7 +119,7 @@ class Procedure < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
has_many :administrateurs_procedures, dependent: :delete_all
|
has_many :administrateurs_procedures, dependent: :delete_all
|
||||||
has_many :administrateurs, through: :administrateurs_procedures, after_remove: -> (procedure, _admin) { procedure.validate! }
|
has_many :administrateurs, through: :administrateurs_procedures, before_remove: :check_administrateur_minimal_presence
|
||||||
has_many :groupe_instructeurs, -> { order(:label) }, inverse_of: :procedure, dependent: :destroy
|
has_many :groupe_instructeurs, -> { order(:label) }, inverse_of: :procedure, dependent: :destroy
|
||||||
has_many :instructeurs, through: :groupe_instructeurs
|
has_many :instructeurs, through: :groupe_instructeurs
|
||||||
has_many :export_templates, through: :groupe_instructeurs
|
has_many :export_templates, through: :groupe_instructeurs
|
||||||
|
@ -318,6 +318,12 @@ class Procedure < ApplicationRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def check_administrateur_minimal_presence(_object)
|
||||||
|
if self.administrateurs.count <= 1
|
||||||
|
raise ActiveRecord::RecordNotDestroyed.new("Cannot remove the last administrateur of procedure #{self.libelle} (#{self.id})")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def dossiers_close_to_expiration
|
def dossiers_close_to_expiration
|
||||||
dossiers.close_to_expiration.count
|
dossiers.close_to_expiration.count
|
||||||
end
|
end
|
||||||
|
|
|
@ -210,6 +210,20 @@ describe Procedure do
|
||||||
it { is_expected.not_to allow_value([]).for(:administrateurs) }
|
it { is_expected.not_to allow_value([]).for(:administrateurs) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'before_remove callback for minimal administrator presence' do
|
||||||
|
let(:procedure) { create(:procedure) }
|
||||||
|
|
||||||
|
it 'raises an error when trying to remove the last administrateur' do
|
||||||
|
expect(procedure.administrateurs.count).to eq(1)
|
||||||
|
expect {
|
||||||
|
procedure.administrateurs.destroy(procedure.administrateurs.first)
|
||||||
|
}.to raise_error(
|
||||||
|
ActiveRecord::RecordNotDestroyed,
|
||||||
|
"Cannot remove the last administrateur of procedure #{procedure.libelle} (#{procedure.id})"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'juridique' do
|
context 'juridique' do
|
||||||
it { is_expected.not_to allow_value(nil).on(:publication).for(:cadre_juridique) }
|
it { is_expected.not_to allow_value(nil).on(:publication).for(:cadre_juridique) }
|
||||||
it { is_expected.to allow_value('text').on(:publication).for(:cadre_juridique) }
|
it { is_expected.to allow_value('text').on(:publication).for(:cadre_juridique) }
|
||||||
|
|
Loading…
Reference in a new issue