require File.dirname(__FILE__) + "/spec_helper" class MockRequest < Consumer::Request required :hello url "http://www.example.com/api" def to_xml b.instruct! b.RequestBody { b.Hello @hello } end end class Mock include Consumer::Mapping attr_accessor :hello map(:first, "//SillyXml", {:hello => "Hello"}) end describe Consumer::Request do describe "initialize" do it "should load defaults, with passed-in values taking priority" do request = MockRequest.allocate # creates an object w/o calling initialize Consumer::Helper.should_receive(:hash_from_yaml). and_return({:hello => "default value", :another => "value"}) request.should_receive(:initialize_attrs). with({:hello => "passed in value", :another => "value"}).twice request.send(:initialize, :hello => "passed in value") end end describe "do" do it "sends a request to the defined url and returns instantiated objects" do request = MockRequest.new(:hello => "Woody") # stop communication with www.example.com request_xml = <<-EOF Woody EOF response_xml = <<-EOF Woody EOF http = mock("aaa", :use_ssl= => "", :verify_mode= => "") Net::HTTP.stub!(:new).and_return(http) http.should_receive(:post). with("/api", request_xml, {}). and_return(mock("response", :body => response_xml, :response => mock("aoeu", :code => "200"))) object = request.do object.hello.should == "Woody" end end describe "check_request_error" do it "should raise a RequestError if the response xml contains an error" do request = MockRequest.new request.stub!(:error_paths).and_return({ :root => "//Error", :code => "//ErrorCode", :message => "//ErrorDescription" }) resp_xml = File.read("spec/xml/rate_response_error.xml") lambda {request.send(:check_request_error, resp_xml) }. should raise_error(Consumer::Request::RequestError) end end end