fix(graphql): return better errors when dossiers cannot change state

This commit is contained in:
Paul Chavard 2023-04-03 19:01:01 +02:00
parent 46ce685ad0
commit a778e1083b
3 changed files with 23 additions and 2 deletions

View file

@ -28,7 +28,9 @@ module Mutations
end end
def authorized?(dossier:, instructeur:, **args) def authorized?(dossier:, instructeur:, **args)
if !dossier.en_instruction? if dossier.en_instruction? && dossier.any_etablissement_as_degraded_mode?
return false, { errors: ["Les informations du SIRET du dossier ne sont pas complètes. Veuillez réessayer plus tard."] }
elsif !dossier.en_instruction? || !dossier.can_terminer?
return false, { errors: ["Le dossier est déjà #{dossier_display_state(dossier, lower: true)}"] } return false, { errors: ["Le dossier est déjà #{dossier_display_state(dossier, lower: true)}"] }
end end

View file

@ -18,7 +18,7 @@ module Mutations
end end
def authorized?(dossier:, instructeur:, **args) def authorized?(dossier:, instructeur:, **args)
if !dossier.termine? if !dossier.can_repasser_en_instruction?
return false, { errors: ["Le dossier est déjà #{dossier_display_state(dossier, lower: true)}"] } return false, { errors: ["Le dossier est déjà #{dossier_display_state(dossier, lower: true)}"] }
end end
dossier_authorized_for?(dossier, instructeur) dossier_authorized_for?(dossier, instructeur)

View file

@ -315,6 +315,25 @@ describe API::V2::GraphqlController do
expect(gql_data[:dossierAccepter][:errors].first[:message]).to eq('Le jeton utilisé est configuré seulement en lecture') expect(gql_data[:dossierAccepter][:errors].first[:message]).to eq('Le jeton utilisé est configuré seulement en lecture')
} }
end end
context 'when already rejected' do
let(:dossier) { create(:dossier, :refuse, :with_individual, procedure:) }
it {
expect(gql_data[:dossierAccepter][:errors].first[:message]).to eq('Le dossier est déjà refusé')
}
end
context 'when in degraded mode' do
let(:procedure) { create(:procedure, :published, :with_service, administrateurs: [admin]) }
let(:dossier) { create(:dossier, :en_instruction, :with_entreprise, procedure:) }
before { dossier.etablissement.update(adresse: nil) }
it {
expect(gql_data[:dossierAccepter][:errors].first[:message]).to eq('Les informations du SIRET du dossier ne sont pas complètes. Veuillez réessayer plus tard.')
}
end
end end
context 'dossierRefuser' do context 'dossierRefuser' do