Skip to content

Commit b2ce8ee

Browse files
author
Peter Plant
committed
fixed issue with 404 not found
1 parent 43901be commit b2ce8ee

File tree

4 files changed

+30
-2
lines changed

4 files changed

+30
-2
lines changed

lib/adyen/client.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ def service_url(service, action, version)
144144
def call_adyen_api(service, action, request_data, headers, version, _with_application_info: false)
145145
# get URL for requested endpoint
146146
url = service_url(service, action.is_a?(String) ? action : action.fetch(:url), version)
147-
147+
148148
auth_type = auth_type(service, request_data)
149149

150150
# initialize Faraday connection object
@@ -227,6 +227,9 @@ def call_adyen_api(service, action, request_data, headers, version, _with_applic
227227
when 403
228228
full_message = build_error_message(response.body, 'Authorisation error')
229229
raise Adyen::PermissionError.new(full_message, request_data, response.body)
230+
when 404
231+
full_message = build_error_message(response.body, 'Not found error')
232+
raise Adyen::NotFoundError.new(full_message, request_data, response.body)
230233
when 422
231234
full_message = build_error_message(response.body, 'Validation error')
232235
raise Adyen::ValidationError.new(full_message, request_data, response.body)
@@ -375,7 +378,7 @@ def build_error_message(response_body, default_message)
375378
error_details = JSON.parse(response_body, symbolize_names: true) if response_body.is_a?(String)
376379

377380
# check different attributes to support both RFC 7807 and legacy models
378-
message = error_details[:detail] || error_details[:message]
381+
message = error_details[:detail] || error_details[:message] || error_details
379382
error_code = error_details[:errorCode]
380383
if message && error_code
381384
full_message = "#{message} ErrorCode: #{error_code}"

lib/adyen/errors.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ def initialize(msg, request)
105105
end
106106
end
107107

108+
class NotFoundError < AdyenError
109+
def initialize(msg, request, response)
110+
super(request, response, msg, 404)
111+
end
112+
end
113+
108114
# catchall for errors which don't have more specific classes
109115
class APIError < AdyenError
110116
def initialize(msg, request, response, code)

lib/adyen/services/checkout/payments_api.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class PaymentsApi < Service
99
attr_accessor :service, :version
1010

1111
def initialize(client, version = DEFAULT_VERSION)
12+
puts "yallloooowwww"
1213
super(client, version, 'Checkout')
1314
end
1415

spec/client_spec.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,4 +413,22 @@
413413
expect(error.msg).to eq('Unexpected error. ErrorCode: 999')
414414
end
415415
end
416+
417+
it 'raises NotFoundError on 404 response and checks content' do
418+
client = Adyen::Client.new(api_key: 'api_key', env: :test)
419+
mock_faraday_connection = double(Faraday::Connection)
420+
error_body = "701 Version 71 is not supported, latest version: 68"
421+
mock_response = Faraday::Response.new(status: 404, body: error_body)
422+
423+
allow(Faraday).to receive(:new).and_return(mock_faraday_connection)
424+
allow(mock_faraday_connection).to receive_message_chain(:headers, :[]=)
425+
allow(mock_faraday_connection).to receive(:post).and_return(mock_response)
426+
427+
expect {
428+
client.checkout.payments_api.payments({})
429+
}.to raise_error(Adyen::NotFoundError) do |error|
430+
expect(error.code).to eq(404)
431+
expect(error.msg).to eq('Not found error')
432+
end
433+
end
416434
end

0 commit comments

Comments
 (0)