Dduvall has uploaded a new change for review. https://gerrit.wikimedia.org/r/157300
Change subject: Error handling for HTTP 4xx and 5xx responses ...................................................................... Error handling for HTTP 4xx and 5xx responses Client now throws an HttpError when handling HTTP responses with a status in the 400 and 500 ranges. Change-Id: Ifb3aa6025f135ea9138a9ffe9eba07da4091796e Bug: 70193 --- M lib/mediawiki_api/client.rb M lib/mediawiki_api/exceptions.rb M spec/client_spec.rb 3 files changed, 32 insertions(+), 1 deletion(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/ruby/api refs/changes/00/157300/1 diff --git a/lib/mediawiki_api/client.rb b/lib/mediawiki_api/client.rb index fb63885..146e5c6 100644 --- a/lib/mediawiki_api/client.rb +++ b/lib/mediawiki_api/client.rb @@ -37,6 +37,8 @@ response = @conn.send(method, "", params.merge(action: name, format: FORMAT)) + raise HttpError, response.status if response.status >= 400 + if response.headers.include?("mediawiki-api-error") raise ApiError.new(Response.new(response, ["error"])) end diff --git a/lib/mediawiki_api/exceptions.rb b/lib/mediawiki_api/exceptions.rb index 7174fe7..aec622c 100644 --- a/lib/mediawiki_api/exceptions.rb +++ b/lib/mediawiki_api/exceptions.rb @@ -28,6 +28,18 @@ class CreateAccountError < StandardError end + class HttpError < StandardError + attr_reader :status + + def initialize(status) + @status = status + end + + def to_s + "unexpected HTTP response (#{status})" + end + end + class LoginError < StandardError end diff --git a/spec/client_spec.rb b/spec/client_spec.rb index 1d7c9db..3e7dc8b 100644 --- a/spec/client_spec.rb +++ b/spec/client_spec.rb @@ -18,7 +18,8 @@ let(:token_type) { action } let(:params) { {} } - let(:response) { { headers: response_headers, body: response_body.to_json } } + let(:response) { { status: response_status, headers: response_headers, body: response_body.to_json } } + let(:response_status) { 200 } let(:response_headers) { nil } let(:response_body) { { "something" => {} } } @@ -100,6 +101,22 @@ end end + context "when the response status is in the 400 range" do + let(:response_status) { 403 } + + it "raises an HttpError" do + expect { subject }.to raise_error(MediawikiApi::HttpError, "unexpected HTTP response (403)") + end + end + + context "when the response status is in the 500 range" do + let(:response_status) { 502 } + + it "raises an HttpError" do + expect { subject }.to raise_error(MediawikiApi::HttpError, "unexpected HTTP response (502)") + end + end + context "when the response is an error" do let(:response_headers) { { "MediaWiki-API-Error" => "code" } } let(:response_body) { { error: { info: "detailed message", code: "code" } } } -- To view, visit https://gerrit.wikimedia.org/r/157300 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ifb3aa6025f135ea9138a9ffe9eba07da4091796e Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/ruby/api Gerrit-Branch: master Gerrit-Owner: Dduvall <dduv...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits