summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrpereira2 <rpereira@gitlab.com>2019-01-31 18:05:03 +0530
committerrpereira2 <rpereira@gitlab.com>2019-02-07 10:37:05 +0530
commitffbf0f7905824399d15fbaf0fd57fdbcd2aeabfc (patch)
tree2be674d3ba3bf6a7d4bbcb56305ea1784dbf23fd
parentdb5448185867354a1c616edfa8409d463952c718 (diff)
downloadgitlab-ce-ffbf0f7905824399d15fbaf0fd57fdbcd2aeabfc.tar.gz
Handle case when error_tracking_setting is nil
- Build a new error_tracking_setting and use it to call list_projects. - Also return an error when Sentry api returns a response with expected keys missing.
-rw-r--r--app/services/error_tracking/list_sentry_projects_service.rb5
-rw-r--r--spec/services/error_tracking/list_sentry_projects_service_spec.rb27
2 files changed, 31 insertions, 1 deletions
diff --git a/app/services/error_tracking/list_sentry_projects_service.rb b/app/services/error_tracking/list_sentry_projects_service.rb
index e22e5e22743..955fe7d4a09 100644
--- a/app/services/error_tracking/list_sentry_projects_service.rb
+++ b/app/services/error_tracking/list_sentry_projects_service.rb
@@ -17,12 +17,14 @@ module ErrorTracking
rescue Sentry::Client::Error => e
error(e.message, :bad_request)
+ rescue Sentry::Client::SentryError => e
+ error(e.message, :unprocessable_entity)
end
private
def project_error_tracking_setting
- e = project.error_tracking_setting
+ e = project.error_tracking_setting || project.build_error_tracking_setting
e.api_url = ErrorTracking::ProjectErrorTrackingSetting.build_api_url_from(
api_host: params[:api_host],
@@ -31,6 +33,7 @@ module ErrorTracking
)
e.token = params[:token]
e.enabled = true
+
e
end
diff --git a/spec/services/error_tracking/list_sentry_projects_service_spec.rb b/spec/services/error_tracking/list_sentry_projects_service_spec.rb
index dfa10a1b04a..32607cec590 100644
--- a/spec/services/error_tracking/list_sentry_projects_service_spec.rb
+++ b/spec/services/error_tracking/list_sentry_projects_service_spec.rb
@@ -112,5 +112,32 @@ describe ErrorTracking::ListSentryProjectsService do
expect(result).to include(status: :success, projects: [])
end
end
+
+ context 'error_tracking_setting is nil' do
+ let(:new_api_host) { 'https://gitlab.com/' }
+ let(:new_token) { 'new-token' }
+ let(:params) { ActionController::Parameters.new(api_host: new_api_host, token: new_token) }
+
+ before do
+ expect(project).to receive(:error_tracking_setting).at_least(:once)
+ .and_return(nil)
+ end
+
+ it 'builds a new error_tracking_setting' do
+ sentry_client = spy(:sentry_client)
+
+ expect(Sentry::Client).to receive(:new)
+ .with(new_api_host + 'api/0/projects/', new_token)
+ .and_return(sentry_client)
+
+ expect(sentry_client).to receive(:list_projects)
+ .and_return([:project1, :project2])
+
+ result = subject.execute
+
+ expect(result[:projects]).to eq([:project1, :project2])
+ expect(project.error_tracking_setting).to be_nil
+ end
+ end
end
end