spec/resourceful/resource_spec.rb in resourceful-0.2.1 vs spec/resourceful/resource_spec.rb in resourceful-0.3.0

- old
+ new

@@ -35,10 +35,19 @@ end it 'should take a uri' do @resource.uri.should == @uri end + + it 'should take some default_options' do + r = Resourceful::Resource.new(@accessor, @uri, :foo => :bar) + r.default_options.should == {:foo => :bar} + end + + it 'should default to an empty hash for options' do + @resource.default_options.should == {} + end end describe '#effective_uri' do it 'should be the latest uri' do @@ -65,10 +74,26 @@ it 'should set the header of the request from the header arg' do Resourceful::Request.should_receive(:new).with(:some_method, @resource, nil, :foo => :bar).and_return(@request) @resource.do_read_request(:some_method, :foo => :bar) end + describe 'default options' do + before do + @resource.default_options = {:foo => :bar} + end + + it 'should merge the header with the default options' do + Resourceful::Request.should_receive(:new).with(anything, anything, anything, :foo => :bar).and_return(@request) + make_request + end + + it 'should override any default header with the request header' do + Resourceful::Request.should_receive(:new).with(anything, anything, anything, :foo => :baz).and_return(@request) + @resource.do_read_request(:some_method, :foo => :baz) + end + end + describe 'non-success responses' do before do @uri = 'http://www.example.com/code/404' @resource = Resourceful::Resource.new(@accessor, @uri) @@ -162,11 +187,11 @@ make_request @resource.effective_uri.should == @uri end it 'should make a new resource from the new location' do - new_resource = mock('resource', :do_read_request => @response) + new_resource = mock('resource', :do_read_request => @response, :uri => @uri) Resourceful::Resource.should_receive(:new).with(@accessor, @redirected_uri).and_return(new_resource) make_request end end @@ -242,44 +267,60 @@ end describe '#do_write_request' do def make_request - @resource.do_write_request(:some_method, "data", {}) + @resource.do_write_request(:some_method, "data") end it 'should make a new request object from the method' do Resourceful::Request.should_receive(:new).with(:some_method, @resource, "data", anything).and_return(@request) @resource.do_write_request(:some_method, "data") end + describe 'default options' do + before do + @resource.default_options = {:foo => :bar} + end + + it 'should merge the header with the default options' do + Resourceful::Request.should_receive(:new).with(anything, anything, anything, :foo => :bar).and_return(@request) + make_request + end + + it 'should override any default header with the request header' do + Resourceful::Request.should_receive(:new).with(anything, anything, anything, :foo => :baz).and_return(@request) + @resource.do_write_request(:some_method, "data", :foo => :baz) + end + end + describe 'non-success responses' do before do @uri = 'http://www.example.com/code/404' @resource = Resourceful::Resource.new(@accessor, @uri) @redirected_uri = 'http://www.example.com/get' - @redirect_response = mock('redirect_response', - :header => {'Location' => [@redirected_uri]}, - :is_redirect? => false, - :is_success? => false, - :is_not_authorized? => false, - :code => 404) + @response = mock('response', + :header => {'Location' => [@redirected_uri]}, + :is_redirect? => false, + :is_success? => false, + :is_not_authorized? => false, + :code => 404) - @request.stub!(:response).and_return(@redirect_response, @response) + @request.stub!(:response).and_return(@response) @request.stub!(:method).and_return(:post) @request.stub!(:uri).and_return('http://www.example.com/code/404') end it 'should raise UnsuccessfulHttpRequestError' do lambda { - @resource.do_write_request(:post, "data", anything) + @resource.do_write_request(:post, "data") }.should raise_error(Resourceful::UnsuccessfulHttpRequestError) end it 'should give a reasonable error message' do lambda { - @resource.do_write_request(:post, "data", anything) + @resource.do_write_request(:post, "data") }.should raise_error("post request to <http://www.example.com/code/404> failed with code 404") end end describe 'with redirection' do