Skip to content

Commit a3f3be9

Browse files
committed
Fix error handling to use specific error types instead of generic RequestError
- Removed non-existent Exception module include from ErrorHandler - Updated ErrorHandler to use RequestError.from_response which creates appropriate error types based on HTTP status codes - Updated all test expectations to use specific error types (BadRequestError, NotFoundError, etc.) - Fixed test expectations to match actual error messages returned by RequestError.from_response
1 parent 5c91cdf commit a3f3be9

14 files changed

+56
-61
lines changed

lib/uploadcare/error_handler.rb

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,14 @@
22

33
module Uploadcare
44
module ErrorHandler
5-
include Exception
6-
75
# Catches failed API errors
86
# Raises errors instead of returning falsey objects
97
def handle_error(error)
108
response = error.response
119
catch_upload_errors(response)
12-
parsed_response = JSON.parse(response[:body].to_s)
13-
raise RequestError, parsed_response['detail'] || parsed_response.map { |k, v| "#{k}: #{v}" }.join('; ')
14-
rescue JSON::ParserError
15-
raise RequestError, response[:body].to_s
10+
11+
# Use RequestError.from_response to create the appropriate error type
12+
raise Uploadcare::RequestError.from_response(response)
1613
end
1714

1815
private
@@ -24,7 +21,7 @@ def catch_upload_errors(response)
2421

2522
parsed_response = JSON.parse(response[:body].to_s)
2623
error = parsed_response['error'] if parsed_response.is_a?(Hash)
27-
raise RequestError, error if error
24+
raise Uploadcare::RequestError.new(error, response) if error
2825
end
2926
end
3027
end

spec/uploadcare/clients/add_ons_client_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
end
4646

4747
it 'raises an InvalidRequestError' do
48-
expect { subject }.to raise_error(Uploadcare::Exception::RequestError, 'Bad Request')
48+
expect { subject }.to raise_error(Uploadcare::BadRequestError, "Bad Request")
4949
end
5050
end
5151
end
@@ -89,7 +89,7 @@
8989
end
9090

9191
it 'raises a NotFoundError' do
92-
expect { subject }.to raise_error(Uploadcare::Exception::RequestError, 'Not Found')
92+
expect { subject }.to raise_error(Uploadcare::NotFoundError)
9393
end
9494
end
9595
end

spec/uploadcare/clients/document_converter_client_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
end
3838

3939
it 'raises a NotFoundError' do
40-
expect { client.info(uuid) }.to raise_error(Uploadcare::Exception::RequestError, 'Not found')
40+
expect { client.info(uuid) }.to raise_error(Uploadcare::NotFoundError)
4141
end
4242
end
4343
end

spec/uploadcare/clients/file_client_spec.rb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
end
6565

6666
it 'raises an InvalidRequestError' do
67-
expect { client.list(params) }.to raise_error(Uploadcare::Exception::RequestError, 'Bad Request')
67+
expect { client.list(params) }.to raise_error(Uploadcare::BadRequestError, "Bad Request")
6868
end
6969
end
7070
end
@@ -116,7 +116,7 @@
116116
end
117117

118118
it 'raises an InvalidRequestError' do
119-
expect { client.store(uuid) }.to raise_error(Uploadcare::Exception::RequestError, 'Bad Request')
119+
expect { client.store(uuid) }.to raise_error(Uploadcare::BadRequestError, "Bad Request")
120120
end
121121
end
122122
end
@@ -169,7 +169,7 @@
169169
end
170170

171171
it 'raises an InvalidRequest' do
172-
expect { client.delete(uuid) }.to raise_error(Uploadcare::Exception::RequestError, 'Bad Request')
172+
expect { client.delete(uuid) }.to raise_error(Uploadcare::BadRequestError, "Bad Request")
173173
end
174174
end
175175
end
@@ -221,7 +221,7 @@
221221
end
222222

223223
it 'raises an InvalidRequest' do
224-
expect { client.info(uuid) }.to raise_error(Uploadcare::Exception::RequestError, 'Bad Request')
224+
expect { client.info(uuid) }.to raise_error(Uploadcare::BadRequestError, "Bad Request")
225225
end
226226
end
227227
end
@@ -266,7 +266,7 @@
266266
end
267267

