fleakr 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +114 -19
 - data/Rakefile +1 -1
 - data/lib/fleakr/api/file_parameter.rb +47 -0
 - data/lib/fleakr/api/method_request.rb +57 -0
 - data/lib/fleakr/api/parameter.rb +35 -0
 - data/lib/fleakr/api/parameter_list.rb +96 -0
 - data/lib/fleakr/api/response.rb +2 -2
 - data/lib/fleakr/api/upload_request.rb +64 -0
 - data/lib/fleakr/api/value_parameter.rb +36 -0
 - data/lib/fleakr/api.rb +7 -0
 - data/lib/fleakr/core_ext/hash.rb +22 -0
 - data/lib/fleakr/core_ext.rb +1 -0
 - data/lib/fleakr/objects/authentication_token.rb +43 -0
 - data/lib/fleakr/objects/contact.rb +5 -5
 - data/lib/fleakr/objects/error.rb +2 -2
 - data/lib/fleakr/objects/group.rb +2 -2
 - data/lib/fleakr/objects/image.rb +7 -7
 - data/lib/fleakr/objects/photo.rb +69 -5
 - data/lib/fleakr/objects/search.rb +3 -6
 - data/lib/fleakr/objects/set.rb +11 -5
 - data/lib/fleakr/objects/user.rb +14 -26
 - data/lib/fleakr/objects.rb +9 -0
 - data/lib/fleakr/support/attribute.rb +30 -12
 - data/lib/fleakr/support/object.rb +20 -4
 - data/lib/fleakr/support.rb +2 -0
 - data/lib/fleakr/version.rb +1 -1
 - data/lib/fleakr.rb +66 -7
 - data/test/fixtures/auth.checkToken.xml +8 -0
 - data/test/fixtures/auth.getFullToken.xml +8 -0
 - data/test/fixtures/people.getInfo.xml +1 -1
 - data/test/fixtures/photos.getInfo.xml +20 -0
 - data/test/test_helper.rb +18 -3
 - data/test/unit/fleakr/api/file_parameter_test.rb +63 -0
 - data/test/unit/fleakr/api/method_request_test.rb +103 -0
 - data/test/unit/fleakr/api/parameter_list_test.rb +161 -0
 - data/test/unit/fleakr/api/parameter_test.rb +34 -0
 - data/test/unit/fleakr/api/upload_request_test.rb +133 -0
 - data/test/unit/fleakr/api/value_parameter_test.rb +41 -0
 - data/test/unit/fleakr/core_ext/hash_test.rb +32 -0
 - data/test/unit/fleakr/objects/authentication_token_test.rb +47 -0
 - data/test/unit/fleakr/objects/image_test.rb +10 -5
 - data/test/unit/fleakr/objects/photo_test.rb +96 -36
 - data/test/unit/fleakr/objects/search_test.rb +1 -1
 - data/test/unit/fleakr/objects/set_test.rb +12 -1
 - data/test/unit/fleakr/objects/user_test.rb +2 -16
 - data/test/unit/fleakr/support/attribute_test.rb +82 -24
 - data/test/unit/fleakr/support/object_test.rb +26 -3
 - data/test/unit/fleakr_test.rb +65 -6
 - metadata +28 -5
 - data/lib/fleakr/api/request.rb +0 -58
 - data/test/unit/fleakr/api/request_test.rb +0 -93
 
| 
         @@ -0,0 +1,103 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.dirname(__FILE__) + '/../../../test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Fleakr::Api
         
     | 
| 
      
 4 
     | 
    
         
            +
              class MethodRequestTest < Test::Unit::TestCase
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                describe "An instance of MethodRequest" do
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  context "with API credentials" do
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 11 
     | 
    
         
            +
                      @api_key = 'f00b4r'
         
     | 
| 
      
 12 
     | 
    
         
            +
                      Fleakr.stubs(:api_key).with().returns(@api_key)
         
     | 
| 
      
 13 
     | 
    
         
            +
                      Fleakr.stubs(:shared_secret).with().returns('sekrit')
         
     | 
| 
      
 14 
     | 
    
         
            +
                    end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                    it "should know the full query parameters" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                      request = MethodRequest.new('flickr.people.findByUsername', :username => 'foobar')
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                      request.parameters[:api_key].value.should  == @api_key
         
     | 
| 
      
 20 
     | 
    
         
            +
                      request.parameters[:method].value.should   == 'flickr.people.findByUsername'
         
     | 
| 
      
 21 
     | 
    
         
            +
                      request.parameters[:username].value.should == 'foobar'
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                    
         
     | 
| 
      
 24 
     | 
    
         
            +
                    it "should translate a shorthand API call" do
         
     | 
| 
      
 25 
     | 
    
         
            +
                      request = MethodRequest.new('people.findByUsername')
         
     | 
| 
      
 26 
     | 
    
         
            +
                      request.parameters[:method].value.should == 'flickr.people.findByUsername'
         
     | 
| 
      
 27 
     | 
    
         
            +
                    end
         
     | 
| 
      
 28 
     | 
    
         
            +
                    
         
     | 
| 
      
 29 
     | 
    
         
            +
                    it "should know that it needs to sign the request" do
         
     | 
| 
      
 30 
     | 
    
         
            +
                      ParameterList.expects(:new).with(:sign? => true).returns(stub(:<< => nil))
         
     | 
| 
      
 31 
     | 
    
         
            +
                      request = MethodRequest.new('people.findByUsername', :sign? => true)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
                    
         
     | 
| 
      
 34 
     | 
    
         
            +
                    it "should know that it needs to authenticate the request" do
         
     | 
| 
      
 35 
     | 
    
         
            +
                      ParameterList.expects(:new).with(:authenticate? => true).returns(stub(:<< => nil))
         
     | 
| 
      
 36 
     | 
    
         
            +
                      request = MethodRequest.new('activity.userPhotos', :authenticate? => true)
         
     | 
| 
      
 37 
     | 
    
         
            +
                    end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                    it "should know the endpoint with full parameters" do
         
     | 
