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

Reply via email to