Merge pull request #5741 from tchak/better-error-on-graphql-file-upload
[GraphQL] add better errors when attachments are not properly used
This commit is contained in:
commit
5f3cc9daa3
6 changed files with 56 additions and 0 deletions
|
@ -1,4 +1,16 @@
|
|||
module Mutations
|
||||
class BaseMutation < GraphQL::Schema::RelayClassicMutation
|
||||
def validate_blob(blob_id)
|
||||
if blob_id.present?
|
||||
begin
|
||||
blob = ActiveStorage::Blob.find_signed(blob_id)
|
||||
blob.identify
|
||||
rescue ActiveStorage::FileNotFoundError
|
||||
return { errors: ['Le fichier n’a pas été correctement téléversé sur le serveur de stockage'] }
|
||||
rescue ActiveSupport::MessageVerifier::InvalidSignature
|
||||
return { errors: ['L’identifiant du fichier téléversé est invalide'] }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -14,6 +14,10 @@ module Mutations
|
|||
|
||||
def resolve(dossier:, instructeur:, motivation: nil, justificatif: nil)
|
||||
if dossier.en_instruction?
|
||||
errors = validate_blob(justificatif)
|
||||
if errors
|
||||
return errors
|
||||
end
|
||||
dossier.accepter!(instructeur, motivation, justificatif)
|
||||
|
||||
{ dossier: dossier }
|
||||
|
|
|
@ -14,6 +14,10 @@ module Mutations
|
|||
|
||||
def resolve(dossier:, instructeur:, motivation:, justificatif: nil)
|
||||
if dossier.en_instruction?
|
||||
errors = validate_blob(justificatif)
|
||||
if errors
|
||||
return errors
|
||||
end
|
||||
dossier.classer_sans_suite!(instructeur, motivation, justificatif)
|
||||
|
||||
{ dossier: dossier }
|
||||
|
|
|
@ -11,6 +11,10 @@ module Mutations
|
|||
field :errors, [Types::ValidationErrorType], null: true
|
||||
|
||||
def resolve(dossier:, instructeur:, body:, attachment: nil)
|
||||
errors = validate_blob(attachment)
|
||||
if errors
|
||||
return errors
|
||||
end
|
||||
message = CommentaireService.build(instructeur, dossier, body: body, piece_jointe: attachment)
|
||||
|
||||
if message.save
|
||||
|
|
|
@ -14,6 +14,10 @@ module Mutations
|
|||
|
||||
def resolve(dossier:, instructeur:, motivation:, justificatif: nil)
|
||||
if dossier.en_instruction?
|
||||
errors = validate_blob(justificatif)
|
||||
if errors
|
||||
return errors
|
||||
end
|
||||
dossier.refuser!(instructeur, motivation, justificatif)
|
||||
|
||||
{ dossier: dossier }
|
||||
|
|
|
@ -604,6 +604,34 @@ describe API::V2::GraphqlController do
|
|||
})
|
||||
end
|
||||
end
|
||||
|
||||
context 'upload error' do
|
||||
let(:query) do
|
||||
"mutation {
|
||||
dossierEnvoyerMessage(input: {
|
||||
dossierId: \"#{dossier.to_typed_id}\",
|
||||
instructeurId: \"#{instructeur.to_typed_id}\",
|
||||
body: \"Hello world\",
|
||||
attachment: \"fake\"
|
||||
}) {
|
||||
message {
|
||||
body
|
||||
}
|
||||
errors {
|
||||
message
|
||||
}
|
||||
}
|
||||
}"
|
||||
end
|
||||
|
||||
it "should fail" do
|
||||
expect(gql_errors).to eq(nil)
|
||||
expect(gql_data).to eq(dossierEnvoyerMessage: {
|
||||
errors: [{ message: "L’identifiant du fichier téléversé est invalide" }],
|
||||
message: nil
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'dossierPasserEnInstruction' do
|
||||
|
|
Loading…
Reference in a new issue