require 'spec_helper' describe Koala::Facebook::APIError do it "is a Koala::KoalaError" do Koala::Facebook::APIError.new(nil, nil).should be_a(Koala::KoalaError) end [:fb_error_type, :fb_error_code, :fb_error_subcode, :fb_error_message, :http_status, :response_body].each do |accessor| it "has an accessor for #{accessor}" do Koala::Facebook::APIError.instance_methods.map(&:to_sym).should include(accessor) Koala::Facebook::APIError.instance_methods.map(&:to_sym).should include(:"#{accessor}=") end end it "sets http_status to the provided status" do error_response = '{ "error": {"type": "foo", "other_details": "bar"} }' Koala::Facebook::APIError.new(400, error_response).response_body.should == error_response end it "sets response_body to the provided response body" do Koala::Facebook::APIError.new(400, '').http_status.should == 400 end context "with an error_info hash" do let(:error) { error_info = { 'type' => 'type', 'message' => 'message', 'code' => 1, 'error_subcode' => 'subcode' } Koala::Facebook::APIError.new(400, '', error_info) } { :fb_error_type => 'type', :fb_error_message => 'message', :fb_error_code => 1, :fb_error_subcode => 'subcode' }.each_pair do |accessor, value| it "sets #{accessor} to #{value}" do error.send(accessor).should == value end end it "sets the error message \"type: error_info['type'], code: error_info['code'], error_subcode: error_info['error_subcode'], message: error_info['message'] [HTTP http_status]\"" do error.message.should == "type: type, code: 1, error_subcode: subcode, message: message [HTTP 400]" end end context "with an error_info string" do it "sets the error message \"error_info [HTTP http_status]\"" do error_info = "Facebook is down." error = Koala::Facebook::APIError.new(400, '', error_info) error.message.should == "Facebook is down. [HTTP 400]" end end context "with no error_info and a response_body containing error JSON" do it "should extract the error info from the response body" do response_body = '{ "error": { "type": "type", "message": "message", "code": 1, "error_subcode": "subcode" } }' error = Koala::Facebook::APIError.new(400, response_body) { :fb_error_type => 'type', :fb_error_message => 'message', :fb_error_code => 1, :fb_error_subcode => 'subcode' }.each_pair do |accessor, value| error.send(accessor).should == value end end end end describe Koala::KoalaError do it "is a StandardError" do Koala::KoalaError.new.should be_a(StandardError) end end describe Koala::Facebook::OAuthSignatureError do it "is a Koala::KoalaError" do Koala::KoalaError.new.should be_a(Koala::KoalaError) end end describe Koala::Facebook::BadFacebookResponse do it "is a Koala::Facebook::APIError" do Koala::Facebook::BadFacebookResponse.new(nil, nil).should be_a(Koala::Facebook::APIError) end end describe Koala::Facebook::OAuthTokenRequestError do it "is a Koala::Facebook::APIError" do Koala::Facebook::OAuthTokenRequestError.new(nil, nil).should be_a(Koala::Facebook::APIError) end end describe Koala::Facebook::ServerError do it "is a Koala::Facebook::APIError" do Koala::Facebook::ServerError.new(nil, nil).should be_a(Koala::Facebook::APIError) end end describe Koala::Facebook::ClientError do it "is a Koala::Facebook::APIError" do Koala::Facebook::ClientError.new(nil, nil).should be_a(Koala::Facebook::APIError) end end describe Koala::Facebook::AuthenticationError do it "is a Koala::Facebook::ClientError" do Koala::Facebook::AuthenticationError.new(nil, nil).should be_a(Koala::Facebook::ClientError) end end