| 
      
 40 
     | 
    
         
            +
                      query_parameters = 'foo=bar'
         
     | 
| 
      
 41 
     | 
    
         
            +
                    
         
     | 
| 
      
 42 
     | 
    
         
            +
                      request = MethodRequest.new('people.getInfo')
         
     | 
| 
      
 43 
     | 
    
         
            +
                      request.parameters.stubs(:to_query).returns(query_parameters)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    
         
     | 
| 
      
 45 
     | 
    
         
            +
                      uri_mock = mock() {|m| m.expects(:query=).with(query_parameters)}
         
     | 
| 
      
 46 
     | 
    
         
            +
                      URI.expects(:parse).with("http://api.flickr.com/services/rest/").returns(uri_mock)
         
     | 
| 
      
 47 
     | 
    
         
            +
                    
         
     | 
| 
      
 48 
     | 
    
         
            +
                      request.__send__(:endpoint_uri).should == uri_mock
         
     | 
| 
      
 49 
     | 
    
         
            +
                    end
         
     | 
| 
      
 50 
     | 
    
         
            +
                    
         
     | 
| 
      
 51 
     | 
    
         
            +
                    it "should be able to make a request" do
         
     | 
| 
      
 52 
     | 
    
         
            +
                      endpoint_uri = stub()
         
     | 
| 
      
 53 
     | 
    
         
            +
                      
         
     | 
| 
      
 54 
     | 
    
         
            +
                      request = MethodRequest.new('people.findByUsername')
         
     | 
| 
      
 55 
     | 
    
         
            +
                      request.stubs(:endpoint_uri).with().returns(endpoint_uri)
         
     | 
| 
      
 56 
     | 
    
         
            +
                    
         
     | 
| 
      
 57 
     | 
    
         
            +
                      Net::HTTP.expects(:get).with(endpoint_uri).returns('<xml>')
         
     | 
| 
      
 58 
     | 
    
         
            +
                    
         
     | 
| 
      
 59 
     | 
    
         
            +
                      request.send
         
     | 
| 
      
 60 
     | 
    
         
            +
                    end
         
     | 
| 
      
 61 
     | 
    
         
            +
                    
         
     | 
| 
      
 62 
     | 
    
         
            +
                    it "should create a response from the request" do
         
     | 
| 
      
 63 
     | 
    
         
            +
                      response_xml  = '<xml>'
         
     | 
| 
      
 64 
     | 
    
         
            +
                      response_stub = stub()
         
     | 
| 
      
 65 
     | 
    
         
            +
                    
         
     | 
| 
      
 66 
     | 
    
         
            +
                      Net::HTTP.stubs(:get).returns(response_xml)
         
     | 
| 
      
 67 
     | 
    
         
            +
                      Response.expects(:new).with(response_xml).returns(response_stub)
         
     | 
| 
      
 68 
     | 
    
         
            +
                      
         
     | 
| 
      
 69 
     | 
    
         
            +
                      request = MethodRequest.new('people.findByUsername')
         
     | 
| 
      
 70 
     | 
    
         
            +
                      request.stubs(:endpoint_uri)
         
     | 
| 
      
 71 
     | 
    
         
            +
                    
         
     | 
| 
      
 72 
     | 
    
         
            +
                      request.send.should == response_stub
         
     | 
| 
      
 73 
     | 
    
         
            +
                    end
         
     | 
| 
      
 74 
     | 
    
         
            +
                    
         
     | 
| 
      
 75 
     | 
    
         
            +
                    it "should be able to make a full request and response cycle" do
         
     | 
| 
      
 76 
     | 
    
         
            +
                      method = 'flickr.people.findByUsername'
         
     | 
| 
      
 77 
     | 
    
         
            +
                      params = {:username => 'foobar'}
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                      response = stub(:error? => false)
         
     | 
| 
      
 80 
     | 
    
         
            +
                      
         
     | 
| 
      
 81 
     | 
    
         
            +
                      MethodRequest.expects(:new).with(method, params).returns(stub(:send => response))
         
     | 
| 
      
 82 
     | 
    
         
            +
                      
         
     | 
| 
      
 83 
     | 
    
         
            +
                      MethodRequest.with_response!(method, params).should == response
         
     | 
| 
      
 84 
     | 
    
         
            +
                    end
         
     | 
| 
      
 85 
     | 
    
         
            +
                    
         
     | 
| 
      
 86 
     | 
    
         
            +
                    it "should raise an exception when the full request / response cycle has errors" do
         
     | 
| 
      
 87 
     | 
    
         
            +
                      method = 'flickr.people.findByUsername'
         
     | 
| 
      
 88 
     | 
    
         
            +
                      params = {:username => 'foobar'}
         
     | 
| 
      
 89 
     | 
    
         
            +
                      
         
     | 
| 
      
 90 
     | 
    
         
            +
                      response = stub(:error? => true, :error => stub(:code => '1', :message => 'User not found'))
         
     | 
| 
      
 91 
     | 
    
         
            +
                      
         
     | 
| 
      
 92 
     | 
    
         
            +
                      MethodRequest.expects(:new).with(method, params).returns(stub(:send => response))
         
     | 
| 
      
 93 
     | 
    
         
            +
                      
         
     | 
| 
      
 94 
     | 
    
         
            +
                      lambda do
         
     | 
| 
      
 95 
     | 
    
         
            +
                        MethodRequest.with_response!('flickr.people.findByUsername', :username => 'foobar')
         
     | 
| 
      
 96 
     | 
    
         
            +
                      end.should raise_error(Fleakr::ApiError)
         
     | 
| 
      
 97 
     | 
    
         
            +
                    end
         
     | 
| 
      
 98 
     | 
    
         
            +
                    
         
     | 
| 
      
 99 
     | 
    
         
            +
                  end
         
     | 
| 
      
 100 
     | 
    
         
            +
                end
         
     | 
| 
      
 101 
     | 
    
         
            +
                
         
     | 
| 
      
 102 
     | 
    
         
            +
              end
         
     | 
