From 52aabeb4363e73ffcf5d72f8d1c464b75d9dd69a Mon Sep 17 00:00:00 2001 From: Jan Krutisch Date: Tue, 6 Nov 2018 12:18:35 +0100 Subject: [PATCH 1/2] Fixes a bug in handling "Spam detected" messages This handles error responses created by Gitlab.com's spam protection correctly. The error message is nested in a slightly off way (I believe this is a bug), causing the error message formatting code to blow up as it tries to join a string. --- lib/gitlab/error.rb | 2 +- spec/gitlab/error_spec.rb | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/gitlab/error.rb b/lib/gitlab/error.rb index a19d80851..6fc048db4 100644 --- a/lib/gitlab/error.rb +++ b/lib/gitlab/error.rb @@ -59,7 +59,7 @@ def handle_message(message) case message when Gitlab::ObjectifiedHash message.to_h.sort.map do |key, val| - "'#{key}' #{(val.is_a?(Hash) ? val.sort.map { |k, v| "(#{k}: #{v.join(' ')})" } : val).join(' ')}" + "'#{key}' #{(val.is_a?(Hash) ? val.sort.map { |k, v| "(#{k}: #{v.join(' ')})" } : [val].flatten).join(' ')}" end.join(', ') when Array message.join(' ') diff --git a/spec/gitlab/error_spec.rb b/spec/gitlab/error_spec.rb index 6c0217ff0..2c777de96 100644 --- a/spec/gitlab/error_spec.rb +++ b/spec/gitlab/error_spec.rb @@ -13,7 +13,8 @@ %r{Server responded with code \d+, message: Displayed error_description. Request URI: https://gitlab.com/api/v3/foo}, %r{Server responded with code \d+, message: Displayed error. Request URI: https://gitlab.com/api/v3/foo}, %r{Server responded with code \d+, message: 'embed_entity' \(foo: bar\) \(sna: fu\), 'password' too short. Request URI: https://gitlab.com/api/v3/foo}, - %r{Server responded with code \d+, message: First message. Second message.. Request URI: https://gitlab.com/api/v3/foo} + %r{Server responded with code \d+, message: First message. Second message.. Request URI: https://gitlab.com/api/v3/foo}, + %r{Server responded with code \d+, message: 'error' Spam detected. Request URI: https://gitlab.com/api/v3/foo} ] end @@ -23,7 +24,9 @@ { code: 404, parsed_response: Gitlab::ObjectifiedHash.new(error_description: 'Displayed error_description', error: 'also will not be displayed') }, { code: 401, parsed_response: Gitlab::ObjectifiedHash.new(error: 'Displayed error') }, { code: 500, parsed_response: Gitlab::ObjectifiedHash.new(embed_entity: { foo: ['bar'], sna: ['fu'] }, password: ['too short']) }, - { code: 403, parsed_response: Array.new(['First message.', 'Second message.']) } + { code: 403, parsed_response: Array.new(['First message.', 'Second message.']) }, + { code: 400, parsed_response: Gitlab::ObjectifiedHash.new(message: { error: 'Spam detected' } ) } + ].each_with_index do |data, index| it 'returns the expected message' do response_double = double(**data, request: @request_double) From 131c204ec9dbb625b978b7186eeb52d35610ebb5 Mon Sep 17 00:00:00 2001 From: Jan Krutisch Date: Tue, 6 Nov 2018 12:31:39 +0100 Subject: [PATCH 2/2] fix linter error --- spec/gitlab/error_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/gitlab/error_spec.rb b/spec/gitlab/error_spec.rb index 2c777de96..26e3a524d 100644 --- a/spec/gitlab/error_spec.rb +++ b/spec/gitlab/error_spec.rb @@ -25,7 +25,7 @@ { code: 401, parsed_response: Gitlab::ObjectifiedHash.new(error: 'Displayed error') }, { code: 500, parsed_response: Gitlab::ObjectifiedHash.new(embed_entity: { foo: ['bar'], sna: ['fu'] }, password: ['too short']) }, { code: 403, parsed_response: Array.new(['First message.', 'Second message.']) }, - { code: 400, parsed_response: Gitlab::ObjectifiedHash.new(message: { error: 'Spam detected' } ) } + { code: 400, parsed_response: Gitlab::ObjectifiedHash.new(message: { error: 'Spam detected' }) } ].each_with_index do |data, index| it 'returns the expected message' do