test/test_hugs.rb in hugs-2.0.0 vs test/test_hugs.rb in hugs-2.1.0

- old
+ new

@@ -1,13 +1,17 @@ %w(support base64 hugs).each { |r| require r } describe Hugs do before do + @scheme = "https" + @host = "example.com" + @port = 80 + @base = "#{@host}:#{@port}" @valid_options = { - :host => "example.com", - :port => 80, - :scheme => "https", + :host => @host, + :port => @port, + :scheme => @scheme, } WebMock.reset! @instance = Hugs.new @valid_options end @@ -15,91 +19,143 @@ describe "#response_for" do before do @request = Net::HTTP::Get end - it "generates a path" do - stub_request :get, "https://example.com:80/" + describe "path" do + it "is valid" do + stub_request :get, "#{@scheme}://#{@base}/" - @instance.send :response_for, @request, "/", {} + @instance.send :response_for, @request, "/", {} - assert_requested :get, "https://example.com:80/" - end + assert_requested :get, "#{@scheme}://#{@base}/" + end - it "generates a path when a valid :query exists" do - stub_request(:get, "https://example.com:80/").with:query => {"foo" => "bar"} + it "is valid when an invalid :query is supplied" do + stub_request :get, "#{@scheme}://#{@base}/" - @instance.send :response_for, @request, "/", :query => "foo=bar" + @instance.send :response_for, @request, "/", :query => nil - assert_requested :get, "https://example.com:80/", :query => {"foo" => "bar"} + assert_requested :get, "#{@scheme}://#{@base}/" + end + + it "also has a query string" do + stub_request(:get, "#{@scheme}://#{@base}/").with:query => {"foo" => "bar"} + + @instance.send :response_for, @request, "/", :query => "foo=bar" + + assert_requested :get, "#{@scheme}://#{@base}/", :query => {"foo" => "bar"} + end end - it "generates a path when a nil :query exists" do - stub_request :get, "https://example.com:80/" + describe "multi-part" do + Content_Type_Matcher = %r{multipart/form-data} - @instance.send :response_for, @request, "/", :query => nil + before do + @request = Net::HTTP::Post + end - assert_requested :get, "https://example.com:80/" + it "uploads a file" do + stub_request :post, "#{@scheme}://#{@base}/" + + upload = { + :upload => { + :parts => { :file => "/dev/null" }, + :content_type => "type/subtype" + } + } + + @instance.send :response_for, @request, "/", upload + + assert_requested :post, "#{@scheme}://#{@base}/", :body => %r{Content-Type: type/subtype}, :headers => { + "Content-Type" => Content_Type_Matcher + } + end + + it "has parts" do + stub_request :post, "#{@scheme}://#{@base}/" + + upload = { + :upload => { + :parts => { :foo => :bar, :baz => :xyzzy }, + :content_type => "foo/bar" + } + } + + @instance.send :response_for, @request, "/", upload + + ### wtf can't use mx together. + content_disposition_matcher = %r{^Content-Disposition: form-data; name="foo".*^bar.*^Content-Disposition: form-data; name="baz".*^xyzzy.*}m + assert_requested :post, "#{@scheme}://#{@base}/", :body => content_disposition_matcher, :headers => { + "Content-Type" => Content_Type_Matcher + } + end end describe "body" do before do - stub_request :get, "https://example.com:80/" + stub_request :get, "#{@scheme}://#{@base}/" end - it "doesn't set the body when an invalid :body exists" do + it "is not set when :body invalid" do @instance.send :response_for, @request, "/", :body => nil - assert_requested :get, "https://example.com:80/", :body => nil + assert_requested :get, "#{@scheme}://#{@base}/", :body => nil end + it "is not set when :body is missing" do + @instance.send :response_for, @request, "/", {} + + assert_requested :get, "#{@scheme}://#{@base}/", {} + end + describe "json" do before do @instance = Hugs.new @valid_options.merge(:type => :json) end - it "sets the body when a valid :body exists" do + it "is valid" do @instance.send :response_for, @request, "/", :body => {:foo => :bar} - assert_requested :get, "https://example.com:80/", :body => '{"foo":"bar"}' + assert_requested :get, "#{@scheme}://#{@base}/", :body => '{"foo":"bar"}' end end describe "xml" do before do @instance = Hugs.new @valid_options.merge(:type => :xml) end - it "sets the body when a valid :body exists" do + it "is valid" do @instance.send :response_for, @request, "/", :body => "foo bar" - assert_requested :get, "https://example.com:80/", :body => "foo bar" + assert_requested :get, "#{@scheme}://#{@base}/", :body => "foo bar" end end end describe "headers" do it "authenticates" do - stub_request :get, "https://user:credentials@example.com:80/" + stub_request :get, "#{@scheme}://user:credentials@#{@base}/" @instance = Hugs.new @valid_options.merge(:user => "user", :password => "credentials") @instance.send :response_for, @request, "/", {} - assert_requested :get, "https://user:credentials@example.com:80/" + assert_requested :get, "#{@scheme}://user:credentials@#{@base}/" end [:user, :password].each do |option| it "doesn't authenticate when '#{option}' missing" do - stub_request :get, "https://example.com:80/" + stub_request :get, "#{@scheme}://#{@base}/" invalid_options = @valid_options.reject { |k,v| k == option } @instance = Hugs.new invalid_options @instance.send :response_for, @request, "/", {} - assert_requested :get, "https://example.com:80/" + assert_requested :get, "#{@scheme}://#{@base}/" end end [ { :json => "application/json" }, @@ -108,32 +164,32 @@ pair.each_pair do |type, subtype| [:post, :put].each do |verb| clazz = eval "Net::HTTP::#{verb.capitalize}" it "has '#{subtype}' Content-Type and Accept for '#{clazz}'" do - stub_request verb, "https://example.com:80/" + stub_request verb, "#{@scheme}://#{@base}/" @instance = Hugs.new @valid_options.merge(:type => type) @instance.send :response_for, clazz, "/", {} - assert_requested verb, "https://example.com:80/", :headers => { + assert_requested verb, "#{@scheme}://#{@base}/", :headers => { "Accept" => ["*/*", subtype], "Content-Type" => subtype } end end [:get, :delete].each do |verb| clazz = eval "Net::HTTP::#{verb.capitalize}" it "has '#{subtype}' Accept for '#{clazz}'" do - stub_request verb, "https://example.com:80/" + stub_request verb, "#{@scheme}://#{@base}/" @instance = Hugs.new @valid_options.merge(:type => type) @instance.send :response_for, clazz, "/", {} - assert_requested verb, "https://example.com:80/", :headers => { + assert_requested verb, "#{@scheme}://#{@base}/", :headers => { "Accept" => ["*/*", subtype] } end end end end @@ -144,12 +200,12 @@ describe "json" do before do @instance = Hugs.new @valid_options.merge(:type => :json) end - it "objectifies the json and returns a hash" do - stub_request(:get, "https://example.com:80/").to_return :body => '{"foo":"bar"}' + it "objectifies and returns a hash" do + stub_request(:get, "#{@scheme}://#{@base}/").to_return :body => '{"foo":"bar"}' response = @instance.get "/", :body => { :foo => :bar } response.body.must_be_kind_of Hash end @@ -158,11 +214,11 @@ describe "xml" do before do @instance = Hugs.new @valid_options.merge(:type => :xml) end - it "parses xml and returns a Nokogiri object" do - stub_request(:get, "https://example.com:80/").to_return :body => "<STORAGE></STORAGE>" + it "parses and returns a Nokogiri object" do + stub_request(:get, "#{@scheme}://#{@base}/").to_return :body => "<STORAGE></STORAGE>" response = @instance.get "/", :body => { :foo => :bar } response.body.must_be_kind_of Nokogiri::XML::Document end