require File.expand_path(File.dirname(__FILE__) + "/../spec_helper") describe Braintree::Http do describe "self._format_and_sanitize_body_for_log" do it "adds [Braintree] before each line" do input_xml = <<-END Joe Doe END expected_xml = <<-END [Braintree] [Braintree] Joe [Braintree] Doe [Braintree] END Braintree::Http.new(:config)._format_and_sanitize_body_for_log(input_xml).should == expected_xml end it "sanitizes credit card number and cvv" do input_xml = <<-END Joe Doe 1234560000001234 123 END expected_xml = <<-END [Braintree] [Braintree] Joe [Braintree] Doe [Braintree] 123456******1234 [Braintree] *** [Braintree] END Braintree::Http.new(:config)._format_and_sanitize_body_for_log(input_xml).should == expected_xml end it "sanitizes credit card number and cvv with newlines" do input_xml = <<-END Joe Doe 123456000\n0001234 1\n23 END expected_xml = <<-END [Braintree] [Braintree] Joe [Braintree] Doe [Braintree] 123456******1234 [Braintree] *** [Braintree] END Braintree::Http.new(:config)._format_and_sanitize_body_for_log(input_xml).should == expected_xml end it "connects when proxy address is specified" do config = Braintree::Configuration.new( :proxy_address => "localhost", :proxy_port => 8080, :proxy_user => "user", :proxy_pass => "test" ) http = Braintree::Http.new(config) net_http_instance = instance_double( "Net::HTTP", :open_timeout= => nil, :read_timeout= => nil, :start => nil ) Net::HTTP.should_receive(:new).with(nil, nil, "localhost", 8080, "user", "test").and_return(net_http_instance) http._http_do("GET", "/plans") end it "accepts a partially specified proxy" do config = Braintree::Configuration.new( :proxy_address => "localhost", :proxy_port => 8080 ) http = Braintree::Http.new(config) net_http_instance = instance_double( "Net::HTTP", :open_timeout= => nil, :read_timeout= => nil, :start => nil ) Net::HTTP.should_receive(:new).with(nil, nil, "localhost", 8080, nil, nil).and_return(net_http_instance) http._http_do("GET", "/plans") end it "does not specify a proxy if proxy_address is not set" do config = Braintree::Configuration.new http = Braintree::Http.new(config) net_http_instance = instance_double( "Net::HTTP", :open_timeout= => nil, :read_timeout= => nil, :start => nil ) Net::HTTP.should_receive(:new).with(nil, nil).and_return(net_http_instance) http._http_do("GET", "/plans") end end describe "_build_query_string" do it "returns an empty string for empty query params" do Braintree::Http.new(:config)._build_query_string({}).should == "" end it "returns a proper query string for non-nested hashes" do query_params = {:one => 1, :two => 2} Braintree::Http.new(:config)._build_query_string(query_params).should =~ /^\?(one=1&two=2|two=2&one=1)$/ end it "raises ArgumentError for nested hashes" do query_params = {:one => 1, :two => {:a => 2.1, :b => 2.2}} expect { Braintree::Http.new(:config)._build_query_string(query_params) }.to raise_error(ArgumentError, /nested hash/i) end end end