Skip to content

Commit 031392e

Browse files
Test retry
1 parent f890b06 commit 031392e

File tree

2 files changed

+39
-2
lines changed

2 files changed

+39
-2
lines changed

lib/seam/request.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,12 @@ def self.handle_error_response(response, method, path)
3434

3535
raise Http::UnauthorizedError.new(request_id) if status_code == 401
3636

37-
error = response.body["error"] || {}
37+
error = response.body.is_a?(Hash) ? response.body["error"] || {} : {}
3838
error_type = error["type"] || "unknown_error"
39+
error_message = error["message"] || "Unknown error"
3940
error_details = {
4041
type: error_type,
41-
message: error["message"] || "Unknown error",
42+
message: error_message,
4243
data: error["data"]
4344
}
4445

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# frozen_string_literal: true
2+
3+
require "spec_helper"
4+
5+
RSpec.describe Seam::Http::SingleWorkspace do
6+
let(:api_key) { "seam_test_api_key" }
7+
let(:endpoint) { "https://example.com/api" }
8+
let(:retry_options) do
9+
{
10+
max: 3,
11+
interval: 0.1,
12+
methods: %i[post],
13+
retry_statuses: [500]
14+
}
15+
end
16+
17+
describe "retry options" do
18+
it "passes retry_options to the Faraday client and uses them" do
19+
client = described_class.new(
20+
api_key: api_key,
21+
endpoint: endpoint,
22+
retry_options: retry_options
23+
)
24+
25+
stub_request(:post, "#{endpoint}/devices/list")
26+
.to_return(status: 500, body: {"error" => {"type" => "server_error", "message" => "Internal Server Error"}}.to_json, headers: {"Content-Type" => "application/json"})
27+
.to_return(status: 500, body: {"error" => {"type" => "server_error", "message" => "Internal Server Error"}}.to_json, headers: {"Content-Type" => "application/json"})
28+
.to_return(status: 200, body: {devices: []}.to_json, headers: {"Content-Type" => "application/json"})
29+
30+
result = client.devices.list
31+
expect(result).to eq([])
32+
33+
expect(a_request(:post, "#{endpoint}/devices/list")).to have_been_made.times(3)
34+
end
35+
end
36+
end

0 commit comments

Comments
 (0)