| 
      
 103 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,161 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.dirname(__FILE__) + '/../../../test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Fleakr::Api
         
     | 
| 
      
 4 
     | 
    
         
            +
              class ParameterListTest < Test::Unit::TestCase
         
     | 
| 
      
 5 
     | 
    
         
            +
                
         
     | 
| 
      
 6 
     | 
    
         
            +
                describe "An instance of the ParameterList class" do
         
     | 
| 
      
 7 
     | 
    
         
            +
                  
         
     | 
| 
      
 8 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 9 
     | 
    
         
            +
                    @api_key = 'key'
         
     | 
| 
      
 10 
     | 
    
         
            +
                    @secret  = 'foobar'
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                    Fleakr.stubs(:shared_secret).with().returns(@secret)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    Fleakr.stubs(:api_key).with().returns(@api_key)
         
     | 
| 
      
 14 
     | 
    
         
            +
                    @parameter_list = ParameterList.new
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
                  
         
     | 
| 
      
 17 
     | 
    
         
            +
                  it "should contain the :api_key by default" do
         
     | 
| 
      
 18 
     | 
    
         
            +
                    @parameter_list[:api_key].name.should == 'api_key'
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @parameter_list[:api_key].value.should == @api_key
         
     | 
| 
      
 20 
     | 
    
         
            +
                    @parameter_list[:api_key].include_in_signature?.should be(true)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                  
         
     | 
| 
      
 23 
     | 
    
         
            +
                  it "should be able to create an initial list of parameters" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                    parameter_list = ParameterList.new(:one => 'two')
         
     | 
| 
      
 25 
     | 
    
         
            +
                    parameter_list[:one].value.should == 'two'
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  it "should be able to add parameters to its list" do
         
     | 
| 
      
 29 
     | 
    
         
            +
                    parameter = ValueParameter.new('foo', 'bar')
         
     | 
| 
      
 30 
     | 
    
         
            +
                    
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @parameter_list << parameter
         
     | 
| 
      
 32 
     | 
    
         
            +
                    @parameter_list['foo'].should == parameter
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
                  
         
     | 
| 
      
 35 
     | 
    
         
            +
                  it "should allow access to parameters by symbol" do
         
     | 
| 
      
 36 
     | 
    
         
            +
                    parameter = ValueParameter.new('foo', 'bar')
         
     | 
| 
      
 37 
     | 
    
         
            +
                    @parameter_list << parameter
         
     | 
| 
      
 38 
     | 
    
         
            +
                    
         
     | 
| 
      
 39 
     | 
    
         
            +
                    @parameter_list[:foo].should == parameter
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
                  
         
     | 
| 
      
 42 
     | 
    
         
            +
                  it "should overwrite existing values when a duplicate is added" do
         
     | 
| 
      
 43 
     | 
    
         
            +
                    length = @parameter_list.instance_variable_get(:@list).length
         
     | 
| 
      
 44 
     | 
    
         
            +
                    2.times {@parameter_list << ValueParameter.new('foo', 'bar') }
         
     | 
| 
      
 45 
     | 
    
         
            +
                    
         
     | 
| 
      
 46 
     | 
    
         
            +
                    @parameter_list.instance_variable_get(:@list).length.should == length + 1
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
                  
         
     | 
| 
      
 49 
     | 
    
         
            +
                  it "should be able to calculate the signature of the parameters" do
         
     | 
| 
      
 50 
     | 
    
         
            +
                    @parameter_list << ValueParameter.new('foo', 'bar')
         
     | 
| 
      
 51 
     | 
    
         
            +
                    @parameter_list.signature.should == Digest::MD5.hexdigest("#{@secret}api_key#{@api_key}foobar")
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
                  
         
     | 
| 
      
 54 
     | 
    
         
            +
                  it "should use the correct order when signing a list of multiple parameters" do
         
     | 
| 
      
 55 
     | 
    
         
            +
                    @parameter_list << ValueParameter.new('z', 'a')
         
     | 
| 
      
 56 
     | 
    
         
            +
                    @parameter_list << ValueParameter.new('a', 'z')
         
     | 
| 
      
 57 
     | 
    
         
            +
                    
         
     | 
| 
      
 58 
     | 
    
         
            +
                    @parameter_list.signature.should == Digest::MD5.hexdigest("#{@secret}azapi_key#{@api_key}za")
         
     | 
| 
      
 59 
     | 
    
         
            +
                  end
         
     | 
| 
      
 60 
     | 
    
         
            +
                  
         
     | 
| 
      
 61 
     | 
    
         
            +
                  it "should ignore the parameters that aren't included in the signature" do
         
     | 
| 
      
 62 
     | 
    
         
            +
                    @parameter_list << ValueParameter.new('foo', 'bar')
         
     | 
| 
      
 63 
     | 
    
         
            +
                    @parameter_list << ValueParameter.new('yes', 'no', false)
         
     | 
| 
      
 64 
     | 
    
         
            +
                    
         
     | 
| 
      
 65 
     | 
    
         
            +
                    @parameter_list.signature.should == Digest::MD5.hexdigest("#{@secret}api_key#{@api_key}foobar")
         
     | 
| 
      
 66 
     | 
    
         
            +
                  end
         
     | 
| 
      
 67 
     | 
    
         
            +
                  
         
     | 
| 
      
 68 
     | 
    
         
            +
                  it "should be able to generate a boundary for post data" do
         
     | 
| 
      
 69 
     | 
    
         
            +
                    rand = '0.123'
         
     | 
| 
      
 70 
     | 
    
         
            +
                    
         
     | 
| 
      
 71 
     | 
    
         
            +
                    @parameter_list.stubs(:rand).with().returns(stub(:to_s => rand))
         
     | 
| 
      
 72 
     | 
    
         
            +
                    @parameter_list.boundary.should == Digest::MD5.hexdigest(rand)
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
                  
         
     | 
| 
      
 75 
     | 
    
         
            +
                  it "should know that it doesn't need to sign the request by default" do
         
     | 
| 
      
 76 
     | 
    
         
            +
                    @parameter_list.sign?.should be(false)
         
     | 
| 
      
 77 
     | 
    
         
            +
                  end
         
     | 
| 
      
 78 
     | 
    
         
            +
                  
         
     | 
| 
      
 79 
     | 
    
         
            +
                  it "should know that it needs to sign the request when asked" do
         
     | 
| 
      
 80 
     | 
    
         
            +
                    parameter_list = ParameterList.new(:sign? => true)
         
     | 
| 
      
 81 
     | 
    
         
            +
                    parameter_list.sign?.should be(true)
         
     | 
| 
      
 82 
     | 
    
         
            +
                  end
         
     | 
| 
      
 83 
     | 
    
         
            +
                  
         
     | 
| 
      
 84 
     | 
    
         
            +
                  it "should know that it doesn't need to authenticate the request by default" do
         
     | 
| 
      
 85 
     | 
    
         
            +
                    @parameter_list.authenticate?.should be(false)
         
     | 
| 
      
 86 
     | 
    
         
            +
                  end
         
     | 
| 
      
 87 
     | 
    
         
            +
                  
         
     | 
| 
      
 88 
     | 
    
         
            +
                  it "should know to authenticate the request when asked" do
         
     | 
| 
      
 89 
     | 
    
         
            +
                    Fleakr.expects(:token).with().returns(stub(:value => 'toke'))
         
     | 
| 
      
 90 
     | 
    
         
            +
                    
         
     | 
| 
      
 91 
     | 
    
         
            +
                    parameter_list = ParameterList.new(:authenticate? => true)
         
     | 
| 
      
 92 
     | 
    
         
            +
                    parameter_list.authenticate?.should be(true)
         
     | 
| 
      
 93 
     | 
    
         
            +
                  end
         
     | 
| 
      
 94 
     | 
    
         
            +
                  
         
     | 
| 
      
 95 
     | 
    
         
            +
                  it "should contain the :auth_token parameter in the list if the request is to be authenticated" do
         
     | 
| 
      
 96 
     | 
    
         
            +
                    Fleakr.expects(:token).with().returns(stub(:value => 'toke'))
         
     | 
| 
      
 97 
     | 
    
         
            +
                    
         
     | 
| 
      
 98 
     | 
    
         
            +
                    parameter_list = ParameterList.new(:authenticate? => true)
         
     | 
| 
      
 99 
     | 
    
         
            +
                    auth_param = parameter_list[:auth_token]
         
     | 
| 
      
 100 
     | 
    
         
            +
                    
         
     | 
| 
      
 101 
     | 
    
         
            +
                    auth_param.name.should == 'auth_token'
         
     | 
| 
      
 102 
     | 
    
         
            +
                    auth_param.value.should == 'toke'
         
     | 
| 
      
 103 
     | 
    
         
            +
                    auth_param.include_in_signature?.should be(true)
         
     | 
| 
      
 104 
     | 
    
         
            +
                  end
         
     | 
| 
      
 105 
     | 
    
         
            +
                  
         
     | 
| 
      
 106 
     | 
    
         
            +
                  it "should know that it needs to sign the request when it is to be authenticated" do
         
     | 
| 
      
 107 
     | 
    
         
            +
                    Fleakr.expects(:token).with().returns(stub(:value => 'toke'))
         
     | 
| 
      
 108 
     | 
    
         
            +
                    
         
     | 
| 
      
 109 
     | 
    
         
            +
                    parameter_list = ParameterList.new(:authenticate? => true)
         
     | 
| 
      
 110 
     | 
    
         
            +
                    parameter_list.sign?.should be(true)
         
     | 
| 
      
 111 
     | 
    
         
            +
                  end
         
     | 
| 
      
 112 
     | 
    
         
            +
                  
         
     | 
| 
      
 113 
     | 
    
         
            +
                  it "should include the signature in the list of parameters if the request is to be signed" do
         
     | 
| 
      
 114 
     | 
    
         
            +
                    parameter_list = ParameterList.new(:sign? => true)
         
     | 
| 
      
 115 
     | 
    
         
            +
                    parameter_list.stubs(:signature).with().returns('sig')
         
     | 
| 
      
 116 
     | 
    
         
            +
                    
         
     | 
| 
      
 117 
     | 
    
         
            +
                    signature_param = parameter_list[:api_sig]
         
     | 
| 
      
 118 
     | 
    
         
            +
                    
         
     | 
| 
      
 119 
     | 
    
         
            +
                    signature_param.name.should == 'api_sig'
         
     | 
| 
      
 120 
     | 
    
         
            +
                    signature_param.value.should == 'sig'
         
     | 
| 
      
 121 
     | 
    
         
            +
                    signature_param.include_in_signature?.should be(false)
         
     | 
| 
      
 122 
     | 
    
         
            +
                  end
         
     | 
| 
      
 123 
     | 
    
         
            +
                  
         
     | 
| 
      
 124 
     | 
    
         
            +
                  context "with associated parameters" do
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 127 
     | 
    
         
            +
                      @p1 = ValueParameter.new('a', 'b')
         
     | 
| 
      
 128 
     | 
    
         
            +
                      @p2 = ValueParameter.new('c', 'd')
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
                      @p1.stubs(:to_query).with().returns('q1')
         
     | 
| 
      
 131 
     | 
    
         
            +
                      @p1.stubs(:to_form).with().returns('f1')
         
     | 
| 
      
 132 
     | 
    
         
            +
                      
         
     | 
| 
      
 133 
     | 
    
         
            +
                      @p2.stubs(:to_query).with().returns('q2')
         
     | 
| 
      
 134 
     | 
    
         
            +
                      @p2.stubs(:to_form).with().returns('f2')
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
                      @parameter_list.stubs(:list).with().returns('a' => @p1, 'c' => @p2)
         
     | 
| 
      
 137 
     | 
    
         
            +
                    end
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                    it "should be able to generate a query representation of itself" do
         
     | 
| 
      
 140 
     | 
    
         
            +
                      @parameter_list.to_query.should == 'q1&q2'
         
     | 
| 
      
 141 
     | 
    
         
            +
                    end
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
                    it "should be able to represent a form representation of itself" do
         
     | 
| 
      
 144 
     | 
    
         
            +
                      @parameter_list.stubs(:boundary).returns('bound')
         
     | 
| 
      
 145 
     | 
    
         
            +
                      
         
     | 
| 
      
 146 
     | 
    
         
            +
                      expected = 
         
     | 
| 
      
 147 
     | 
    
         
            +
                        "--bound\r\n" +
         
     | 
| 
      
 148 
     | 
    
         
            +
                        "f1" +
         
     | 
| 
      
 149 
     | 
    
         
            +
                        "--bound\r\n" +
         
     | 
| 
      
 150 
     | 
    
         
            +
                        "f2" +
         
     | 
| 
      
 151 
     | 
    
         
            +
                        "--bound--"
         
     | 
| 
      
 152 
     | 
    
         
            +
                        
         
     | 
| 
      
 153 
     | 
    
         
            +
                      @parameter_list.to_form.should == expected
         
     | 
| 
      
 154 
     | 
    
         
            +
                    end
         
     | 
| 
      
 155 
     | 
    
         
            +
                    
         
     | 
| 
      
 156 
     | 
    
         
            +
                  end
         
     | 
| 
      
 157 
     | 
    
         
            +
                  
         
     | 
| 
      
 158 
     | 
    
         
            +
                end
         
     | 
| 
      
 159 
     | 
    
         
            +
                
         
     | 
| 
      
 160 
     | 
    
         
            +
              end
         
     | 
| 
      
 161 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.dirname(__FILE__) + '/../../../test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Fleakr::Api
         
     | 
| 
      
 4 
     | 
    
         
            +
              class ParameterTest < Test::Unit::TestCase
         
     | 
| 
      
 5 
     | 
    
         
            +
                
         
     | 
| 
      
 6 
     | 
    
         
            +
                describe "An instance of the Parameter class" do
         
     | 
| 
      
 7 
     | 
    
         
            +
                  
         
     | 
| 
      
 8 
     | 
    
         
            +
                  it "should have a name" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                    parameter = Parameter.new('foo')
         
     | 
| 
      
 10 
     | 
    
         
            +
                    parameter.name.should == 'foo'
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
                  
         
     | 
| 
      
 13 
     | 
    
         
            +
                  it "should know to include it in the signature by default" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                    parameter = Parameter.new('foo')
         
     | 
| 
      
 15 
     | 
    
         
            +
                    parameter.include_in_signature?.should be(true)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                  
         
     | 
| 
      
 18 
     | 
    
         
            +
                  it "should know not to include it in the signature" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                    parameter = Parameter.new('foo', false)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    parameter.include_in_signature?.should be(false)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                  
         
     | 
| 
      
 23 
     | 
    
         
            +
                  it "should be able to compare itself to another parameter instance" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                    p1 = Parameter.new('z', 'a')
         
     | 
| 
      
 25 
     | 
    
         
            +
                    p2 = Parameter.new('a', 'z')
         
     | 
| 
      
 26 
     | 
    
         
            +
                    
         
     | 
| 
      
 27 
     | 
    
         
            +
                    (p1 <=> p2).should == 1
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                  
         
     | 
| 
      
 30 
     | 
    
         
            +
                  
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
                
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,133 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.dirname(__FILE__) + '/../../../test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Fleakr::Api
         
     | 
| 
      
 4 
     | 
    
         
            +
              class UploadRequestTest < Test::Unit::TestCase
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                describe "An instance of the UploadRequest class" do
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 9 
     | 
    
         
            +
                    @secret = 'sekrit'
         
     | 
| 
      
 10 
     | 
    
         
            +
                    Fleakr.stubs(:shared_secret).with().returns(@secret)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
                  
         
     | 
| 
      
 13 
     | 
    
         
            +
                  it "should create a file parameter on initialization" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                    filename = '/path/to/image.jpg'
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                    parameter = stub()
         
     | 
| 
      
 17 
     | 
    
         
            +
                    FileParameter.expects(:new).with('photo', filename).returns(parameter)
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    parameter_list = mock() {|m| m.expects(:<<).with(parameter) }
         
     | 
| 
      
 20 
     | 
    
         
            +
                    ParameterList.expects(:new).with(:authenticate? => true).returns(parameter_list)
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                    UploadRequest.new(filename)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                  
         
     | 
| 
      
 25 
     | 
    
         
            +
                  it "should allow setting additional parameters on initialization" do
         
     | 
| 
      
 26 
     | 
    
         
            +
                    params = {:is_public => 1}
         
     | 
| 
      
 27 
     | 
    
         
            +
                    
         
     | 
| 
      
 28 
     | 
    
         
            +
                    ParameterList.expects(:new).with({:is_public => 1, :authenticate? => true}).returns(stub(:<<))
         
     | 
| 
      
 29 
     | 
    
         
            +
                    
         
     | 
| 
      
 30 
     | 
    
         
            +
                    UploadRequest.new('filename', params)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  context "after initialization" do
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                    before { ParameterList.stubs(:new).returns(stub(:<< => nil)) }
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                    it "should default the type to :create" do
         
     | 
| 
      
 38 
     | 
    
         
            +
                      request = UploadRequest.new('file')
         
     | 
| 
      
 39 
     | 
    
         
            +
                      request.type.should == :create
         
     | 
| 
      
 40 
     | 
    
         
            +
                    end
         
     | 
| 
      
 41 
     | 
    
         
            +
                    
         
     | 
| 
      
 42 
     | 
    
         
            +
                    it "should allow setting the type to :update" do
         
     | 
| 
      
 43 
     | 
    
         
            +
                      request = UploadRequest.new('file', :type => :update)
         
     | 
| 
      
 44 
     | 
    
         
            +
                      request.type.should == :update
         
     | 
| 
      
 45 
     | 
    
         
            +
                    end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                    it "should know the endpoint_uri" do
         
     | 
| 
      
 48 
     | 
    
         
            +
                      request = UploadRequest.new('filename')
         
     | 
| 
      
 49 
     | 
    
         
            +
                      request.__send__(:endpoint_uri).should == URI.parse('http://api.flickr.com/services/upload/')
         
     | 
| 
      
 50 
     | 
    
         
            +
                    end
         
     | 
| 
      
 51 
     | 
    
         
            +
                    
         
     | 
| 
      
 52 
     | 
    
         
            +
                    it "should know the endpoint_uri for an :update request" do
         
     | 
| 
      
 53 
     | 
    
         
            +
                      request = UploadRequest.new('filename', :type => :update)
         
     | 
| 
      
 54 
     | 
    
         
            +
                      request.__send__(:endpoint_uri).should == URI.parse('http://api.flickr.com/services/replace/')
         
     | 
| 
      
 55 
     | 
    
         
            +
                    end
         
     | 
| 
      
 56 
     | 
    
         
            +
                    
         
     | 
| 
      
 57 
     | 
    
         
            +
                    it "should only parse the endpoint URI once" do
         
     | 
| 
      
 58 
     | 
    
         
            +
                      request = UploadRequest.new('filename')
         
     | 
| 
      
 59 
     | 
    
         
            +
                      URI.expects(:parse).with(kind_of(String)).once.returns('uri')
         
     | 
| 
      
 60 
     | 
    
         
            +
                      
         
     | 
| 
      
 61 
     | 
    
         
            +
                      2.times { request.__send__(:endpoint_uri) }
         
     | 
| 
      
 62 
     | 
    
         
            +
                    end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                    it "should have a collection of required headers" do
         
     | 
| 
      
 65 
     | 
    
         
            +
                      form_data = 'data'
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                      request = UploadRequest.new('filename')
         
     | 
| 
      
 68 
     | 
    
         
            +
                      request.parameters.stubs(:boundary).with().returns('bound')
         
     | 
| 
      
 69 
     | 
    
         
            +
                      request.parameters.stubs(:to_form).with().returns(form_data)
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                      expected = {
         
     | 
| 
      
 72 
     | 
    
         
            +
                        'Content-Type' => 'multipart/form-data; boundary=bound'
         
     | 
| 
      
 73 
     | 
    
         
            +
                      }
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                      request.headers.should == expected
         
     | 
| 
      
 76 
     | 
    
         
            +
                    end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                    it "should be able to send a POST request to the API service" do
         
     | 
| 
      
 79 
     | 
    
         
            +
                      request = UploadRequest.new('filename')
         
     | 
| 
      
 80 
     | 
    
         
            +
                      
         
     | 
| 
      
 81 
     | 
    
         
            +
                      uri = stub do |s|
         
     | 
| 
      
 82 
     | 
    
         
            +
                        s.stubs(:host).with().returns('host')
         
     | 
| 
      
 83 
     | 
    
         
            +
                        s.stubs(:path).with().returns('path')
         
     | 
| 
      
 84 
     | 
    
         
            +
                        s.stubs(:port).with().returns(80)
         
     | 
| 
      
 85 
     | 
    
         
            +
                      end
         
     | 
| 
      
 86 
     | 
    
         
            +
                      
         
     | 
| 
      
 87 
     | 
    
         
            +
                      request.stubs(:endpoint_uri).with().returns(uri)
         
     | 
| 
      
 88 
     | 
    
         
            +
                      
         
     | 
| 
      
 89 
     | 
    
         
            +
                      request.stubs(:headers).with().returns('header' => 'value')
         
     | 
| 
      
 90 
     | 
    
         
            +
                      request.parameters.stubs(:to_form).with().returns('form')
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                      http = mock {|m| m.expects(:post).with('path', 'form', {'header' => 'value'}) }
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                      Net::HTTP.expects(:start).with('host', 80).yields(http).returns(stub(:body))
         
     | 
| 
      
 95 
     | 
    
         
            +
                      
         
     | 
| 
      
 96 
     | 
    
         
            +
                      request.send
         
     | 
| 
      
 97 
     | 
    
         
            +
                    end
         
     | 
| 
      
 98 
     | 
    
         
            +
                    
         
     | 
| 
      
 99 
     | 
    
         
            +
                    it "should get back a response from a POST operation" do
         
     | 
| 
      
 100 
     | 
    
         
            +
                      response = stub()
         
     | 
| 
      
 101 
     | 
    
         
            +
                      
         
     | 
| 
      
 102 
     | 
    
         
            +
                      Net::HTTP.expects(:start).with(kind_of(String), kind_of(Fixnum)).returns(stub(:body => '<xml>'))
         
     | 
| 
      
 103 
     | 
    
         
            +
                      Response.expects(:new).with('<xml>').returns(response)
         
     | 
| 
      
 104 
     | 
    
         
            +
                      
         
     | 
| 
      
 105 
     | 
    
         
            +
                      request = UploadRequest.new('filename')
         
     | 
| 
      
 106 
     | 
    
         
            +
                      request.send.should == response
         
     | 
| 
      
 107 
     | 
    
         
            +
                    end
         
     | 
| 
      
 108 
     | 
    
         
            +
                    
         
     | 
| 
      
 109 
     | 
    
         
            +
                    it "should be able to make a full request and response cycle" do
         
     | 
| 
      
 110 
     | 
    
         
            +
                      filename = 'filename'
         
     | 
| 
      
 111 
     | 
    
         
            +
                      response = stub(:error? => false)
         
     | 
| 
      
 112 
     | 
    
         
            +
                      
         
     | 
| 
      
 113 
     | 
    
         
            +
                      UploadRequest.expects(:new).with(filename, {}).returns(stub(:send => response))
         
     | 
| 
      
 114 
     | 
    
         
            +
                      UploadRequest.with_response!(filename).should == response
         
     | 
| 
      
 115 
     | 
    
         
            +
                    end
         
     | 
| 
      
 116 
     | 
    
         
            +
                    
         
     | 
