34 lines
1.0 KiB
Ruby
34 lines
1.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe Fiken::Error do
|
|
describe ".from_response" do
|
|
it "maps known statuses to specific subclasses" do
|
|
{
|
|
400 => Fiken::BadRequest,
|
|
401 => Fiken::Unauthorized,
|
|
403 => Fiken::Forbidden,
|
|
404 => Fiken::NotFound,
|
|
422 => Fiken::UnprocessableEntity,
|
|
429 => Fiken::RateLimited
|
|
}.each do |status, klass|
|
|
expect(described_class.from_response(status, {})).to be_a(klass)
|
|
end
|
|
end
|
|
|
|
it "maps unknown 5xx statuses to ServerError" do
|
|
expect(described_class.from_response(503, "")).to be_a(Fiken::ServerError)
|
|
end
|
|
|
|
it "extracts a message from a JSON error body" do
|
|
error = described_class.from_response(400, { "message" => "Bad slug" })
|
|
expect(error.message).to eq("Bad slug")
|
|
expect(error.status).to eq(400)
|
|
end
|
|
|
|
it "falls back to a generic message when the body has none" do
|
|
error = described_class.from_response(404, "")
|
|
expect(error.message).to eq("Fiken API error (HTTP 404)")
|
|
end
|
|
end
|
|
end
|