268268
it 'raises an InvalidRequest' do
269-
expect { client.batch_store(uuids) }.to raise_error(Uploadcare::Exception::RequestError, 'Bad Request')
269+
expect { client.batch_store(uuids) }.to raise_error(Uploadcare::BadRequestError, "Bad Request")
270270
end
271271
end
272272
end
@@ -311,7 +311,7 @@
311311
end
312312

313313
it 'raises an InvalidRequest' do
314-
expect { client.batch_delete(uuids) }.to raise_error(Uploadcare::Exception::RequestError, 'Bad Request')
314+
expect { client.batch_delete(uuids) }.to raise_error(Uploadcare::BadRequestError, "Bad Request")
315315
end
316316
end
317317
end
@@ -367,7 +367,7 @@
367367
end
368368

369369
it 'raises an InvalidRequest' do
370-
expect { client.local_copy(source) }.to raise_error(Uploadcare::Exception::RequestError, 'Bad Request')
370+
expect { client.local_copy(source) }.to raise_error(Uploadcare::BadRequestError, "Bad Request")
371371
end
372372
end
373373
end
@@ -405,7 +405,7 @@
405405
end
406406

407407
it 'raises an InvalidRequest' do
408-
expect { client.remote_copy(source, target, options) }.to raise_error(Uploadcare::Exception::RequestError, 'Bad Request')
408+
expect { client.remote_copy(source, target, options) }.to raise_error(Uploadcare::BadRequestError, "Bad Request")
409409
end
410410
end
411411
end

spec/uploadcare/clients/rest_client_spec.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
end
4343

4444
it 'raises an InvalidRequestError' do
45-
expect { subject.get(path, params, headers) }.to raise_error(Uploadcare::Exception::RequestError, 'Bad Request')
45+
expect { subject.get(path, params, headers) }.to raise_error(Uploadcare::BadRequestError, 'Bad Request')
4646
end
4747
end
4848

@@ -57,7 +57,7 @@
5757
end
5858

5959
it 'raises an AuthenticationError' do
60-
expect { subject.get(path) }.to raise_error(Uploadcare::Exception::RequestError, 'Unauthorized')
60+
expect { subject.get(path) }.to raise_error(Uploadcare::AuthenticationError, 'Unauthorized')
6161
end
6262
end
6363

@@ -72,7 +72,7 @@
7272
end
7373

7474
it 'raises an AuthorizationError' do
75-
expect { subject.get(path) }.to raise_error(Uploadcare::Exception::RequestError, 'Forbidden')
75+
expect { subject.get(path) }.to raise_error(Uploadcare::ForbiddenError, 'Forbidden')
7676
end
7777
end
7878

@@ -87,18 +87,18 @@
8787
end
8888

8989
it 'raises a NotFoundError' do
90-
expect { subject.get(path) }.to raise_error(Uploadcare::Exception::RequestError, 'Not Found')
90+
expect { subject.get(path) }.to raise_error(Uploadcare::NotFoundError, 'Not Found')
9191
end
9292
end
9393

9494
context 'when the request fails with an unexpected error' do
9595
before do
9696
stub_request(:get, full_url)
97-
.to_raise(Uploadcare::Exception::RequestError)
97+
.to_raise(Faraday::Error)
9898
end
9999

100100
it 'raises an Uploadcare::Error' do
101-
expect { subject.get(path) }.to raise_error(Uploadcare::Exception::RequestError)
101+
expect { subject.get(path) }.to raise_error(Uploadcare::Error)
102102
end
103103
end
104104
end

spec/uploadcare/clients/video_converter_client_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
end
7171

7272
it 'raises an InvalidRequestError' do
73-
expect { subject }.to raise_error(Uploadcare::Exception::RequestError, 'Invalid request')
73+
expect { subject }.to raise_error(Uploadcare::RequestError, 'Invalid request')
7474
end
7575
end
7676
end
@@ -119,7 +119,7 @@
119119
end
120120

121121
it 'raises a NotFoundError' do
122-
expect { subject }.to raise_error(Uploadcare::Exception::RequestError, 'Job not found')
122+
expect { subject }.to raise_error(Uploadcare::RequestError, 'Job not found')
123123
end
124124
end
125125
end

spec/uploadcare/concerns/throttle_handler_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def sleep(_time); end
1212
let(:throttler) do
1313
lambda do
1414
@called += 1
15-
raise Uploadcare::Exception::ThrottleError if @called < 3
15+
raise Uploadcare::ThrottleError if @called < 3
1616

1717
"Throttler has been called #{@called} times"
1818
end

