spec/cfoundry/errors_spec.rb in cfoundry-0.4.18 vs spec/cfoundry/errors_spec.rb in cfoundry-0.4.19
- old
+ new
@@ -9,6 +9,67 @@
its(:to_s) { should eq "POST /blah timed out" }
its(:method) { should eq Net::HTTP::Post }
its(:uri) { should eq '/blah' }
its(:parent) { should eq parent }
end
+
+ describe CFoundry::APIError do
+ let(:request) { Net::HTTP::Get.new("http://api.cloudfoundry.com/foo") }
+ let(:response) { Net::HTTPNotFound.new("foo", 404, "bar")}
+ let(:response_body) { "NOT FOUND" }
+ subject { CFoundry::APIError.new(request, response) }
+
+ before do
+ stub(response).body {response_body}
+ end
+
+ its(:to_s) { should eq "404: NOT FOUND" }
+
+ its(:request) { should eq request }
+
+ its(:response) { should eq response }
+
+ describe "#initialize" do
+
+ context "Response body is JSON" do
+
+ let(:response_body) { "{\"description\":\"Something went wrong\"}"}
+
+ it "sets description to description field in parsed JSON" do
+ CFoundry::APIError.new(request, response).description.should == "Something went wrong"
+ end
+ end
+
+
+ context "Response body is not JSON" do
+
+ let(:response_body) { "Some plain text"}
+
+ it "sets description to body text" do
+ CFoundry::APIError.new(request, response).description.should == "Some plain text"
+ end
+ end
+
+ it "allows override of description" do
+ CFoundry::APIError.new(request, response, "My description").description.should == "My description"
+ end
+
+ end
+
+ describe "#request_trace" do
+ its(:request_trace) { should include "REQUEST: " }
+ end
+
+ describe "#response_trace" do
+ its(:response_trace) { should include "RESPONSE: " }
+ end
+
+ it "sets error code to response error code by default" do
+ CFoundry::APIError.new(request, response).error_code.should == 404
+ end
+
+ it "allows override of error code" do
+ CFoundry::APIError.new(request, response, nil, 303).error_code.should == 303
+ end
+
+ end
end