koala 3.0.0.beta1 → 3.0.0.beta2
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.
- checksums.yaml +4 -4
 - data/.travis.yml +1 -1
 - data/changelog.md +19 -3
 - data/koala.gemspec +3 -0
 - data/lib/koala/api.rb +47 -19
 - data/lib/koala/api/{graph_api.rb → graph_api_methods.rb} +9 -59
 - data/lib/koala/api/graph_batch_api.rb +107 -62
 - data/lib/koala/http_service/request.rb +1 -5
 - data/lib/koala/http_service/response.rb +6 -0
 - data/lib/koala/test_users.rb +5 -4
 - data/lib/koala/version.rb +1 -1
 - data/spec/cases/api_spec.rb +79 -51
 - data/spec/cases/graph_api_batch_spec.rb +22 -22
 - data/spec/cases/graph_api_spec.rb +15 -10
 - data/spec/cases/graph_collection_spec.rb +3 -3
 - data/spec/cases/http_service/response_spec.rb +24 -0
 - data/spec/cases/test_users_spec.rb +11 -0
 - data/spec/fixtures/cat.m4v +0 -0
 - data/spec/fixtures/facebook_data.yml +1 -1
 - data/spec/fixtures/mock_facebook_responses.yml +25 -28
 - data/spec/fixtures/vcr_cassettes/app_test_accounts.yml +97 -0
 - data/spec/integration/graph_collection_spec.rb +8 -5
 - data/spec/support/graph_api_shared_examples.rb +142 -199
 - data/spec/support/koala_test.rb +2 -4
 - data/spec/support/mock_http_service.rb +3 -3
 - metadata +23 -5
 
| 
         @@ -14,11 +14,7 @@ module Koala 
     | 
|
| 
       14 
14 
     | 
    
         
             
                  # @option options :beta use the beta tier
         
     | 
| 
       15 
15 
     | 
    
         
             
                  # @option options :use_ssl force https, even if not needed
         
     | 
| 
       16 
16 
     | 
    
         
             
                  # @option options :json whether or not to send JSON to Facebook
         
     | 
