From aca11d6c93c9daeced9674785dc22938013429a2 Mon Sep 17 00:00:00 2001 From: Vladlena Shumilo <vshumilo@gitlab.com> Date: Tue, 28 Sep 2021 17:53:34 -0500 Subject: [PATCH] Subscription portal update_namespace_name update Update Subscription portal update_namespace_name logic to handle top level errors and fail --- .../subscription_portal/clients/graphql.rb | 9 ++--- .../clients/graphql_spec.rb | 35 ++++++++++++------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/ee/lib/gitlab/subscription_portal/clients/graphql.rb b/ee/lib/gitlab/subscription_portal/clients/graphql.rb index 34e4aefb4fd..d186efad6c0 100644 --- a/ee/lib/gitlab/subscription_portal/clients/graphql.rb +++ b/ee/lib/gitlab/subscription_portal/clients/graphql.rb @@ -183,13 +183,10 @@ module Gitlab return error(CONNECTIVITY_ERROR) unless response[:success] - response = response.dig(:data, 'data', 'orderNamespaceNameUpdate') + errors = response.dig(:data, 'errors') || + response.dig(:data, 'data', 'orderNamespaceNameUpdate', 'errors') - if response['errors'].blank? - { success: true } - else - error(response['errors']) - end + errors.blank? ? { success: true } : error(errors) rescue Gitlab::HTTP::BlockedUrlError, HTTParty::Error, Errno::ECONNREFUSED, Errno::ECONNRESET, SocketError, Timeout::Error => e Gitlab::ErrorTracking.log_exception(e) error(CONNECTIVITY_ERROR) diff --git a/ee/spec/lib/gitlab/subscription_portal/clients/graphql_spec.rb b/ee/spec/lib/gitlab/subscription_portal/clients/graphql_spec.rb index d7785fa702c..f52c8fba380 100644 --- a/ee/spec/lib/gitlab/subscription_portal/clients/graphql_spec.rb +++ b/ee/spec/lib/gitlab/subscription_portal/clients/graphql_spec.rb @@ -400,45 +400,54 @@ RSpec.describe Gitlab::SubscriptionPortal::Clients::Graphql do } ) - result = update_request + expect(update_request).to eq({ success: true }) + end + + it 'returns top level errors' do + top_level_errors = ['Validation error', 'Errors in query execution'] - expect(result).to eq({ success: true }) + expect(client).to receive(:execute_graphql_query).and_return( + { + success: true, + data: { + 'errors' => top_level_errors + } + } + ) + + expect(update_request).to eq({ errors: top_level_errors, success: false }) end - it 'returns failure' do + it 'returns errors as data' do + errors_as_data = ['error updating the name'] + expect(client).to receive(:execute_graphql_query).and_return( { success: true, data: { 'data' => { 'orderNamespaceNameUpdate' => { - 'errors' => ['error updating the name'] + 'errors' => errors_as_data } } } } ) - result = update_request - - expect(result).to eq({ errors: ['error updating the name'], success: false }) + expect(update_request).to eq({ errors: errors_as_data, success: false }) end it 'returns connectivity error when remote server returns error' do stub_request(:any, EE::SUBSCRIPTIONS_GRAPHQL_URL).to_return(status: [500, "Internal Server Error"]) - result = update_request - - expect(result).to eq({ errors: described_class::CONNECTIVITY_ERROR, success: false }) + expect(update_request).to eq({ errors: described_class::CONNECTIVITY_ERROR, success: false }) end it 'returns connectivity error when the remote server is unreachable' do stub_request(:any, EE::SUBSCRIPTIONS_GRAPHQL_URL).to_timeout allow(Gitlab::ErrorTracking).to receive(:log_exception) - result = update_request - - expect(result).to eq({ errors: described_class::CONNECTIVITY_ERROR, success: false }) + expect(update_request).to eq({ errors: described_class::CONNECTIVITY_ERROR, success: false }) expect(Gitlab::ErrorTracking).to have_received(:log_exception).with(kind_of(Timeout::Error)) end end -- 2.30.9