From 8a1fc36e1d3df359c7ab87a5d3b40cf35b2a8604 Mon Sep 17 00:00:00 2001 From: Alex Kalderimis Date: Mon, 29 Jul 2019 14:36:35 -0400 Subject: Propagate argument errors as execution errors --- app/controllers/graphql_controller.rb | 4 ++++ spec/controllers/graphql_controller_spec.rb | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+) 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) } -- cgit v1.2.1