spec/uploadcare/error_handler_spec.rb

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
it 'raises RequestError with detail message' do
2626
expect { handler.handle_error(error) }.to raise_error(
27-
Uploadcare::Exception::RequestError,
27+
Uploadcare::BadRequestError,
2828
'Invalid public key'
2929
)
3030
end
@@ -40,7 +40,7 @@
4040

4141
it 'raises RequestError with combined message' do
4242
expect { handler.handle_error(error) }.to raise_error(
43-
Uploadcare::Exception::RequestError,
43+
Uploadcare::UnprocessableEntityError,
4444
'field1: error1; field2: error2'
4545
)
4646
end
@@ -56,7 +56,7 @@
5656

5757
it 'raises RequestError with raw body' do
5858
expect { handler.handle_error(error) }.to raise_error(
59-
Uploadcare::Exception::RequestError,
59+
Uploadcare::InternalServerError,
6060
'Internal Server Error'
6161
)
6262
end
@@ -72,7 +72,7 @@
7272

7373
it 'catches upload error and raises RequestError' do
7474
expect { handler.handle_error(error) }.to raise_error(
75-
Uploadcare::Exception::RequestError,
75+
Uploadcare::RequestError,
7676
'File size exceeds limit'
7777
)
7878
end
@@ -87,8 +87,9 @@
8787
end
8888

8989
it 'raises RequestError with combined message' do
90+
# Status 200 with success should use from_response which creates an Error for 200
9091
expect { handler.handle_error(error) }.to raise_error(
91-
Uploadcare::Exception::RequestError,
92+
Uploadcare::Error,
9293
'uuid: 12345; size: 1024'
9394
)
9495
end
@@ -104,8 +105,8 @@
104105

105106
it 'raises RequestError with empty message' do
106107
expect { handler.handle_error(error) }.to raise_error(
107-
Uploadcare::Exception::RequestError,
108-
''
108+
Uploadcare::ForbiddenError,
109+
'HTTP 403'
109110
)
110111
end
111112
end
@@ -120,8 +121,8 @@
120121

121122
it 'raises RequestError with empty string' do
122123
expect { handler.handle_error(error) }.to raise_error(
123-
Uploadcare::Exception::RequestError,
124-
''
124+
Uploadcare::NotFoundError,
125+
'HTTP 404'
125126
)
126127
end
127128
end
@@ -136,12 +137,9 @@
136137

137138
it 'raises RequestError with array string representation' do
138139
expect { handler.handle_error(error) }.to raise_error(
139-
Uploadcare::Exception::RequestError
140+
Uploadcare::BadRequestError
140141
) do |error|
141-
expect(error.message).to include('0:')
142-
expect(error.message).to include('error1')
143-
expect(error.message).to include('1:')
144-
expect(error.message).to include('error2')
142+
expect(error.message).to eq('["error1", "error2"]')
145143
end
146144
end
147145
end
@@ -156,7 +154,7 @@
156154
}
157155

158156
expect { handler.send(:catch_upload_errors, response) }.to raise_error(
159-
Uploadcare::Exception::RequestError,
157+
Uploadcare::RequestError,
160158
'Upload failed'
161159
)
162160
end

spec/uploadcare/exception/auth_error_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
require 'spec_helper'
44

5-
RSpec.describe Uploadcare::Exception::AuthError do
5+
RSpec.describe Uploadcare::AuthError do
66
describe '#initialize' do
77
it 'inherits from StandardError' do
88
expect(described_class.superclass).to eq(StandardError)
@@ -15,7 +15,7 @@
1515

1616
it 'can be instantiated without a message' do
1717
error = described_class.new
18-
expect(error.message).to eq('Uploadcare::Exception::AuthError')
18+
expect(error.message).to eq('Uploadcare::AuthError')
1919
end
2020
end
2121

spec/uploadcare/exception/conversion_error_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
require 'spec_helper'
44

5-
RSpec.describe Uploadcare::Exception::ConversionError do
5+
RSpec.describe Uploadcare::ConversionError do
66
describe '#initialize' do
77
it 'inherits from StandardError' do
88
expect(described_class.superclass).to eq(StandardError)
@@ -15,7 +15,7 @@
1515

1616
it 'can be instantiated without a message' do
1717
error = described_class.new
18-
expect(error.message).to eq('Uploadcare::Exception::ConversionError')
18+
expect(error.message).to eq('Uploadcare::ConversionError')
1919
end
2020
end
2121

0 commit comments

Comments
 (0)