| 
      
 117 
     | 
    
         
            +
                    it "should raise an exception when the full request / response cycle has errors" do
         
     | 
| 
      
 118 
     | 
    
         
            +
                      filename = 'filename'
         
     | 
| 
      
 119 
     | 
    
         
            +
                      response = stub(:error? => true, :error => stub(:code => '1', :message => 'User not found'))
         
     | 
| 
      
 120 
     | 
    
         
            +
                      
         
     | 
| 
      
 121 
     | 
    
         
            +
                      UploadRequest.expects(:new).with(filename, {}).returns(stub(:send => response))
         
     | 
| 
      
 122 
     | 
    
         
            +
                      
         
     | 
| 
      
 123 
     | 
    
         
            +
                      lambda do
         
     | 
| 
      
 124 
     | 
    
         
            +
                        UploadRequest.with_response!(filename)
         
     | 
| 
      
 125 
     | 
    
         
            +
                      end.should raise_error(Fleakr::ApiError)
         
     | 
| 
      
 126 
     | 
    
         
            +
                    end
         
     | 
| 
      
 127 
     | 
    
         
            +
                    
         
     | 
| 
      
 128 
     | 
    
         
            +
                  end
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
                end
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
              end
         
     | 
| 
      
 133 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,41 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.dirname(__FILE__) + '/../../../test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Fleakr::Api
         
     | 
| 
      
 4 
     | 
    
         
            +
              class ValueParameterTest < Test::Unit::TestCase
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
               describe "An instance of the ValueParameter class" do
         
     | 
| 
      
 7 
     | 
    
         
            +
                  
         
     | 
| 
      
 8 
     | 
    
         
            +
                 it "should have a value" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                   parameter = ValueParameter.new('foo', 'bar')
         
     | 
| 
      
 10 
     | 
    
         
            +
                   parameter.value.should == 'bar'
         
     | 
| 
      
 11 
     | 
    
         
            +
                 end
         
     | 
| 
      
 12 
     | 
    
         
            +
                  
         
     | 
| 
      
 13 
     | 
    
         
            +
                  it "should know how to generate the query representation of itself" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                    parameter = ValueParameter.new('foo', 'bar')
         
     | 
| 
      
 15 
     | 
    
         
            +
                    parameter.to_query.should == 'foo=bar'
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                  
         
     | 
| 
      
 18 
     | 
    
         
            +
                  it "should escape the value when generating the query representation" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                    parameter = ValueParameter.new('foo', 'Mr. Crystal?')
         
     | 
| 
      
 20 
     | 
    
         
            +
                    parameter.to_query.should == 'foo=Mr.+Crystal%3F'
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                  
         
     | 
| 
      
 23 
     | 
    
         
            +
                  it "should use an empty string when generating a query if the parameter value is nil" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                    parameter = ValueParameter.new('foo', nil)
         
     | 
| 
      
 25 
     | 
    
         
            +
                    parameter.to_query.should == 'foo='
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  
         
     | 
| 
      
 28 
     | 
    
         
            +
                  it "should know how to generate the form representation of itself" do
         
     | 
| 
      
 29 
     | 
    
         
            +
                    parameter = ValueParameter.new('foo', 'bar')
         
     | 
| 
      
 30 
     | 
    
         
            +
                    expected = 
         
     | 
| 
      
 31 
     | 
    
         
            +
                      'Content-Disposition: form-data; name="foo"' + "\r\n" +
         
     | 
| 
      
 32 
     | 
    
         
            +
                      "\r\n" +
         
     | 
| 
      
 33 
     | 
    
         
            +
                      "bar\r\n"
         
     | 
| 
      
 34 
     | 
    
         
            +
                      
         
     | 
| 
      
 35 
     | 
    
         
            +
                    parameter.to_form.should == expected
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
               
         
     | 
| 
      
 38 
     | 
    
         
            +
               end
         
     | 
| 
      
 39 
     | 
    
         
            +
                
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,32 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.dirname(__FILE__) + '/../../../test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class HashTest < Test::Unit::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
              
         
     | 
| 
      
 5 
     | 
    
         
            +
              describe "An instance of Hash" do
         
     | 
| 
      
 6 
     | 
    
         
            +
                context "when extracting key/value pairs" do
         
     | 
| 
      
 7 
     | 
    
         
            +
                  
         
     | 
| 
      
 8 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 9 
     | 
    
         
            +
                    @hash = {:one => 'two', :three => 'four'}
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
                  
         
     | 
| 
      
 12 
     | 
    
         
            +
                  it "should return a hash with the matching key/value pairs" do
         
     | 
| 
      
 13 
     | 
    
         
            +
                    @hash.extract!(:one).should == {:one => 'two'}
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                  
         
     | 
| 
      
 16 
     | 
    
         
            +
                  it "should return an empty hash if the key isn't found" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                    @hash.extract!(:foo).should == {}
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
                  
         
     | 
| 
      
 20 
     | 
    
         
            +
                  it "should alter the original hash when a value is extracted" do
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @hash.extract!(:one)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @hash.should == {:three => 'four'}
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                  
         
     | 
| 
      
 25 
     | 
    
         
            +
                  it "should be able to extract multiple keys" do
         
     | 
| 
      
 26 
     | 
    
         
            +
                    @hash.extract!(:one, :three, :missing).should == {:one => 'two', :three => 'four'}
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
              
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.dirname(__FILE__) + '/../../../test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Fleakr::Objects
         
     | 
| 
      
 4 
     | 
    
         
            +
              class AuthenticationTokenTest < Test::Unit::TestCase
         
     | 
| 
      
 5 
     | 
    
         
            +
                
         
     | 
| 
      
 6 
     | 
    
         
            +
                describe "The AuthenticationToken class" do
         
     | 
| 
      
 7 
     | 
    
         
            +
                  
         
     | 
| 
      
 8 
     | 
    
         
            +
                  it "should be able to create an instance from a mini_token" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                    token = '123-123-123'
         
     | 