| 
       17 
     | 
    
         
            -
                  def initialize(path 
     | 
| 
       18 
     | 
    
         
            -
                    # we still support Ruby 2.0 so we can't use required keyword arguments
         
     | 
| 
       19 
     | 
    
         
            -
                    raise ArgumentError, "Missing required argument verb" unless verb
         
     | 
| 
       20 
     | 
    
         
            -
                    raise ArgumentError, "Missing required argument path" unless path
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
                  def initialize(path:, verb:, args: {}, options: {})
         
     | 
| 
       22 
18 
     | 
    
         
             
                    @raw_path = path
         
     | 
| 
       23 
19 
     | 
    
         
             
                    @raw_args = args
         
     | 
| 
       24 
20 
     | 
    
         
             
                    @raw_verb = verb
         
     | 
| 
         @@ -9,6 +9,12 @@ module Koala 
     | 
|
| 
       9 
9 
     | 
    
         
             
                    @body = body
         
     | 
| 
       10 
10 
     | 
    
         
             
                    @headers = headers
         
     | 
| 
       11 
11 
     | 
    
         
             
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  def data
         
     | 
| 
      
 14 
     | 
    
         
            +
                    # quirks_mode is needed because Facebook sometimes returns a raw true or false value --
         
     | 
| 
      
 15 
     | 
    
         
            +
                    # in Ruby 2.4 we can drop that.
         
     | 
| 
      
 16 
     | 
    
         
            +
                    @data ||= JSON.parse(body, quirks_mode: true) unless body.empty?
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
       12 
18 
     | 
    
         
             
                end
         
     | 
| 
       13 
19 
     | 
    
         
             
              end
         
     | 
| 
       14 
20 
     | 
    
         
             
            end
         
     | 
    
        data/lib/koala/test_users.rb
    CHANGED
    
    | 
         @@ -146,11 +146,12 @@ module Koala 
     | 
|
| 
       146 
146 
     | 
    
         
             
                      raise ArgumentError, "TestUsers#befriend requires hash arguments for both users with id and access_token"
         
     | 
| 
       147 
147 
     | 
    
         
             
                    end
         
     | 
| 
       148 
148 
     | 
    
         | 
| 
       149 
     | 
    
         
            -
                    u1_graph_api = API.new(user1_token)
         
     | 
| 
       150 
     | 
    
         
            -
                    u2_graph_api = API.new(user2_token)
         
     | 
| 
      
 149 
     | 
    
         
            +
                    u1_graph_api = API.new(user1_token, secret)
         
     | 
| 
      
 150 
     | 
    
         
            +
                    u2_graph_api = API.new(user2_token, secret)
         
     | 
| 
       151 
151 
     | 
    
         | 
| 
       152 
     | 
    
         
            -
                     
     | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
      
 152 
     | 
    
         
            +
                    # if we have a secret token, flag that we want the appsecret_proof to be generated
         
     | 
| 
      
 153 
     | 
    
         
            +
                    u1_graph_api.graph_call("#{user1_id}/friends/#{user2_id}", {}, "post", options.merge(appsecret_proof: !!secret)) &&
         
     | 
| 
      
 154 
     | 
    
         
            +
                      u2_graph_api.graph_call("#{user2_id}/friends/#{user1_id}", {}, "post", options.merge(appsecret_proof: !!secret))
         
     | 
| 
       154 
155 
     | 
    
         
             
                  end
         
     | 
| 
       155 
156 
     | 
    
         | 
| 
       156 
157 
     | 
    
         
             
                  # Create a network of test users, all of whom are friends and have the same permissions.
         
     | 
    
        data/lib/koala/version.rb
    CHANGED
    
    
    
        data/spec/cases/api_spec.rb
    CHANGED
    
    | 
         @@ -1,9 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            describe "Koala::Facebook::API" do
         
     | 
| 
       4 
     | 
    
         
            -
              before 
     | 
| 
      
 4 
     | 
    
         
            +
              before :each do
         
     | 
| 
       5 
5 
     | 
    
         
             
                @service = Koala::Facebook::API.new
         
     | 
| 
       6 
6 
     | 
    
         
             
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
              let(:dummy_response) { double("fake response", data: {}, status: 200, body: "", headers: {}) }
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
       8 
9 
     | 
    
         
             
              it "doesn't include an access token if none was given" do
         
     | 
| 
       9 
10 
     | 
    
         
             
                expect(Koala).to receive(:make_request).with(
         
     | 
| 
         @@ -57,24 +58,6 @@ describe "Koala::Facebook::API" do 
     | 
|
| 
       57 
58 
     | 
    
         
             
                expect(service.app_secret).to eq(secret)
         
     | 
| 
       58 
59 
     | 
    
         
             
              end
         
     | 
| 
       59 
60 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
              it "gets the attribute of a Koala::HTTPService::Response given by the http_component parameter" do
         
     | 
| 
       61 
     | 
    
         
            -
                http_component = :method_name
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
                response = double('Mock KoalaResponse', :body => '', :status => 200)
         
     | 
| 
       64 
     | 
    
         
            -
                result = double("result")
         
     | 
| 
       65 
     | 
    
         
            -
                allow(response).to receive(http_component).and_return(result)
         
     | 
| 
       66 
     | 
    
         
            -
                allow(Koala).to receive(:make_request).and_return(response)
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
                expect(@service.api('anything', {}, 'get', :http_component => http_component)).to eq(result)
         
     | 
| 
       69 
     | 
    
         
            -
              end
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
              it "returns the entire response if http_component => :response" do
         
     | 
| 
       72 
     | 
    
         
            -
                http_component = :response
         
     | 
| 
       73 
     | 
    
         
            -
                response = double('Mock KoalaResponse', :body => '', :status => 200)
         
     | 
| 
       74 
     | 
    
         
            -
                allow(Koala).to receive(:make_request).and_return(response)
         
     | 
| 
       75 
     | 
    
         
            -
                expect(@service.api('anything', {}, 'get', :http_component => http_component)).to eq(response)
         
     | 
| 
       76 
     | 
    
         
            -
              end
         
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
61 
     | 
    
         
             
              it "turns arrays of non-enumerables into comma-separated arguments by default" do
         
     | 
| 
       79 
62 
     | 
    
         
             
                args = [12345, {:foo => [1, 2, "3", :four]}]
         
     | 
| 
       80 
63 
     | 
    
         
             
                expected = ["/12345", {:foo => "1,2,3,four"}, "get", {}]
         
     | 
| 
         @@ -123,43 +106,12 @@ describe "Koala::Facebook::API" do 
     | 
|
| 
       123 
106 
     | 
    
         
             
                @service.api(*args)
         
     | 
| 
       124 
107 
     | 
    
         
             
              end
         
     | 
| 
       125 
108 
     | 
    
         | 
| 
       126 
     | 
    
         
            -
              it "returns the body of the request as JSON if no http_component is given" do
         
     | 
| 
       127 
     | 
    
         
            -
                response = double('response', :body => 'body', :status => 200)
         
     | 
| 
       128 
     | 
    
         
            -
                allow(Koala).to receive(:make_request).and_return(response)
         
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
                json_body = double('JSON body')
         
     | 
| 
       131 
     | 
    
         
            -
                allow(JSON).to receive(:parse).and_return([json_body])
         
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
                expect(@service.api('anything')).to eq(json_body)
         
     | 
| 
       134 
     | 
    
         
            -
              end
         
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
              it "executes an error checking block if provided" do
         
     | 
| 
       137 
     | 
    
         
            -
                response = Koala::HTTPService::Response.new(200, '{}', {})
         
     | 
| 
       138 
     | 
    
         
            -
                allow(Koala).to receive(:make_request).and_return(response)
         
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
       140 
     | 
    
         
            -
                yield_test = double('Yield Tester')
         
     | 
| 
       141 
     | 
    
         
            -
                expect(yield_test).to receive(:pass)
         
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
                @service.api('anything', {}, "get") do |arg|
         
     | 
| 
       144 
     | 
    
         
            -
                  yield_test.pass
         
     | 
| 
       145 
     | 
    
         
            -
                  expect(arg).to eq(response)
         
     | 
| 
       146 
     | 
    
         
            -
                end
         
     | 
| 
       147 
     | 
    
         
            -
              end
         
     | 
| 
       148 
     | 
    
         
            -
             
     | 
| 
       149 
109 
     | 
    
         
             
              it "raises an API error if the HTTP response code is greater than or equal to 500" do
         
     | 
| 
       150 
110 
     | 
    
         
             
                allow(Koala).to receive(:make_request).and_return(Koala::HTTPService::Response.new(500, 'response body', {}))
         
     | 
| 
       151 
111 
     | 
    
         | 
| 
       152 
112 
     | 
    
         
             
                expect { @service.api('anything') }.to raise_exception(Koala::Facebook::APIError)
         
     | 
| 
       153 
113 
     | 
    
         
             
              end
         
     | 
| 
       154 
114 
     | 
    
         | 
| 
       155 
     | 
    
         
            -
              it "handles rogue true/false as responses" do
         
     | 
| 
       156 
     | 
    
         
            -
                expect(Koala).to receive(:make_request).and_return(Koala::HTTPService::Response.new(200, 'true', {}))
         
     | 
| 
       157 
     | 
    
         
            -
                expect(@service.api('anything')).to be_truthy
         
     | 
| 
       158 
     | 
    
         
            -
             
     | 
| 
       159 
     | 
    
         
            -
                expect(Koala).to receive(:make_request).and_return(Koala::HTTPService::Response.new(200, 'false', {}))
         
     | 
| 
       160 
     | 
    
         
            -
                expect(@service.api('anything')).to be_falsey
         
     | 
| 
       161 
     | 
    
         
            -
              end
         
     | 
| 
       162 
     | 
    
         
            -
             
     | 
| 
       163 
115 
     | 
    
         
             
              describe "path manipulation" do
         
     | 
| 
       164 
116 
     | 
    
         
             
                context "leading /" do
         
     | 
| 
       165 
117 
     | 
    
         
             
                  it "adds a leading / to the path if not present" do
         
     | 
| 
         @@ -179,6 +131,7 @@ describe "Koala::Facebook::API" do 
     | 
|
| 
       179 
131 
     | 
    
         
             
              describe "with an access token" do
         
     | 
| 
       180 
132 
     | 
    
         
             
                before(:each) do
         
     | 
| 
       181 
133 
     | 
    
         
             
                  @api = Koala::Facebook::API.new(@token)
         
     | 
| 
      
 134 
     | 
    
         
            +
                  @app_access_token = KoalaTest.app_access_token
         
     | 
| 
       182 
135 
     | 
    
         
             
                end
         
     | 
| 
       183 
136 
     | 
    
         | 
| 
       184 
137 
     | 
    
         
             
                it_should_behave_like "Koala GraphAPI"
         
     | 
| 
         @@ -191,9 +144,10 @@ describe "Koala::Facebook::API" do 
     | 
|
| 
       191 
144 
     | 
    
         
             
                  @api = Koala::Facebook::API.new
         
     | 
| 
       192 
145 
     | 
    
         
             
                end
         
     | 
| 
       193 
146 
     | 
    
         | 
| 
      
 147 
     | 
    
         
            +
                # In theory this should behave the same with a GraphCollection, but those tests currently hit
         
     | 
| 
      
 148 
     | 
    
         
            +
                # an endpoint that now requires a token.
         
     | 
| 
       194 
149 
     | 
    
         
             
                it_should_behave_like "Koala GraphAPI"
         
     | 
| 
       195 
150 
     | 
    
         
             
                it_should_behave_like "Koala GraphAPI without an access token"
         
     | 
| 
       196 
     | 
    
         
            -
                it_should_behave_like "Koala GraphAPI with GraphCollection"
         
     | 
| 
       197 
151 
     | 
    
         
             
              end
         
     | 
| 
       198 
152 
     | 
    
         | 
| 
       199 
153 
     | 
    
         
             
              context '#api' do
         
     | 
| 
         @@ -246,4 +200,78 @@ describe "Koala::Facebook::API" do 
     | 
|
| 
       246 
200 
     | 
    
         
             
                  end
         
     | 
| 
       247 
201 
     | 
    
         
             
                end
         
     | 
| 
       248 
202 
     | 
    
         
             
              end
         
     | 
| 
      
 203 
     | 
    
         
            +
             
     | 
| 
      
 204 
     | 
    
         
            +
              describe "#graph_call" do
         
     | 
| 
      
 205 
     | 
    
         
            +
                it "passes all arguments to the api method" do
         
     | 
| 
      
 206 
     | 
    
         
            +
                  user = KoalaTest.user1
         
     | 
| 
      
 207 
     | 
    
         
            +
                  args = {}
         
     | 
| 
      
 208 
     | 
    
         
            +
                  verb = 'get'
         
     | 
| 
      
 209 
     | 
    
         
            +
                  opts = {:a => :b}
         
     | 
| 
      
 210 
     | 
    
         
            +
                  expect(@service).to receive(:api).with(user, args, verb, opts).and_return(dummy_response)
         
     | 
| 
      
 211 
     | 
    
         
            +
                  @service.graph_call(user, args, verb, opts)
         
     | 
| 
      
 212 
     | 
    
         
            +
                end
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
      
 214 
     | 
    
         
            +
                it "throws an APIError if the result hash has an error key" do
         
     | 
| 
      
 215 
     | 
    
         
            +
                  allow(Koala).to receive(:make_request).and_return(Koala::HTTPService::Response.new(500, '{"error": "An error occurred!"}', {}))
         
     | 
| 
      
 216 
     | 
    
         
            +
                  expect { @service.graph_call(KoalaTest.user1, {}) }.to raise_exception(Koala::Facebook::APIError)
         
     | 
| 
      
 217 
     | 
    
         
            +
                end
         
     | 
| 
      
 218 
     | 
    
         
            +
             
     | 
| 
      
 219 
     | 
    
         
            +
                it "passes the results through GraphCollection.evaluate" do
         
     | 
| 
      
 220 
     | 
    
         
            +
                  allow(@service).to receive(:api).and_return(dummy_response)
         
     | 
| 
      
 221 
     | 
    
         
            +
                  expect(Koala::Facebook::API::GraphCollection).to receive(:evaluate).with(dummy_response.data, @service)
         
     | 
| 
      
 222 
     | 
    
         
            +
                  @service.graph_call("/me")
         
     | 
| 
      
 223 
     | 
    
         
            +
                end
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
                it "returns the results of GraphCollection.evaluate" do
         
     | 
| 
      
 226 
     | 
    
         
            +
                  expected = {}
         
     | 
| 
      
 227 
     | 
    
         
            +
                  allow(@service).to receive(:api).and_return(dummy_response)
         
     | 
| 
      
 228 
     | 
    
         
            +
                  expect(Koala::Facebook::API::GraphCollection).to receive(:evaluate).and_return(expected)
         
     | 
| 
      
 229 
     | 
    
         
            +
                  expect(@service.graph_call("/me")).to eq(expected)
         
     | 
| 
      
 230 
     | 
    
         
            +
                end
         
     | 
| 
      
 231 
     | 
    
         
            +
             
     | 
| 
      
 232 
     | 
    
         
            +
                it "returns the post_processing block's results if one is supplied" do
         
     | 
| 
      
 233 
     | 
    
         
            +
                  other_result = [:a, 2, :three]
         
     | 
| 
      
 234 
     | 
    
         
            +
                  block = Proc.new {|r| other_result}
         
     | 
| 
      
 235 
     | 
    
         
            +
                  allow(@service).to receive(:api).and_return(dummy_response)
         
     | 
| 
      
 236 
     | 
    
         
            +
                  expect(@service.graph_call("/me", {}, "get", {}, &block)).to eq(other_result)
         
     | 
| 
      
 237 
     | 
    
         
            +
                end
         
     | 
| 
      
 238 
     | 
    
         
            +
             
     | 
| 
      
 239 
     | 
    
         
            +
                it "gets the status of a Koala::HTTPService::Response if requested" do
         
     | 
| 
      
 240 
     | 
    
         
            +
                  response = Koala::HTTPService::Response.new(200, '', {})
         
     | 
| 
      
 241 
     | 
    
         
            +
                  allow(Koala).to receive(:make_request).and_return(response)
         
     | 
| 
      
 242 
     | 
    
         
            +
             
     | 
| 
      
 243 
     | 
    
         
            +
                  expect(@service.graph_call('anything', {}, 'get', http_component: :status)).to eq(200)
         
     | 
| 
      
 244 
     | 
    
         
            +
                end
         
     | 
| 
      
 245 
     | 
    
         
            +
             
     | 
| 
      
 246 
     | 
    
         
            +
                it "gets the headers of a Koala::HTTPService::Response if requested" do
         
     | 
| 
      
 247 
     | 
    
         
            +
                  headers = {"a" => 2}
         
     | 
| 
      
 248 
     | 
    
         
            +
                  response = Koala::HTTPService::Response.new(200, '', headers)
         
     | 
| 
      
 249 
     | 
    
         
            +
                  allow(Koala).to receive(:make_request).and_return(response)
         
     | 
| 
      
 250 
     | 
    
         
            +
             
     | 
| 
      
 251 
     | 
    
         
            +
                  expect(@service.graph_call('anything', {}, 'get', :http_component => :headers)).to eq(headers)
         
     | 
| 
      
 252 
     | 
    
         
            +
                end
         
     | 
| 
      
 253 
     | 
    
         
            +
             
     | 
| 
      
 254 
     | 
    
         
            +
                it "returns the entire response if http_component => :response" do
         
     | 
| 
      
 255 
     | 
    
         
            +
                  http_component = :response
         
     | 
| 
      
 256 
     | 
    
         
            +
                  response = Koala::HTTPService::Response.new(200, '', {})
         
     | 
| 
      
 257 
     | 
    
         
            +
                  allow(Koala).to receive(:make_request).and_return(response)
         
     | 
| 
      
 258 
     | 
    
         
            +
                  expect(@service.graph_call('anything', {}, 'get', :http_component => http_component)).to eq(response)
         
     | 
| 
      
 259 
     | 
    
         
            +
                end
         
     | 
| 
      
 260 
     | 
    
         
            +
             
     | 
| 
      
 261 
     | 
    
         
            +
                it "returns the body of the request as JSON if no http_component is given" do
         
     | 
| 
      
 262 
     | 
    
         
            +
                  result = {"a" => 2}
         
     | 
| 
      
 263 
     | 
    
         
            +
                  response = Koala::HTTPService::Response.new(200, result.to_json, {})
         
     | 
| 
      
 264 
     | 
    
         
            +
                  allow(Koala).to receive(:make_request).and_return(response)
         
     | 
| 
      
 265 
     | 
    
         
            +
             
     | 
| 
      
 266 
     | 
    
         
            +
                  expect(@service.graph_call('anything')).to eq(result)
         
     | 
| 
      
 267 
     | 
    
         
            +
                end
         
     | 
| 
      
 268 
     | 
    
         
            +
             
     | 
| 
      
 269 
     | 
    
         
            +
                it "handles rogue true/false as responses" do
         
     | 
| 
      
 270 
     | 
    
         
            +
                  expect(Koala).to receive(:make_request).and_return(Koala::HTTPService::Response.new(200, 'true', {}))
         
     | 
| 
      
 271 
     | 
    
         
            +
                  expect(@service.graph_call('anything')).to be_truthy
         
     | 
| 
      
 272 
     | 
    
         
            +
             
     | 
| 
      
 273 
     | 
    
         
            +
                  expect(Koala).to receive(:make_request).and_return(Koala::HTTPService::Response.new(200, 'false', {}))
         
     | 
| 
      
 274 
     | 
    
         
            +
                  expect(@service.graph_call('anything')).to be_falsey
         
     | 
| 
      
 275 
     | 
    
         
            +
                end
         
     | 
| 
      
 276 
     | 
    
         
            +
              end
         
     | 
| 
       249 
277 
     | 
    
         
             
            end
         
     | 
| 
         @@ -473,12 +473,12 @@ describe "Koala::Facebook::GraphAPI in batch mode" do 
     | 
|
| 
       473 
473 
     | 
    
         | 
| 
       474 
474 
     | 
    
         
             
              describe "usage tests" do
         
     | 
| 
       475 
475 
     | 
    
         
             
                it "gets two results at once" do
         
     | 
| 
       476 
     | 
    
         
            -
                  me,  
     | 
| 
      
 476 
     | 
    
         
            +
                  me, barackobama = @api.batch do |batch_api|
         
     | 
| 
       477 
477 
     | 
    
         
             
                    batch_api.get_object('me')
         
     | 
| 
       478 
478 
     | 
    
         
             
                    batch_api.get_object(KoalaTest.user1)
         
     | 
| 
       479 
479 
     | 
    
         
             
                  end
         
     | 
| 
       480 
480 
     | 
    
         
             
                  expect(me['id']).not_to be_nil
         
     | 
| 
       481 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 481 
     | 
    
         
            +
                  expect(barackobama['id']).not_to be_nil
         
     | 
| 
       482 
482 
     | 
    
         
             
                end
         
     | 
| 
       483 
483 
     | 
    
         | 
| 
       484 
484 
     | 
    
         
             
                it 'makes mixed calls inside of a batch' do
         
     | 
| 
         @@ -502,7 +502,7 @@ describe "Koala::Facebook::GraphAPI in batch mode" do 
     | 
|
| 
       502 
502 
     | 
    
         
             
                  pictures = @api.batch do |batch_api|
         
     | 
| 
       503 
503 
     | 
    
         
             
                    batch_api.get_picture('me')
         
     | 
| 
       504 
504 
     | 
    
         
             
                  end
         
     | 
| 
       505 
     | 
    
         
            -
                  expect(pictures.first).to match(/ 
     | 
| 
      
 505 
     | 
    
         
            +
                  expect(pictures.first).to match(/https\:\/\//) # works both live & stubbed
         
     | 
| 
       506 
506 
     | 
    
         
             
                end
         
     | 
| 
       507 
507 
     | 
    
         | 
| 
       508 
508 
     | 
    
         
             
                it 'takes an after processing block for a get_picture call inside of a batch' do
         
     | 
| 
         @@ -510,40 +510,40 @@ describe "Koala::Facebook::GraphAPI in batch mode" do 
     | 
|
| 
       510 
510 
     | 
    
         
             
                  @api.batch do |batch_api|
         
     | 
| 
       511 
511 
     | 
    
         
             
                    batch_api.get_picture('me') { |pic| picture = pic }
         
     | 
| 
       512 
512 
     | 
    
         
             
                  end
         
     | 
| 
       513 
     | 
    
         
            -
                  expect(picture).to match(/ 
     | 
| 
      
 513 
     | 
    
         
            +
                  expect(picture).to match(/https\:\/\//) # works both live & stubbed
         
     | 
| 
       514 
514 
     | 
    
         
             
                end
         
     | 
| 
       515 
515 
     | 
    
         | 
| 
       516 
516 
     | 
    
         
             
                it "handles requests for two different tokens" do
         
     | 
| 
       517 
     | 
    
         
            -
                  me,  
     | 
| 
      
 517 
     | 
    
         
            +
                  me, app_event_types = @api.batch do |batch_api|
         
     | 
| 
       518 
518 
     | 
    
         
             
                    batch_api.get_object('me')
         
     | 
| 
       519 
     | 
    
         
            -
                    batch_api.get_connections(@app_id, ' 
     | 
| 
      
 519 
     | 
    
         
            +
                    batch_api.get_connections(@app_id, 'app_event_types', {}, {"access_token" => @app_api.access_token})
         
     | 
| 
       520 
520 
     | 
    
         
             
                  end
         
     | 
| 
       521 
521 
     | 
    
         
             
                  expect(me['id']).not_to be_nil
         
     | 
| 
       522 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 522 
     | 
    
         
            +
                  expect(app_event_types).to be_an(Koala::Facebook::API::GraphCollection)
         
     | 
| 
       523 
523 
     | 
    
         
             
                end
         
     | 
| 
       524 
524 
     | 
    
         | 
| 
       525 
525 
     | 
    
         
             
                it "handles requests passing the access token option as a symbol instead of a string" do
         
     | 
| 
       526 
     | 
    
         
            -
                  me,  
     | 
| 
      
 526 
     | 
    
         
            +
                  me, app_event_types = @api.batch do |batch_api|
         
     | 
| 
       527 
527 
     | 
    
         
             
                    batch_api.get_object('me')
         
     | 
| 
       528 
     | 
    
         
            -
                    batch_api.get_connections(@app_id, ' 
     | 
| 
      
 528 
     | 
    
         
            +
                    batch_api.get_connections(@app_id, 'app_event_types', {}, {:access_token => @app_api.access_token})
         
     | 
| 
       529 
529 
     | 
    
         
             
                  end
         
     | 
| 
       530 
530 
     | 
    
         
             
                  expect(me['id']).not_to be_nil
         
     | 
| 
       531 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 531 
     | 
    
         
            +
                  expect(app_event_types).to be_an(Koala::Facebook::API::GraphCollection)
         
     | 
| 
       532 
532 
     | 
    
         
             
                end
         
     | 
| 
       533 
533 
     | 
    
         | 
| 
       534 
534 
     | 
    
         
             
                it "preserves batch-op specific access tokens in GraphCollection returned from batch" do
         
     | 
| 
       535 
535 
     | 
    
         
             
                  # Provide an alternate token for a batch operation
         
     | 
| 
       536 
536 
     | 
    
         
             
                  @other_access_token_args = { 'access_token' => @app_api.access_token }
         
     | 
| 
       537 
537 
     | 
    
         | 
| 
       538 
     | 
    
         
            -
                  # make a batch call for  
     | 
| 
       539 
     | 
    
         
            -
                  me,  
     | 
| 
      
 538 
     | 
    
         
            +
                  # make a batch call for app_event_types using another token
         
     | 
| 
      
 539 
     | 
    
         
            +
                  me, app_event_types = @api.batch do |batch_api|
         
     | 
| 
       540 
540 
     | 
    
         
             
                    batch_api.get_object('me')
         
     | 
| 
       541 
     | 
    
         
            -
                    batch_api.get_connections(@app_id, ' 
     | 
| 
      
 541 
     | 
    
         
            +
                    batch_api.get_connections(@app_id, 'app_event_types', {}, @other_access_token_args)
         
     | 
| 
       542 
542 
     | 
    
         
             
                  end
         
     | 
| 
       543 
543 
     | 
    
         | 
| 
       544 
544 
     | 
    
         
             
                  # The alternate token is returned with the next page parameters
         
     | 
| 
       545 
545 
     | 
    
         
             
                  # The GraphCollection should receive a request for the next_page_params during paging
         
     | 
| 
       546 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 546 
     | 
    
         
            +
                  expect(app_event_types).to receive(:next_page_params).and_return([double("base"), @other_access_token_args.dup])
         
     | 
| 
       547 
547 
     | 
    
         | 
| 
       548 
548 
     | 
    
         
             
                  # The alternate access token should pass through to making the request
         
     | 
| 
       549 
549 
     | 
    
         
             
                  # Koala should receive a request during paging using the alternate token
         
     | 
| 
         @@ -555,23 +555,23 @@ describe "Koala::Facebook::GraphAPI in batch mode" do 
     | 
|
| 
       555 
555 
     | 
    
         
             
                  ).and_return(Koala::HTTPService::Response.new(200, "", ""))
         
     | 
| 
       556 
556 
     | 
    
         | 
| 
       557 
557 
     | 
    
         
             
                  # Page the collection
         
     | 
| 
       558 
     | 
    
         
            -
                   
     | 
| 
      
 558 
     | 
    
         
            +
                  app_event_types.next_page
         
     | 
| 
       559 
559 
     | 
    
         
             
                end
         
     | 
| 
       560 
560 
     | 
    
         | 
| 
       561 
561 
     | 
    
         
             
                it "inserts errors in the appropriate place, without breaking other results" do
         
     | 
| 
       562 
     | 
    
         
            -
                  failed_call,  
     | 
| 
      
 562 
     | 
    
         
            +
                  failed_call, barackobama = @api.batch do |batch_api|
         
     | 
| 
       563 
563 
     | 
    
         
             
                    batch_api.get_connection("2", "invalidconnection")
         
     | 
| 
       564 
564 
     | 
    
         
             
                    batch_api.get_object(KoalaTest.user1, {}, {"access_token" => @app_api.access_token})
         
     | 
| 
       565 
565 
     | 
    
         
             
                  end
         
     | 
| 
       566 
566 
     | 
    
         
             
                  expect(failed_call).to be_a(Koala::Facebook::ClientError)
         
     | 
| 
       567 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 567 
     | 
    
         
            +
                  expect(barackobama["id"]).not_to be_nil
         
     | 
| 
       568 
568 
     | 
    
         
             
                end
         
     | 
| 
       569 
569 
     | 
    
         | 
| 
       570 
570 
     | 
    
         
             
                it "handles different request methods" do
         
     | 
| 
       571 
571 
     | 
    
         
             
                  result = @api.put_wall_post("Hello, world, from the test suite batch API!")
         
     | 
| 
       572 
572 
     | 
    
         
             
                  wall_post = result["id"]
         
     | 
| 
       573 
573 
     | 
    
         | 
| 
       574 
     | 
    
         
            -
                  wall_post,  
     | 
| 
      
 574 
     | 
    
         
            +
                  wall_post, barackobama = @api.batch do |batch_api|
         
     | 
| 
       575 
575 
     | 
    
         
             
                    batch_api.put_like(wall_post)
         
     | 
| 
       576 
576 
     | 
    
         
             
                    batch_api.delete_object(wall_post)
         
     | 
| 
       577 
577 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -658,23 +658,23 @@ describe "Koala::Facebook::GraphAPI in batch mode" do 
     | 
|
| 
       658 
658 
     | 
    
         
             
                  end
         
     | 
| 
       659 
659 
     | 
    
         | 
| 
       660 
660 
     | 
    
         
             
                  it "allows you to create dependencies" do
         
     | 
| 
       661 
     | 
    
         
            -
                    me,  
     | 
| 
      
 661 
     | 
    
         
            +
                    me, barackobama = @api.batch do |batch_api|
         
     | 
| 
       662 
662 
     | 
    
         
             
                      batch_api.get_object("me", {}, :batch_args => {:name => "getme"})
         
     | 
| 
       663 
663 
     | 
    
         
             
                      batch_api.get_object(KoalaTest.user1, {}, :batch_args => {:depends_on => "getme"})
         
     | 
| 
       664 
664 
     | 
    
         
             
                    end
         
     | 
| 
       665 
665 
     | 
    
         | 
| 
       666 
666 
     | 
    
         
             
                    expect(me).to be_nil # gotcha!  it's omitted because it's a successfully-executed dependency
         
     | 
| 
       667 
     | 
    
         
            -
                    expect( 
     | 
| 
      
 667 
     | 
    
         
            +
                    expect(barackobama["id"]).not_to be_nil
         
     | 
| 
       668 
668 
     | 
    
         
             
                  end
         
     | 
| 
       669 
669 
     | 
    
         | 
| 
       670 
670 
     | 
    
         
             
                  it "properly handles dependencies that fail" do
         
     | 
| 
       671 
     | 
    
         
            -
                    failed_call,  
     | 
| 
      
 671 
     | 
    
         
            +
                    failed_call, barackobama = @api.batch do |batch_api|
         
     | 
| 
       672 
672 
     | 
    
         
             
                      batch_api.get_connections("2", "invalidconnection", {}, :batch_args => {:name => "getdata"})
         
     | 
| 
       673 
673 
     | 
    
         
             
                      batch_api.get_object(KoalaTest.user1, {}, :batch_args => {:depends_on => "getdata"})
         
     | 
| 
       674 
674 
     | 
    
         
             
                    end
         
     | 
| 
       675 
675 
     | 
    
         | 
| 
       676 
676 
     | 
    
         
             
                    expect(failed_call).to be_a(Koala::Facebook::ClientError)
         
     | 
| 
       677 
     | 
    
         
            -
                    expect( 
     | 
| 
      
 677 
     | 
    
         
            +
                    expect(barackobama).to be_nil
         
     | 
| 
       678 
678 
     | 
    
         
             
                  end
         
     | 
| 
       679 
679 
     | 
    
         | 
| 
       680 
680 
     | 
    
         
             
                  it "throws an error for badly-constructed request relationships" do
         
     | 
| 
         @@ -9,6 +9,8 @@ describe 'Koala::Facebook::GraphAPIMethods' do 
     | 
|
| 
       9 
9 
     | 
    
         
             
                @app_api = Koala::Facebook::API.new(@app_access_token)
         
     | 
| 
       10 
10 
     | 
    
         
             
              end
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
      
 12 
     | 
    
         
            +
              let(:dummy_response) { double("fake response", data: {}, status: 200, body: "", headers: {}) }
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
       12 
14 
     | 
    
         
             
              describe 'post-processing for' do
         
     | 
| 
       13 
15 
     | 
    
         
             
                let(:result) { double("result") }
         
     | 
| 
       14 
16 
     | 
    
         
             
                let(:post_processing) { lambda {|arg| {"result" => result, "args" => arg} } }
         
     | 
| 
         @@ -17,28 +19,31 @@ describe 'Koala::Facebook::GraphAPIMethods' do 
     | 
|
| 
       17 
19 
     | 
    
         
             
                # and the other methods which do some post-processing locally
         
     | 
| 
       18 
20 
     | 
    
         
             
                context '#get_object' do
         
     | 
| 
       19 
21 
     | 
    
         
             
                  it 'returns result of block' do
         
     | 
| 
       20 
     | 
    
         
            -
                    allow(@api).to receive(:api).and_return( 
     | 
| 
       21 
     | 
    
         
            -
                    expect(@api.get_object(' 
     | 
| 
      
 22 
     | 
    
         
            +
                    allow(@api).to receive(:api).and_return(dummy_response)
         
     | 
| 
      
 23 
     | 
    
         
            +
                    expect(@api.get_object('barackobama', &post_processing)["result"]).to eq(result)
         
     | 
| 
       22 
24 
     | 
    
         
             
                  end
         
     | 
| 
       23 
25 
     | 
    
         | 
| 
       24 
26 
     | 
    
         
             
                  it "doesn't add token to received arguments" do
         
     | 
| 
       25 
27 
     | 
    
         
             
                    args = {}.freeze
         
     | 
| 
       26 
     | 
    
         
            -
                    expect(Koala).to receive(:make_request).and_return( 
     | 
| 
       27 
     | 
    
         
            -
                    expect(@api.get_object(' 
     | 
| 
      
 28 
     | 
    
         
            +
                    expect(Koala).to receive(:make_request).and_return(dummy_response)
         
     | 
| 
      
 29 
     | 
    
         
            +
                    expect(@api.get_object('barackobama', args, &post_processing)["result"]).to eq(result)
         
     | 
| 
       28 
30 
     | 
    
         
             
                  end
         
     | 
| 
       29 
31 
     | 
    
         
             
                end
         
     | 
| 
       30 
32 
     | 
    
         | 
| 
       31 
33 
     | 
    
         
             
                context '#get_picture' do
         
     | 
| 
       32 
34 
     | 
    
         
             
                  it 'returns result of block' do
         
     | 
| 
       33 
     | 
    
         
            -
                     
     | 
| 
       34 
     | 
    
         
            -
                     
     | 
| 
      
 35 
     | 
    
         
            +
                    result_url = "a url"
         
     | 
| 
      
 36 
     | 
    
         
            +
                    allow(@api).to receive(:api).and_return(Koala::HTTPService::Response.new(200, {"data" => {"is_silhouette" => false, "url" => result_url}}.to_json, {}))
         
     | 
| 
      
 37 
     | 
    
         
            +
                    expect(@api.get_picture('koppel', &post_processing)["result"]).to eq(result)
         
     | 
| 
       35 
38 
     | 
    
         
             
                  end
         
     | 
| 
       36 
39 
     | 
    
         
             
                end
         
     | 
| 
       37 
40 
     | 
    
         | 
| 
       38 
41 
     | 
    
         
             
                context '#get_page_access_token' do
         
     | 
| 
       39 
42 
     | 
    
         
             
                  it 'returns result of block' do
         
     | 
| 
       40 
43 
     | 
    
         
             
                    token = Koala::MockHTTPService::APP_ACCESS_TOKEN
         
     | 
| 
       41 
     | 
    
         
            -
                    allow(@api).to receive(:api).and_return( 
     | 
| 
      
 44 
     | 
    
         
            +
                    allow(@api).to receive(:api).and_return(
         
     | 
| 
      
 45 
     | 
    
         
            +
                      Koala::HTTPService::Response.new(200, {"access_token" => token}.to_json, {})
         
     | 
| 
      
 46 
     | 
    
         
            +
                    )
         
     | 
| 
       42 
47 
     | 
    
         
             
                    response = @api.get_page_access_token('facebook', &post_processing)
         
     | 
| 
       43 
48 
     | 
    
         
             
                    expect(response["args"]).to eq(token)
         
     | 
| 
       44 
49 
     | 
    
         
             
                    expect(response["result"]).to eq(result)
         
     | 
| 
         @@ -52,18 +57,18 @@ describe 'Koala::Facebook::GraphAPIMethods' do 
     | 
|
| 
       52 
57 
     | 
    
         | 
| 
       53 
58 
     | 
    
         
             
                  it "is enabled by default if an app secret is present" do
         
     | 
| 
       54 
59 
     | 
    
         
             
                    api = Koala::Facebook::API.new(@token, "mysecret")
         
     | 
| 
       55 
     | 
    
         
            -
                    expect(api).to receive(:api).with(path, {}, 'get', :appsecret_proof => true)
         
     | 
| 
      
 60 
     | 
    
         
            +
                    expect(api).to receive(:api).with(path, {}, 'get', :appsecret_proof => true).and_return(dummy_response)
         
     | 
| 
       56 
61 
     | 
    
         
             
                    api.graph_call(path)
         
     | 
| 
       57 
62 
     | 
    
         
             
                  end
         
     | 
| 
       58 
63 
     | 
    
         | 
| 
       59 
64 
     | 
    
         
             
                  it "can be disabled manually" do
         
     | 
| 
       60 
65 
     | 
    
         
             
                    api = Koala::Facebook::API.new(@token, "mysecret")
         
     | 
| 
       61 
     | 
    
         
            -
                    expect(api).to receive(:api).with(path, {}, 'get', hash_not_including(appsecret_proof: true))
         
     | 
| 
      
 66 
     | 
    
         
            +
                    expect(api).to receive(:api).with(path, {}, 'get', hash_not_including(appsecret_proof: true)).and_return(dummy_response)
         
     | 
| 
       62 
67 
     | 
    
         
             
                    api.graph_call(path, {}, "get", appsecret_proof: false)
         
     | 
| 
       63 
68 
     | 
    
         
             
                  end
         
     | 
| 
       64 
69 
     | 
    
         | 
| 
       65 
70 
     | 
    
         
             
                  it "isn't included if no app secret is present" do
         
     | 
| 
       66 
     | 
    
         
            -
                    expect(@api).to receive(:api).with(path, {}, 'get', {})
         
     | 
| 
      
 71 
     | 
    
         
            +
                    expect(@api).to receive(:api).with(path, {}, 'get', {}).and_return(dummy_response)
         
     | 
| 
       67 
72 
     | 
    
         
             
                    @api.graph_call(path)
         
     | 
| 
       68 
73 
     | 
    
         
             
                  end
         
     | 
| 
       69 
74 
     | 
    
         
             
                end
         
     | 
| 
         @@ -49,7 +49,7 @@ describe Koala::Facebook::API::GraphCollection do 
     | 
|
| 
       49 
49 
     | 
    
         
             
              describe "when getting a whole page" do
         
     | 
| 
       50 
50 
     | 
    
         
             
                before(:each) do
         
     | 
| 
       51 
51 
     | 
    
         
             
                  @second_page = {
         
     | 
| 
       52 
     | 
    
         
            -
                    "data" => [ 
     | 
| 
      
 52 
     | 
    
         
            +
                    "data" => ["second", "page", "data"],
         
     | 
| 
       53 
53 
     | 
    
         
             
                    "paging" => {}
         
     | 
| 
       54 
54 
     | 
    
         
             
                  }
         
     | 
| 
       55 
55 
     | 
    
         
             
                  @base = double("base")
         
     | 
| 
         @@ -59,14 +59,14 @@ describe Koala::Facebook::API::GraphCollection do 
     | 
|
| 
       59 
59 
     | 
    
         | 
| 
       60 
60 
     | 
    
         
             
                it "should return the previous page of results" do
         
     | 
| 
       61 
61 
     | 
    
         
             
                  expect(@collection).to receive(:previous_page_params).and_return([@base, @args])
         
     | 
| 
       62 
     | 
    
         
            -
                  expect(@api).to receive(:api).with(@base, @args, anything, anything).and_return(@second_page)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  expect(@api).to receive(:api).with(@base, @args, anything, anything).and_return(Koala::HTTPService::Response.new(200, @second_page.to_json, {}))
         
     | 
| 
       63 
63 
     | 
    
         
             
                  expect(Koala::Facebook::API::GraphCollection).to receive(:new).with(@second_page, @api).and_return(@page_of_results)
         
     | 
| 
       64 
64 
     | 
    
         
             
                  expect(@collection.previous_page).to eq(@page_of_results)
         
     | 
| 
       65 
65 
     | 
    
         
             
                end
         
     | 
| 
       66 
66 
     | 
    
         | 
| 
       67 
67 
     | 
    
         
             
                it "should return the next page of results" do
         
     | 
| 
       68 
68 
     | 
    
         
             
                  expect(@collection).to receive(:next_page_params).and_return([@base, @args])
         
     | 
| 
       69 
     | 
    
         
            -
                  expect(@api).to receive(:api).with(@base, @args, anything, anything).and_return(@second_page)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  expect(@api).to receive(:api).with(@base, @args, anything, anything).and_return(Koala::HTTPService::Response.new(200, @second_page.to_json, {}))
         
     | 
| 
       70 
70 
     | 
    
         
             
                  expect(Koala::Facebook::API::GraphCollection).to receive(:new).with(@second_page, @api).and_return(@page_of_results)
         
     | 
| 
       71 
71 
     | 
    
         | 
| 
       72 
72 
     | 
    
         
             
                  expect(@collection.next_page).to eq(@page_of_results)
         
     |