chore(groupe instructeur): move closed validation for defaut groupe to model
This commit is contained in:
parent
43fb0ac338
commit
fc2c196cfa
5 changed files with 29 additions and 24 deletions
|
@ -147,20 +147,13 @@ module Administrateurs
|
||||||
def update_state
|
def update_state
|
||||||
@groupe_instructeur = procedure.groupe_instructeurs.find(params[:groupe_instructeur_id])
|
@groupe_instructeur = procedure.groupe_instructeurs.find(params[:groupe_instructeur_id])
|
||||||
|
|
||||||
if closed_params? && @groupe_instructeur.id == procedure.defaut_groupe_instructeur.id
|
if @groupe_instructeur.update(closed: params[:closed])
|
||||||
redirect_to admin_procedure_groupe_instructeur_path(procedure, @groupe_instructeur),
|
|
||||||
alert: "Il est impossible de désactiver le groupe d’instructeurs par défaut."
|
|
||||||
elsif @groupe_instructeur.update(closed: params[:closed])
|
|
||||||
state_for_notice = @groupe_instructeur.closed ? 'désactivé' : 'activé'
|
state_for_notice = @groupe_instructeur.closed ? 'désactivé' : 'activé'
|
||||||
redirect_to admin_procedure_groupe_instructeur_path(procedure, @groupe_instructeur),
|
redirect_to admin_procedure_groupe_instructeur_path(procedure, @groupe_instructeur),
|
||||||
notice: "Le groupe #{@groupe_instructeur.label} est #{state_for_notice}."
|
notice: "Le groupe #{@groupe_instructeur.label} est #{state_for_notice}."
|
||||||
else
|
else
|
||||||
@procedure = procedure
|
redirect_to admin_procedure_groupe_instructeur_path(procedure, @groupe_instructeur),
|
||||||
@instructeurs = paginated_instructeurs
|
alert: @groupe_instructeur.errors.messages_for(:closed).to_sentence
|
||||||
@available_instructeur_emails = available_instructeur_emails
|
|
||||||
|
|
||||||
flash.now[:alert] = @groupe_instructeur.errors.full_messages
|
|
||||||
render :show
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,8 @@ class GroupeInstructeur < ApplicationRecord
|
||||||
|
|
||||||
validates :label, presence: true, allow_nil: false
|
validates :label, presence: true, allow_nil: false
|
||||||
validates :label, uniqueness: { scope: :procedure }
|
validates :label, uniqueness: { scope: :procedure }
|
||||||
validates :closed, acceptance: { accept: [false] }, if: -> do
|
validates :closed, acceptance: { accept: [false], message: I18n.t('.activerecord.errors.models.groupe_instructeur.defaut') }, if: -> { (self == procedure.defaut_groupe_instructeur) }
|
||||||
|
validates :closed, acceptance: { accept: [false], message: 'Il doit y avoir au moins un groupe d’instructeurs actif sur chaque démarche' }, if: -> do
|
||||||
if closed
|
if closed
|
||||||
(other_groupe_instructeurs.map(&:closed) + [closed]).all?
|
(other_groupe_instructeurs.map(&:closed) + [closed]).all?
|
||||||
else
|
else
|
||||||
|
|
|
@ -15,4 +15,4 @@ fr:
|
||||||
format: "Le libellé %{message}"
|
format: "Le libellé %{message}"
|
||||||
closed:
|
closed:
|
||||||
format: "%{message}"
|
format: "%{message}"
|
||||||
accepted: Il doit y avoir au moins un groupe d’instructeurs actif sur chaque démarche
|
accepted: Il est impossible de désactiver le groupe d’instructeurs par défaut.
|
||||||
|
|
|
@ -639,9 +639,9 @@ describe API::V2::GraphqlController do
|
||||||
let(:variables) { { input: { groupeInstructeurId: dossier.groupe_instructeur.to_typed_id, closed: true } } }
|
let(:variables) { { input: { groupeInstructeurId: dossier.groupe_instructeur.to_typed_id, closed: true } } }
|
||||||
|
|
||||||
context 'with multiple groupes' do
|
context 'with multiple groupes' do
|
||||||
before do
|
let!(:defaut_groupe_instructeur) { create(:groupe_instructeur, procedure: procedure) }
|
||||||
create(:groupe_instructeur, procedure: procedure)
|
|
||||||
end
|
before { procedure.update(defaut_groupe_instructeur_id: defaut_groupe_instructeur.id) }
|
||||||
|
|
||||||
it {
|
it {
|
||||||
expect(gql_errors).to be_nil
|
expect(gql_errors).to be_nil
|
||||||
|
@ -656,10 +656,11 @@ describe API::V2::GraphqlController do
|
||||||
let(:types_de_champ_public) { [{ type: :drop_down_list }] }
|
let(:types_de_champ_public) { [{ type: :drop_down_list }] }
|
||||||
let(:groupe_instructeur) { procedure.groupe_instructeurs.first }
|
let(:groupe_instructeur) { procedure.groupe_instructeurs.first }
|
||||||
let(:routing_champ) { procedure.active_revision.types_de_champ.first }
|
let(:routing_champ) { procedure.active_revision.types_de_champ.first }
|
||||||
|
let!(:defaut_groupe_instructeur) { create(:groupe_instructeur, procedure: procedure) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
groupe_instructeur.update(routing_rule: ds_eq(champ_value(routing_champ.stable_id), constant(groupe_instructeur.label)))
|
groupe_instructeur.update(routing_rule: ds_eq(champ_value(routing_champ.stable_id), constant(groupe_instructeur.label)))
|
||||||
create(:groupe_instructeur, procedure: procedure)
|
procedure.update(defaut_groupe_instructeur_id: defaut_groupe_instructeur.id)
|
||||||
Flipper.enable(:groupe_instructeur_api_hack, procedure)
|
Flipper.enable(:groupe_instructeur_api_hack, procedure)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -675,7 +676,7 @@ describe API::V2::GraphqlController do
|
||||||
context 'validation error' do
|
context 'validation error' do
|
||||||
it {
|
it {
|
||||||
expect(gql_errors).to be_nil
|
expect(gql_errors).to be_nil
|
||||||
expect(gql_data[:groupeInstructeurModifier][:errors].first[:message]).to eq('Il doit y avoir au moins un groupe d’instructeurs actif sur chaque démarche')
|
expect(gql_data[:groupeInstructeurModifier][:errors].first[:message]).to eq('Il est impossible de désactiver le groupe d’instructeurs par défaut.')
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -99,14 +99,15 @@ describe GroupeInstructeur, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "active group validations" do
|
describe "active group validations" do
|
||||||
context "there is at least one active groupe instructeur" do
|
|
||||||
let(:gi_active) { procedure.defaut_groupe_instructeur }
|
let(:gi_active) { procedure.defaut_groupe_instructeur }
|
||||||
let(:gi_closed) { create(:groupe_instructeur, procedure:) }
|
let(:gi_closed) { create(:groupe_instructeur, procedure:) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
gi_active
|
gi_active
|
||||||
gi_closed.update(closed: true)
|
gi_closed.update(closed: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "there is one active groupe instructeur" do
|
||||||
it "closed is valid when there is one other active groupe" do
|
it "closed is valid when there is one other active groupe" do
|
||||||
expect(gi_active).to be_valid
|
expect(gi_active).to be_valid
|
||||||
expect(gi_closed).to be_valid
|
expect(gi_closed).to be_valid
|
||||||
|
@ -117,6 +118,15 @@ describe GroupeInstructeur, type: :model do
|
||||||
expect(gi_active).not_to be_valid
|
expect(gi_active).not_to be_valid
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "there are many active groupes instructeurs" do
|
||||||
|
let!(:second_gi_active) { create(:groupe_instructeur, procedure:) }
|
||||||
|
|
||||||
|
it "closed is invalid for defaut groupe instructeur even if many active groupes" do
|
||||||
|
gi_active.update(closed: true)
|
||||||
|
expect(gi_active).not_to be_valid
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
Loading…
Reference in a new issue