| 
      
 10 
     | 
    
         
            +
                    auth_token = stub()
         
     | 
| 
      
 11 
     | 
    
         
            +
                    
         
     | 
| 
      
 12 
     | 
    
         
            +
                    response = mock_request_cycle :for => 'auth.getFullToken', :with => {:mini_token => token, :sign? => true}
         
     | 
| 
      
 13 
     | 
    
         
            +
                    
         
     | 
| 
      
 14 
     | 
    
         
            +
                    AuthenticationToken.expects(:new).with(response.body).returns(auth_token)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    
         
     | 
| 
      
 16 
     | 
    
         
            +
                    AuthenticationToken.from_mini_token(token).should == auth_token
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                  
         
     | 
| 
      
 19 
     | 
    
         
            +
                  it "should be able to create an instance from an auth_token" do
         
     | 
| 
      
 20 
     | 
    
         
            +
                    token      = 'abc123'
         
     | 
| 
      
 21 
     | 
    
         
            +
                    auth_token = stub()
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                    response = mock_request_cycle :for => 'auth.checkToken', :with => {:auth_token => token, :sign? => true}
         
     | 
| 
      
 24 
     | 
    
         
            +
                    
         
     | 
| 
      
 25 
     | 
    
         
            +
                    AuthenticationToken.expects(:new).with(response.body).returns(auth_token)
         
     | 
| 
      
 26 
     | 
    
         
            +
                    AuthenticationToken.from_auth_token(token).should == auth_token
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
                
         
     | 
| 
      
 31 
     | 
    
         
            +
                describe "An instance of the AuthenticationToken class" do
         
     | 
| 
      
 32 
     | 
    
         
            +
                  
         
     | 
| 
      
 33 
     | 
    
         
            +
                  context "when populating from an XML document" do
         
     | 
| 
      
 34 
     | 
    
         
            +
                    
         
     | 
| 
      
 35 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 36 
     | 
    
         
            +
                      @object = AuthenticationToken.new(Hpricot.XML(read_fixture('auth.getFullToken')))
         
     | 
| 
      
 37 
     | 
    
         
            +
                    end
         
     | 
| 
      
 38 
     | 
    
         
            +
                    
         
     | 
| 
      
 39 
     | 
    
         
            +
                    should_have_a_value_for :value       => 'abc-123'
         
     | 
| 
      
 40 
     | 
    
         
            +
                    should_have_a_value_for :permissions => 'delete'
         
     | 
| 
      
 41 
     | 
    
         
            +
                    
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
                  
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
                
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -45,6 +45,9 @@ module Fleakr::Objects 
     | 
|
| 
       45 
45 
     | 
    
         
             
                        @image = Image.new
         
     | 
| 
       46 
46 
     | 
    
         
             
                        @image.stubs(:url).with().returns(@url)
         
     | 
| 
       47 
47 
     | 
    
         
             
                        @image.stubs(:filename).with().returns(@image_filename)
         
     | 
| 
      
 48 
     | 
    
         
            +
                        
         
     | 
| 
      
 49 
     | 
    
         
            +
                        @image_data = 'image_data'
         
     | 
| 
      
 50 
     | 
    
         
            +
                        Net::HTTP.expects(:get).with(URI.parse(@url)).returns(@image_data)
         
     | 
| 
       48 
51 
     | 
    
         
             
                      end
         
     | 
| 
       49 
52 
     | 
    
         | 
| 
       50 
53 
     | 
    
         
             
                      after do
         
     | 
| 
         @@ -52,20 +55,22 @@ module Fleakr::Objects 
     | 
|
| 
       52 
55 
     | 
    
         
             
                      end
         
     | 
| 
       53 
56 
     | 
    
         | 
| 
       54 
57 
     | 
    
         
             
                      should "be able to save to a directory with the original filename" do
         
     | 
| 
       55 
     | 
    
         
            -
                        Net::HTTP.expects(:get).with(URI.parse(@url)).returns('image_data')
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
58 
     | 
    
         
             
                        @image.save_to(@tmp_dir)
         
     | 
| 
       58 
     | 
    
         
            -
                        File.read("#{@tmp_dir}/image.jpg").should ==  
     | 
| 
      
 59 
     | 
    
         
            +
                        File.read("#{@tmp_dir}/image.jpg").should == @image_data
         
     | 
| 
       59 
60 
     | 
    
         
             
                      end
         
     | 
| 
       60 
61 
     | 
    
         | 
| 
       61 
62 
     | 
    
         
             
                      should "be able to save to a specified file" do
         
     | 
| 
       62 
     | 
    
         
            -
                        Net::HTTP.expects(:get).with(URI.parse(@url)).returns('image_data')
         
     | 
| 
       63 
63 
     | 
    
         
             
                        existing_file = "#{@tmp_dir}/existing_file.jpg"
         
     | 
| 
       64 
64 
     | 
    
         | 
| 
       65 
65 
     | 
    
         
             
                        FileUtils.touch(existing_file)
         
     | 
| 
       66 
66 
     | 
    
         | 
| 
       67 
67 
     | 
    
         
             
                        @image.save_to(existing_file)
         
     | 
| 
       68 
     | 
    
         
            -
                        File.read(existing_file).should ==  
     | 
| 
      
 68 
     | 
    
         
            +
                        File.read(existing_file).should == @image_data
         
     | 
| 
      
 69 
     | 
    
         
            +
                      end
         
     | 
| 
      
 70 
     | 
    
         
            +
                      
         
     | 
| 
      
 71 
     | 
    
         
            +
                      should "be able to save the file using a specified prefix" do
         
     | 
| 
      
 72 
     | 
    
         
            +
                        @image.save_to(@tmp_dir, '001_')
         
     | 
| 
      
 73 
     | 
    
         
            +
                        File.read("#{@tmp_dir}/001_image.jpg").should == @image_data
         
     | 
| 
       69 
74 
     | 
    
         
             
                      end
         
     | 
| 
       70 
75 
     | 
    
         | 
| 
       71 
76 
     | 
    
         
             
                    end
         
     |