Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tech : déplace une validation sur le groupe d'instructeurs défaut du controleur au modèle #9392

Merged
merged 2 commits into from
Aug 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 3 additions & 10 deletions app/controllers/administrateurs/groupe_instructeurs_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -147,20 +147,13 @@ def update
def update_state
@groupe_instructeur = procedure.groupe_instructeurs.find(params[:groupe_instructeur_id])

if closed_params? && @groupe_instructeur.id == procedure.defaut_groupe_instructeur.id
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])
if @groupe_instructeur.update(closed: params[:closed])
state_for_notice = @groupe_instructeur.closed ? 'désactivé' : 'activé'
redirect_to admin_procedure_groupe_instructeur_path(procedure, @groupe_instructeur),
notice: "Le groupe #{@groupe_instructeur.label} est #{state_for_notice}."
else
@procedure = procedure
@instructeurs = paginated_instructeurs
@available_instructeur_emails = available_instructeur_emails

flash.now[:alert] = @groupe_instructeur.errors.full_messages
render :show
redirect_to admin_procedure_groupe_instructeur_path(procedure, @groupe_instructeur),
alert: @groupe_instructeur.errors.messages_for(:closed).to_sentence
end
end

Expand Down
8 changes: 1 addition & 7 deletions app/models/groupe_instructeur.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,7 @@ class GroupeInstructeur < ApplicationRecord

validates :label, presence: true, allow_nil: false
validates :label, uniqueness: { scope: :procedure }
validates :closed, acceptance: { accept: [false] }, if: -> do
if closed
(other_groupe_instructeurs.map(&:closed) + [closed]).all?
else
false
end
end
validates :closed, acceptance: { accept: [false] }, if: -> { (self == procedure.defaut_groupe_instructeur) }

before_validation -> { label&.strip! }

Expand Down
2 changes: 1 addition & 1 deletion config/locales/models/groupe_instructeur/fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ fr:
format: "Le libellé %{message}"
closed:
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.
Original file line number Diff line number Diff line change
Expand Up @@ -639,9 +639,9 @@
let(:variables) { { input: { groupeInstructeurId: dossier.groupe_instructeur.to_typed_id, closed: true } } }

context 'with multiple groupes' do
before do
create(:groupe_instructeur, procedure: procedure)
end
let!(:defaut_groupe_instructeur) { create(:groupe_instructeur, procedure: procedure) }

before { procedure.update(defaut_groupe_instructeur_id: defaut_groupe_instructeur.id) }

it {
expect(gql_errors).to be_nil
Expand All @@ -656,10 +656,11 @@
let(:types_de_champ_public) { [{ type: :drop_down_list }] }
let(:groupe_instructeur) { procedure.groupe_instructeurs.first }
let(:routing_champ) { procedure.active_revision.types_de_champ.first }
let!(:defaut_groupe_instructeur) { create(:groupe_instructeur, procedure: procedure) }

before do
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)
end

Expand All @@ -675,7 +676,7 @@
context 'validation error' do
it {
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
Expand Down
24 changes: 17 additions & 7 deletions spec/models/groupe_instructeur_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -99,14 +99,15 @@
end

describe "active group validations" do
context "there is at least one active groupe instructeur" do
let(:gi_active) { procedure.defaut_groupe_instructeur }
let(:gi_closed) { create(:groupe_instructeur, procedure:) }
before do
gi_active
gi_closed.update(closed: true)
end
let(:gi_active) { procedure.defaut_groupe_instructeur }
let(:gi_closed) { create(:groupe_instructeur, procedure:) }

before do
gi_active
gi_closed.update(closed: true)
end

context "there is one active groupe instructeur" do
it "closed is valid when there is one other active groupe" do
expect(gi_active).to be_valid
expect(gi_closed).to be_valid
Expand All @@ -117,6 +118,15 @@
expect(gi_active).not_to be_valid
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

private
Expand Down