diff --git a/app/controllers/graphql_controller.rb b/app/controllers/graphql_controller.rb index 9fbbe373b0d..72d40f709e6 100644 --- a/app/controllers/graphql_controller.rb +++ b/app/controllers/graphql_controller.rb @@ -30,6 +30,10 @@ class GraphqlController < ApplicationController render_error(exception.message, status: :unprocessable_entity) end + rescue_from Gitlab::Graphql::Errors::ArgumentError do |exception| + render_error(exception.message, status: :unprocessable_entity) + end + private def execute_multiplex diff --git a/spec/controllers/graphql_controller_spec.rb b/spec/controllers/graphql_controller_spec.rb index c19a752b07b..9937bdf4061 100644 --- a/spec/controllers/graphql_controller_spec.rb +++ b/spec/controllers/graphql_controller_spec.rb @@ -7,6 +7,27 @@ describe GraphqlController do stub_feature_flags(graphql: true) end + describe 'ArgumentError' do + let(:user) { create(:user) } + let(:message) { 'green ideas sleep furiously' } + + before do + sign_in(user) + end + + it 'handles argument errors' do + allow(subject).to receive(:execute) do + raise Gitlab::Graphql::Errors::ArgumentError, message + end + + post :execute + + expect(json_response).to include( + 'errors' => include(a_hash_including('message' => message)) + ) + end + end + describe 'POST #execute' do context 'when user is logged in' do let(:user) { create(:user) }