diff --git a/app/models/groupe_instructeur.rb b/app/models/groupe_instructeur.rb index a3aca8266..95d06694f 100644 --- a/app/models/groupe_instructeur.rb +++ b/app/models/groupe_instructeur.rb @@ -25,7 +25,15 @@ class GroupeInstructeur < ApplicationRecord validates :label, presence: true, allow_nil: false validates :label, uniqueness: { scope: :procedure } - validates :closed, acceptance: { accept: [false] }, if: -> { closed_changed? && self.procedure.groupe_instructeurs.active.one? } + validates :closed, acceptance: { accept: [false] }, if: -> do + if closed + other_groupes = procedure.groupe_instructeurs - [self] + + (other_groupes.map(&:closed) + [closed]).all? + else + false + end + end before_validation -> { label&.strip! } after_save :toggle_routing diff --git a/spec/models/procedure_spec.rb b/spec/models/procedure_spec.rb index a61564470..df79d17ab 100644 --- a/spec/models/procedure_spec.rb +++ b/spec/models/procedure_spec.rb @@ -523,6 +523,12 @@ describe Procedure do it "should clone instructeurs in the groupe" do expect(subject.groupe_instructeurs.where(label: "groupe_1").first.instructeurs.map(&:email)).to eq(procedure.groupe_instructeurs.where(label: "groupe_1").first.instructeurs.map(&:email)) end + + it 'should clone with success a second group instructeur closed' do + procedure.groupe_instructeurs.last.update(closed: true) + + expect { subject }.not_to raise_error + end end it 'should reset duree_conservation_etendue_par_ds' do