arvados-google-api-client 0.8.7.2
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 +7 -0
 - data/CHANGELOG.md +178 -0
 - data/Gemfile +9 -0
 - data/LICENSE +202 -0
 - data/README.md +218 -0
 - data/Rakefile +41 -0
 - data/google-api-client.gemspec +43 -0
 - data/lib/cacerts.pem +2183 -0
 - data/lib/compat/multi_json.rb +19 -0
 - data/lib/google/api_client.rb +750 -0
 - data/lib/google/api_client/auth/compute_service_account.rb +28 -0
 - data/lib/google/api_client/auth/file_storage.rb +59 -0
 - data/lib/google/api_client/auth/installed_app.rb +126 -0
 - data/lib/google/api_client/auth/jwt_asserter.rb +126 -0
 - data/lib/google/api_client/auth/key_utils.rb +93 -0
 - data/lib/google/api_client/auth/pkcs12.rb +41 -0
 - data/lib/google/api_client/auth/storage.rb +102 -0
 - data/lib/google/api_client/auth/storages/file_store.rb +58 -0
 - data/lib/google/api_client/auth/storages/redis_store.rb +54 -0
 - data/lib/google/api_client/batch.rb +326 -0
 - data/lib/google/api_client/charset.rb +33 -0
 - data/lib/google/api_client/client_secrets.rb +179 -0
 - data/lib/google/api_client/discovery.rb +19 -0
 - data/lib/google/api_client/discovery/api.rb +310 -0
 - data/lib/google/api_client/discovery/media.rb +77 -0
 - data/lib/google/api_client/discovery/method.rb +363 -0
 - data/lib/google/api_client/discovery/resource.rb +156 -0
 - data/lib/google/api_client/discovery/schema.rb +117 -0
 - data/lib/google/api_client/environment.rb +42 -0
 - data/lib/google/api_client/errors.rb +65 -0
 - data/lib/google/api_client/gzip.rb +28 -0
 - data/lib/google/api_client/logging.rb +32 -0
 - data/lib/google/api_client/media.rb +259 -0
 - data/lib/google/api_client/railtie.rb +18 -0
 - data/lib/google/api_client/reference.rb +27 -0
 - data/lib/google/api_client/request.rb +350 -0
 - data/lib/google/api_client/result.rb +255 -0
 - data/lib/google/api_client/service.rb +233 -0
 - data/lib/google/api_client/service/batch.rb +110 -0
 - data/lib/google/api_client/service/request.rb +144 -0
 - data/lib/google/api_client/service/resource.rb +40 -0
 - data/lib/google/api_client/service/result.rb +162 -0
 - data/lib/google/api_client/service/simple_file_store.rb +151 -0
 - data/lib/google/api_client/service/stub_generator.rb +61 -0
 - data/lib/google/api_client/service_account.rb +21 -0
 - data/lib/google/api_client/version.rb +26 -0
 - data/spec/google/api_client/auth/storage_spec.rb +122 -0
 - data/spec/google/api_client/auth/storages/file_store_spec.rb +40 -0
 - data/spec/google/api_client/auth/storages/redis_store_spec.rb +70 -0
 - data/spec/google/api_client/batch_spec.rb +248 -0
 - data/spec/google/api_client/client_secrets_spec.rb +53 -0
 - data/spec/google/api_client/discovery_spec.rb +708 -0
 - data/spec/google/api_client/gzip_spec.rb +98 -0
 - data/spec/google/api_client/media_spec.rb +178 -0
 - data/spec/google/api_client/request_spec.rb +29 -0
 - data/spec/google/api_client/result_spec.rb +207 -0
 - data/spec/google/api_client/service_account_spec.rb +169 -0
 - data/spec/google/api_client/service_spec.rb +618 -0
 - data/spec/google/api_client/simple_file_store_spec.rb +133 -0
 - data/spec/google/api_client_spec.rb +352 -0
 - data/spec/spec_helper.rb +66 -0
 - metadata +339 -0
 
| 
         @@ -0,0 +1,122 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'google/api_client'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'google/api_client/version'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            describe Google::APIClient::Storage do
         
     | 
| 
      
 7 
     | 
    
         
            +
              let(:client) { Google::APIClient.new(:application_name => 'API Client Tests') }
         
     | 
| 
      
 8 
     | 
    
         
            +
              let(:root_path) { File.expand_path(File.join(__FILE__, '..', '..', '..')) }
         
     | 
| 
      
 9 
     | 
    
         
            +
              let(:json_file) { File.expand_path(File.join(root_path, 'fixtures', 'files', 'auth_stored_credentials.json')) }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              let(:store) { double }
         
     | 
| 
      
 12 
     | 
    
         
            +
              let(:client_stub) { double }
         
     | 
| 
      
 13 
     | 
    
         
            +
              subject { Google::APIClient::Storage.new(store) }
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              describe 'authorize' do
         
     | 
| 
      
 16 
     | 
    
         
            +
                it 'should authorize' do
         
     | 
| 
      
 17 
     | 
    
         
            +
                  expect(subject).to respond_to(:authorization)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  expect(subject.store).to be == store
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              describe 'authorize' do
         
     | 
| 
      
 23 
     | 
    
         
            +
                describe 'with credentials' do
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  it 'should initialize a new OAuth Client' do
         
     | 
| 
      
 26 
     | 
    
         
            +
                    expect(subject).to receive(:load_credentials).and_return({:first => 'a dummy'})
         
     | 
| 
      
 27 
     | 
    
         
            +
                    expect(client_stub).to receive(:issued_at=)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    expect(client_stub).to receive(:expired?).and_return(false)
         
     | 
| 
      
 29 
     | 
    
         
            +
                    expect(Signet::OAuth2::Client).to receive(:new).and_return(client_stub)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    expect(subject).not_to receive(:refresh_authorization)
         
     | 
| 
      
 31 
     | 
    
         
            +
                    subject.authorize
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  it 'should refresh authorization' do
         
     | 
| 
      
 35 
     | 
    
         
            +
                    expect(subject).to receive(:load_credentials).and_return({:first => 'a dummy'})
         
     | 
| 
      
 36 
     | 
    
         
            +
                    expect(client_stub).to receive(:issued_at=)
         
     | 
| 
      
 37 
     | 
    
         
            +
                    expect(client_stub).to receive(:expired?).and_return(true)
         
     | 
| 
      
 38 
     | 
    
         
            +
                    expect(Signet::OAuth2::Client).to receive(:new).and_return(client_stub)
         
     | 
| 
      
 39 
     | 
    
         
            +
                    expect(subject).to receive(:refresh_authorization)
         
     | 
| 
      
 40 
     | 
    
         
            +
                    auth = subject.authorize
         
     | 
| 
      
 41 
     | 
    
         
            +
                    expect(auth).to be == subject.authorization
         
     | 
| 
      
 42 
     | 
    
         
            +
                    expect(auth).not_to be_nil
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                describe 'without credentials' do
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  it 'should return nil' do
         
     | 
| 
      
 49 
     | 
    
         
            +
                    expect(subject.authorization).to be_nil
         
     | 
| 
      
 50 
     | 
    
         
            +
                    expect(subject).to receive(:load_credentials).and_return({})
         
     | 
| 
      
 51 
     | 
    
         
            +
                    expect(subject.authorize).to be_nil
         
     | 
| 
      
 52 
     | 
    
         
            +
                    expect(subject.authorization).to be_nil
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
              describe 'write_credentials' do
         
     | 
| 
      
 58 
     | 
    
         
            +
                it 'should call store to write credentials' do
         
     | 
| 
      
 59 
     | 
    
         
            +
                  authorization_stub = double
         
     | 
| 
      
 60 
     | 
    
         
            +
                  expect(authorization_stub).to receive(:refresh_token).and_return(true)
         
     | 
| 
      
 61 
     | 
    
         
            +
                  expect(subject).to receive(:credentials_hash)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  expect(subject.store).to receive(:write_credentials)
         
     | 
| 
      
 63 
     | 
    
         
            +
                  subject.write_credentials(authorization_stub)
         
     | 
| 
      
 64 
     | 
    
         
            +
                  expect(subject.authorization).to be == authorization_stub
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                it 'should not call store to write credentials' do
         
     | 
| 
      
 68 
     | 
    
         
            +
                  expect(subject).not_to receive(:credentials_hash)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  expect(subject.store).not_to receive(:write_credentials)
         
     | 
| 
      
 70 
     | 
    
         
            +
                  expect {
         
     | 
| 
      
 71 
     | 
    
         
            +
                    subject.write_credentials()
         
     | 
| 
      
 72 
     | 
    
         
            +
                  }.not_to raise_error
         
     | 
| 
      
 73 
     | 
    
         
            +
                end
         
     | 
| 
      
 74 
     | 
    
         
            +
                it 'should not call store to write credentials' do
         
     | 
| 
      
 75 
     | 
    
         
            +
                  expect(subject).not_to receive(:credentials_hash)
         
     | 
| 
      
 76 
     | 
    
         
            +
                  expect(subject.store).not_to receive(:write_credentials)
         
     | 
| 
      
 77 
     | 
    
         
            +
                  expect {
         
     | 
| 
      
 78 
     | 
    
         
            +
                    subject.write_credentials('something')
         
     | 
| 
      
 79 
     | 
    
         
            +
                  }.not_to raise_error
         
     | 
| 
      
 80 
     | 
    
         
            +
                end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
              end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
              describe 'refresh_authorization' do
         
     | 
| 
      
 85 
     | 
    
         
            +
                it 'should call refresh and write credentials' do
         
     | 
| 
      
 86 
     | 
    
         
            +
                  expect(subject).to receive(:write_credentials)
         
     | 
| 
      
 87 
     | 
    
         
            +
                  authorization_stub = double
         
     | 
| 
      
 88 
     | 
    
         
            +
                  expect(subject).to receive(:authorization).and_return(authorization_stub)
         
     | 
| 
      
 89 
     | 
    
         
            +
                  expect(authorization_stub).to receive(:refresh!).and_return(true)
         
     | 
| 
      
 90 
     | 
    
         
            +
                  subject.refresh_authorization
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
              end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
              describe 'load_credentials' do
         
     | 
| 
      
 95 
     | 
    
         
            +
                it 'should call store to load credentials' do
         
     | 
| 
      
 96 
     | 
    
         
            +
                  expect(subject.store).to receive(:load_credentials)
         
     | 
| 
      
 97 
     | 
    
         
            +
                  subject.send(:load_credentials)
         
     | 
| 
      
 98 
     | 
    
         
            +
                end
         
     | 
| 
      
 99 
     | 
    
         
            +
              end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
              describe 'credentials_hash' do
         
     | 
| 
      
 102 
     | 
    
         
            +
                it 'should return an hash' do
         
     | 
| 
      
 103 
     | 
    
         
            +
                  authorization_stub = double
         
     | 
| 
      
 104 
     | 
    
         
            +
                  expect(authorization_stub).to receive(:access_token)
         
     | 
| 
      
 105 
     | 
    
         
            +
                  expect(authorization_stub).to receive(:client_id)
         
     | 
| 
      
 106 
     | 
    
         
            +
                  expect(authorization_stub).to receive(:client_secret)
         
     | 
| 
      
 107 
     | 
    
         
            +
                  expect(authorization_stub).to receive(:expires_in)
         
     | 
| 
      
 108 
     | 
    
         
            +
                  expect(authorization_stub).to receive(:refresh_token)
         
     | 
| 
      
 109 
     | 
    
         
            +
                  expect(authorization_stub).to receive(:issued_at).and_return('100')
         
     | 
| 
      
 110 
     | 
    
         
            +
                  allow(subject).to receive(:authorization).and_return(authorization_stub)
         
     | 
| 
      
 111 
     | 
    
         
            +
                  credentials = subject.send(:credentials_hash)
         
     | 
| 
      
 112 
     | 
    
         
            +
                  expect(credentials).to include(:access_token)
         
     | 
| 
      
 113 
     | 
    
         
            +
                  expect(credentials).to include(:authorization_uri)
         
     | 
| 
      
 114 
     | 
    
         
            +
                  expect(credentials).to include(:client_id)
         
     | 
| 
      
 115 
     | 
    
         
            +
                  expect(credentials).to include(:client_secret)
         
     | 
| 
      
 116 
     | 
    
         
            +
                  expect(credentials).to include(:expires_in)
         
     | 
| 
      
 117 
     | 
    
         
            +
                  expect(credentials).to include(:refresh_token)
         
     | 
| 
      
 118 
     | 
    
         
            +
                  expect(credentials).to include(:token_credential_uri)
         
     | 
| 
      
 119 
     | 
    
         
            +
                  expect(credentials).to include(:issued_at)
         
     | 
| 
      
 120 
     | 
    
         
            +
                end
         
     | 
| 
      
 121 
     | 
    
         
            +
              end
         
     | 
| 
      
 122 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'google/api_client'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'google/api_client/version'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            describe Google::APIClient::FileStore do
         
     | 
| 
      
 7 
     | 
    
         
            +
              let(:root_path) { File.expand_path(File.join(__FILE__, '..','..','..', '..','..')) }
         
     | 
| 
      
 8 
     | 
    
         
            +
              let(:json_file) { File.expand_path(File.join(root_path, 'fixtures', 'files', 'auth_stored_credentials.json')) }
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              let(:credentials_hash) {{
         
     | 
| 
      
 11 
     | 
    
         
            +
                  "access_token"=>"my_access_token",
         
     | 
| 
      
 12 
     | 
    
         
            +
                  "authorization_uri"=>"https://accounts.google.com/o/oauth2/auth",
         
     | 
| 
      
 13 
     | 
    
         
            +
                  "client_id"=>"123456_test_client_id@.apps.googleusercontent.com",
         
     | 
| 
      
 14 
     | 
    
         
            +
                  "client_secret"=>"123456_client_secret",
         
     | 
| 
      
 15 
     | 
    
         
            +
                  "expires_in"=>3600,
         
     | 
| 
      
 16 
     | 
    
         
            +
                  "refresh_token"=>"my_refresh_token",
         
     | 
| 
      
 17 
     | 
    
         
            +
                  "token_credential_uri"=>"https://accounts.google.com/o/oauth2/token",
         
     | 
| 
      
 18 
     | 
    
         
            +
                  "issued_at"=>1384440275
         
     | 
| 
      
 19 
     | 
    
         
            +
              }}
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              subject{Google::APIClient::FileStore.new('a file path')}
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              it 'should have a path' do
         
     | 
| 
      
 24 
     | 
    
         
            +
                expect(subject.path).to be == 'a file path'
         
     | 
| 
      
 25 
     | 
    
         
            +
                subject.path = 'an other file path'
         
     | 
| 
      
 26 
     | 
    
         
            +
                expect(subject.path).to be == 'an other file path'
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              it 'should load credentials' do
         
     | 
| 
      
 30 
     | 
    
         
            +
                subject.path = json_file
         
     | 
| 
      
 31 
     | 
    
         
            +
                credentials = subject.load_credentials
         
     | 
| 
      
 32 
     | 
    
         
            +
                expect(credentials).to include('access_token', 'authorization_uri', 'refresh_token')
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              it 'should write credentials' do
         
     | 
| 
      
 36 
     | 
    
         
            +
                io_stub = StringIO.new
         
     | 
| 
      
 37 
     | 
    
         
            +
                expect(subject).to receive(:open).and_return(io_stub)
         
     | 
| 
      
 38 
     | 
    
         
            +
                subject.write_credentials(credentials_hash)
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,70 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'google/api_client'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'google/api_client/version'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            describe Google::APIClient::RedisStore do
         
     | 
| 
      
 8 
     | 
    
         
            +
              let(:root_path) { File.expand_path(File.join(__FILE__, '..', '..', '..', '..', '..')) }
         
     | 
| 
      
 9 
     | 
    
         
            +
              let(:json_file) { File.expand_path(File.join(root_path, 'fixtures', 'files', 'auth_stored_credentials.json')) }
         
     | 
| 
      
 10 
     | 
    
         
            +
              let(:redis) {double}
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              let(:credentials_hash) { {
         
     | 
| 
      
 13 
     | 
    
         
            +
                  "access_token" => "my_access_token",
         
     | 
| 
      
 14 
     | 
    
         
            +
                  "authorization_uri" => "https://accounts.google.com/o/oauth2/auth",
         
     | 
| 
      
 15 
     | 
    
         
            +
                  "client_id" => "123456_test_client_id@.apps.googleusercontent.com",
         
     | 
| 
      
 16 
     | 
    
         
            +
                  "client_secret" => "123456_client_secret",
         
     | 
| 
      
 17 
     | 
    
         
            +
                  "expires_in" => 3600,
         
     | 
| 
      
 18 
     | 
    
         
            +
                  "refresh_token" => "my_refresh_token",
         
     | 
| 
      
 19 
     | 
    
         
            +
                  "token_credential_uri" => "https://accounts.google.com/o/oauth2/token",
         
     | 
| 
      
 20 
     | 
    
         
            +
                  "issued_at" => 1384440275
         
     | 
| 
      
 21 
     | 
    
         
            +
              } }
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              subject { Google::APIClient::RedisStore.new('a redis instance') }
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              it 'should have a redis instance' do
         
     | 
| 
      
 26 
     | 
    
         
            +
                expect(subject.redis).to be == 'a redis instance'
         
     | 
| 
      
 27 
     | 
    
         
            +
                subject.redis = 'an other redis instance'
         
     | 
| 
      
 28 
     | 
    
         
            +
                expect(subject.redis).to be == 'an other redis instance'
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              describe 'load_credentials' do
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                it 'should load credentials' do
         
     | 
| 
      
 34 
     | 
    
         
            +
                  subject.redis= redis
         
     | 
| 
      
 35 
     | 
    
         
            +
                  expect(redis).to receive(:get).and_return(credentials_hash.to_json)
         
     | 
| 
      
 36 
     | 
    
         
            +
                  expect(subject.load_credentials).to be == credentials_hash
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                it 'should return nil' do
         
     | 
| 
      
 40 
     | 
    
         
            +
                  subject.redis= redis
         
     | 
| 
      
 41 
     | 
    
         
            +
                  expect(redis).to receive(:get).and_return(nil)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  expect(subject.load_credentials).to be_nil
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
              describe 'redis_credentials_key' do
         
     | 
| 
      
 47 
     | 
    
         
            +
                context 'without given key' do
         
     | 
| 
      
 48 
     | 
    
         
            +
                  it 'should return default key' do
         
     | 
| 
      
 49 
     | 
    
         
            +
                    expect(subject.redis_credentials_key).to be == "google_api_credentials"
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
                context 'with given key' do
         
     | 
| 
      
 53 
     | 
    
         
            +
                  let(:redis_store) { Google::APIClient::RedisStore.new('a redis instance', 'another_google_api_credentials') }
         
     | 
| 
      
 54 
     | 
    
         
            +
                  it 'should use given key' do
         
     | 
| 
      
 55 
     | 
    
         
            +
                    expect(redis_store.redis_credentials_key).to be == "another_google_api_credentials"
         
     | 
| 
      
 56 
     | 
    
         
            +
                  end
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              describe 'write credentials' do
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                it 'should write credentials' do
         
     | 
| 
      
 64 
     | 
    
         
            +
                  subject.redis= redis
         
     | 
| 
      
 65 
     | 
    
         
            +
                  expect(redis).to receive(:set).and_return('ok')
         
     | 
| 
      
 66 
     | 
    
         
            +
                  expect(subject.write_credentials(credentials_hash)).to be_truthy
         
     | 
| 
      
 67 
     | 
    
         
            +
                end
         
     | 
| 
      
 68 
     | 
    
         
            +
              end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,248 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Copyright 2012 Google Inc.
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
      
 4 
     | 
    
         
            +
            # you may not use this file except in compliance with the License.
         
     | 
| 
      
 5 
     | 
    
         
            +
            # You may obtain a copy of the License at
         
     | 
| 
      
 6 
     | 
    
         
            +
            #
         
     | 
| 
      
 7 
     | 
    
         
            +
            #      http://www.apache.org/licenses/LICENSE-2.0
         
     | 
| 
      
 8 
     | 
    
         
            +
            #
         
     | 
| 
      
 9 
     | 
    
         
            +
            # Unless required by applicable law or agreed to in writing, software
         
     | 
| 
      
 10 
     | 
    
         
            +
            # distributed under the License is distributed on an "AS IS" BASIS,
         
     | 
| 
      
 11 
     | 
    
         
            +
            # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         
     | 
| 
      
 12 
     | 
    
         
            +
            # See the License for the specific language governing permissions and
         
     | 
| 
      
 13 
     | 
    
         
            +
            # limitations under the License.
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 16 
     | 
    
         
            +
            require 'google/api_client'
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            RSpec.describe Google::APIClient::BatchRequest do
         
     | 
| 
      
 19 
     | 
    
         
            +
              CLIENT = Google::APIClient.new(:application_name => 'API Client Tests') unless defined?(CLIENT)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              after do
         
     | 
| 
      
 22 
     | 
    
         
            +
                # Reset client to not-quite-pristine state
         
     | 
| 
      
 23 
     | 
    
         
            +
                CLIENT.key = nil
         
     | 
| 
      
 24 
     | 
    
         
            +
                CLIENT.user_ip = nil
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              it 'should raise an error if making an empty batch request' do
         
     | 
| 
      
 28 
     | 
    
         
            +
                batch = Google::APIClient::BatchRequest.new
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                expect(lambda do
         
     | 
| 
      
 31 
     | 
    
         
            +
                  CLIENT.execute(batch)
         
     | 
| 
      
 32 
     | 
    
         
            +
                end).to raise_error(Google::APIClient::BatchError)
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              it 'should allow query parameters in batch requests' do
         
     | 
| 
      
 36 
     | 
    
         
            +
                batch = Google::APIClient::BatchRequest.new
         
     | 
| 
      
 37 
     | 
    
         
            +
                batch.add(:uri => 'https://example.com', :parameters => {
         
     | 
| 
      
 38 
     | 
    
         
            +
                  'a' => '12345'
         
     | 
| 
      
 39 
     | 
    
         
            +
                })
         
     | 
| 
      
 40 
     | 
    
         
            +
                method, uri, headers, body = batch.to_http_request
         
     | 
| 
      
 41 
     | 
    
         
            +
                expect(body.read).to include("/?a=12345")
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              describe 'with the discovery API' do
         
     | 
| 
      
 45 
     | 
    
         
            +
                before do
         
     | 
| 
      
 46 
     | 
    
         
            +
                  CLIENT.authorization = nil
         
     | 
| 
      
 47 
     | 
    
         
            +
                  @discovery = CLIENT.discovered_api('discovery', 'v1')
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                describe 'with two valid requests' do
         
     | 
| 
      
 51 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 52 
     | 
    
         
            +
                    @call1 = {
         
     | 
| 
      
 53 
     | 
    
         
            +
                      :api_method => @discovery.apis.get_rest,
         
     | 
| 
      
 54 
     | 
    
         
            +
                      :parameters => {
         
     | 
| 
      
 55 
     | 
    
         
            +
                        'api' => 'plus',
         
     | 
| 
      
 56 
     | 
    
         
            +
                        'version' => 'v1'
         
     | 
| 
      
 57 
     | 
    
         
            +
                      }
         
     | 
| 
      
 58 
     | 
    
         
            +
                    }
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                    @call2 = {
         
     | 
| 
      
 61 
     | 
    
         
            +
                      :api_method => @discovery.apis.get_rest,
         
     | 
| 
      
 62 
     | 
    
         
            +
                      :parameters => {
         
     | 
| 
      
 63 
     | 
    
         
            +
                        'api' => 'discovery',
         
     | 
| 
      
 64 
     | 
    
         
            +
                        'version' => 'v1'
         
     | 
| 
      
 65 
     | 
    
         
            +
                      }
         
     | 
| 
      
 66 
     | 
    
         
            +
                    }
         
     | 
| 
      
 67 
     | 
    
         
            +
                  end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                  it 'should execute both when using a global callback' do
         
     | 
| 
      
 70 
     | 
    
         
            +
                    block_called = 0
         
     | 
| 
      
 71 
     | 
    
         
            +
                    ids = ['first_call', 'second_call']
         
     | 
| 
      
 72 
     | 
    
         
            +
                    expected_ids = ids.clone
         
     | 
| 
      
 73 
     | 
    
         
            +
                    batch = Google::APIClient::BatchRequest.new do |result|
         
     | 
| 
      
 74 
     | 
    
         
            +
                      block_called += 1
         
     | 
| 
      
 75 
     | 
    
         
            +
                      expect(result.status).to eq(200)
         
     | 
| 
      
 76 
     | 
    
         
            +
                      expect(expected_ids).to include(result.response.call_id)
         
     | 
| 
      
 77 
     | 
    
         
            +
                      expected_ids.delete(result.response.call_id)
         
     | 
| 
      
 78 
     | 
    
         
            +
                    end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                    batch.add(@call1, ids[0])
         
     | 
| 
      
 81 
     | 
    
         
            +
                    batch.add(@call2, ids[1])
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                    CLIENT.execute(batch)
         
     | 
| 
      
 84 
     | 
    
         
            +
                    expect(block_called).to eq(2)
         
     | 
| 
      
 85 
     | 
    
         
            +
                  end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                  it 'should execute both when using individual callbacks' do
         
     | 
| 
      
 88 
     | 
    
         
            +
                    batch = Google::APIClient::BatchRequest.new
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                    call1_returned, call2_returned = false, false
         
     | 
| 
      
 91 
     | 
    
         
            +
                    batch.add(@call1) do |result|
         
     | 
| 
      
 92 
     | 
    
         
            +
                      call1_returned = true
         
     | 
| 
      
 93 
     | 
    
         
            +
                      expect(result.status).to eq(200)
         
     | 
| 
      
 94 
     | 
    
         
            +
                    end
         
     | 
| 
      
 95 
     | 
    
         
            +
                    batch.add(@call2) do |result|
         
     | 
| 
      
 96 
     | 
    
         
            +
                      call2_returned = true
         
     | 
| 
      
 97 
     | 
    
         
            +
                      expect(result.status).to eq(200)
         
     | 
| 
      
 98 
     | 
    
         
            +
                    end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                    CLIENT.execute(batch)
         
     | 
| 
      
 101 
     | 
    
         
            +
                    expect(call1_returned).to be_truthy
         
     | 
| 
      
 102 
     | 
    
         
            +
                    expect(call2_returned).to be_truthy
         
     | 
| 
      
 103 
     | 
    
         
            +
                  end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                  it 'should raise an error if using the same call ID more than once' do
         
     | 
| 
      
 106 
     | 
    
         
            +
                    batch = Google::APIClient::BatchRequest.new
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                    expect(lambda do
         
     | 
| 
      
 109 
     | 
    
         
            +
                      batch.add(@call1, 'my_id')
         
     | 
| 
      
 110 
     | 
    
         
            +
                      batch.add(@call2, 'my_id')
         
     | 
| 
      
 111 
     | 
    
         
            +
                    end).to raise_error(Google::APIClient::BatchError)
         
     | 
| 
      
 112 
     | 
    
         
            +
                  end
         
     | 
| 
      
 113 
     | 
    
         
            +
                end
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                describe 'with a valid request and an invalid one' do
         
     | 
| 
      
 116 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 117 
     | 
    
         
            +
                    @call1 = {
         
     | 
| 
      
 118 
     | 
    
         
            +
                      :api_method => @discovery.apis.get_rest,
         
     | 
| 
      
 119 
     | 
    
         
            +
                      :parameters => {
         
     | 
| 
      
 120 
     | 
    
         
            +
                        'api' => 'plus',
         
     | 
| 
      
 121 
     | 
    
         
            +
                        'version' => 'v1'
         
     | 
| 
      
 122 
     | 
    
         
            +
                      }
         
     | 
| 
      
 123 
     | 
    
         
            +
                    }
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                    @call2 = {
         
     | 
| 
      
 126 
     | 
    
         
            +
                      :api_method => @discovery.apis.get_rest,
         
     | 
| 
      
 127 
     | 
    
         
            +
                      :parameters => {
         
     | 
| 
      
 128 
     | 
    
         
            +
                        'api' => 0,
         
     | 
| 
      
 129 
     | 
    
         
            +
                        'version' => 1
         
     | 
| 
      
 130 
     | 
    
         
            +
                      }
         
     | 
| 
      
 131 
     | 
    
         
            +
                    }
         
     | 
| 
      
 132 
     | 
    
         
            +
                  end
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                  it 'should execute both when using a global callback' do
         
     | 
| 
      
 135 
     | 
    
         
            +
                    block_called = 0
         
     | 
| 
      
 136 
     | 
    
         
            +
                    ids = ['first_call', 'second_call']
         
     | 
| 
      
 137 
     | 
    
         
            +
                    expected_ids = ids.clone
         
     | 
| 
      
 138 
     | 
    
         
            +
                    batch = Google::APIClient::BatchRequest.new do |result|
         
     | 
| 
      
 139 
     | 
    
         
            +
                      block_called += 1
         
     | 
| 
      
 140 
     | 
    
         
            +
                      expect(expected_ids).to include(result.response.call_id)
         
     | 
| 
      
 141 
     | 
    
         
            +
                      expected_ids.delete(result.response.call_id)
         
     | 
| 
      
 142 
     | 
    
         
            +
                      if result.response.call_id == ids[0]
         
     | 
| 
      
 143 
     | 
    
         
            +
                        expect(result.status).to eq(200)
         
     | 
| 
      
 144 
     | 
    
         
            +
                      else
         
     | 
| 
      
 145 
     | 
    
         
            +
                        expect(result.status).to be >= 400
         
     | 
| 
      
 146 
     | 
    
         
            +
                        expect(result.status).to be < 500
         
     | 
| 
      
 147 
     | 
    
         
            +
                      end
         
     | 
| 
      
 148 
     | 
    
         
            +
                    end
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
                    batch.add(@call1, ids[0])
         
     | 
| 
      
 151 
     | 
    
         
            +
                    batch.add(@call2, ids[1])
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                    CLIENT.execute(batch)
         
     | 
| 
      
 154 
     | 
    
         
            +
                    expect(block_called).to eq(2)
         
     | 
| 
      
 155 
     | 
    
         
            +
                  end
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
                  it 'should execute both when using individual callbacks' do
         
     | 
| 
      
 158 
     | 
    
         
            +
                    batch = Google::APIClient::BatchRequest.new
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
                    call1_returned, call2_returned = false, false
         
     | 
| 
      
 161 
     | 
    
         
            +
                    batch.add(@call1) do |result|
         
     | 
| 
      
 162 
     | 
    
         
            +
                      call1_returned = true
         
     | 
| 
      
 163 
     | 
    
         
            +
                      expect(result.status).to eq(200)
         
     | 
| 
      
 164 
     | 
    
         
            +
                    end
         
     | 
| 
      
 165 
     | 
    
         
            +
                    batch.add(@call2) do |result|
         
     | 
| 
      
 166 
     | 
    
         
            +
                      call2_returned = true
         
     | 
| 
      
 167 
     | 
    
         
            +
                      expect(result.status).to be >= 400
         
     | 
| 
      
 168 
     | 
    
         
            +
                      expect(result.status).to be < 500
         
     | 
| 
      
 169 
     | 
    
         
            +
                    end
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
                    CLIENT.execute(batch)
         
     | 
| 
      
 172 
     | 
    
         
            +
                    expect(call1_returned).to be_truthy
         
     | 
| 
      
 173 
     | 
    
         
            +
                    expect(call2_returned).to be_truthy
         
     | 
| 
      
 174 
     | 
    
         
            +
                  end
         
     | 
| 
      
 175 
     | 
    
         
            +
                end
         
     | 
| 
      
 176 
     | 
    
         
            +
              end
         
     | 
| 
      
 177 
     | 
    
         
            +
             
     | 
| 
      
 178 
     | 
    
         
            +
              describe 'with the calendar API' do
         
     | 
| 
      
 179 
     | 
    
         
            +
                before do
         
     | 
| 
      
 180 
     | 
    
         
            +
                  CLIENT.authorization = nil
         
     | 
| 
      
 181 
     | 
    
         
            +
                  @calendar = CLIENT.discovered_api('calendar', 'v3')
         
     | 
| 
      
 182 
     | 
    
         
            +
                end
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
      
 184 
     | 
    
         
            +
                describe 'with two valid requests' do
         
     | 
| 
      
 185 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 186 
     | 
    
         
            +
                    event1 = {
         
     | 
| 
      
 187 
     | 
    
         
            +
                      'summary' => 'Appointment 1',
         
     | 
| 
      
 188 
     | 
    
         
            +
                      'location' => 'Somewhere',
         
     | 
| 
      
 189 
     | 
    
         
            +
                      'start' => {
         
     | 
| 
      
 190 
     | 
    
         
            +
                        'dateTime' => '2011-01-01T10:00:00.000-07:00'
         
     | 
| 
      
 191 
     | 
    
         
            +
                      },
         
     | 
| 
      
 192 
     | 
    
         
            +
                      'end' => {
         
     | 
| 
      
 193 
     | 
    
         
            +
                        'dateTime' => '2011-01-01T10:25:00.000-07:00'
         
     | 
| 
      
 194 
     | 
    
         
            +
                      },
         
     | 
| 
      
 195 
     | 
    
         
            +
                      'attendees' => [
         
     | 
| 
      
 196 
     | 
    
         
            +
                        {
         
     | 
| 
      
 197 
     | 
    
         
            +
                          'email' => 'myemail@mydomain.tld'
         
     | 
| 
      
 198 
     | 
    
         
            +
                        }
         
     | 
| 
      
 199 
     | 
    
         
            +
                      ]
         
     | 
| 
      
 200 
     | 
    
         
            +
                    }
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
      
 202 
     | 
    
         
            +
                    event2 = {
         
     | 
| 
      
 203 
     | 
    
         
            +
                      'summary' => 'Appointment 2',
         
     | 
| 
      
 204 
     | 
    
         
            +
                      'location' => 'Somewhere as well',
         
     | 
| 
      
 205 
     | 
    
         
            +
                      'start' => {
         
     | 
| 
      
 206 
     | 
    
         
            +
                        'dateTime' => '2011-01-02T10:00:00.000-07:00'
         
     | 
| 
      
 207 
     | 
    
         
            +
                      },
         
     | 
| 
      
 208 
     | 
    
         
            +
                      'end' => {
         
     | 
| 
      
 209 
     | 
    
         
            +
                        'dateTime' => '2011-01-02T10:25:00.000-07:00'
         
     | 
| 
      
 210 
     | 
    
         
            +
                      },
         
     | 
| 
      
 211 
     | 
    
         
            +
                      'attendees' => [
         
     | 
| 
      
 212 
     | 
    
         
            +
                        {
         
     | 
| 
      
 213 
     | 
    
         
            +
                          'email' => 'myemail@mydomain.tld'
         
     | 
| 
      
 214 
     | 
    
         
            +
                        }
         
     | 
| 
      
 215 
     | 
    
         
            +
                      ]
         
     | 
| 
      
 216 
     | 
    
         
            +
                    }
         
     | 
| 
      
 217 
     | 
    
         
            +
             
     | 
| 
      
 218 
     | 
    
         
            +
                    @call1 = {
         
     | 
| 
      
 219 
     | 
    
         
            +
                      :api_method => @calendar.events.insert,
         
     | 
| 
      
 220 
     | 
    
         
            +
                      :parameters => {'calendarId' => 'myemail@mydomain.tld'},
         
     | 
| 
      
 221 
     | 
    
         
            +
                      :body => MultiJson.dump(event1),
         
     | 
| 
      
 222 
     | 
    
         
            +
                      :headers => {'Content-Type' => 'application/json'}
         
     | 
| 
      
 223 
     | 
    
         
            +
                    }
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
                    @call2 = {
         
     | 
| 
      
 226 
     | 
    
         
            +
                      :api_method => @calendar.events.insert,
         
     | 
| 
      
 227 
     | 
    
         
            +
                      :parameters => {'calendarId' => 'myemail@mydomain.tld'},
         
     | 
| 
      
 228 
     | 
    
         
            +
                      :body => MultiJson.dump(event2),
         
     | 
| 
      
 229 
     | 
    
         
            +
                      :headers => {'Content-Type' => 'application/json'}
         
     | 
| 
      
 230 
     | 
    
         
            +
                    }
         
     | 
| 
      
 231 
     | 
    
         
            +
                  end
         
     | 
| 
      
 232 
     | 
    
         
            +
             
     | 
| 
      
 233 
     | 
    
         
            +
                  it 'should convert to a correct HTTP request' do
         
     | 
| 
      
 234 
     | 
    
         
            +
                    batch = Google::APIClient::BatchRequest.new { |result| }
         
     | 
| 
      
 235 
     | 
    
         
            +
                    batch.add(@call1, '1').add(@call2, '2')
         
     | 
| 
      
 236 
     | 
    
         
            +
                    request = batch.to_env(CLIENT.connection)
         
     | 
| 
      
 237 
     | 
    
         
            +
                    boundary = Google::APIClient::BatchRequest::BATCH_BOUNDARY
         
     | 
| 
      
 238 
     | 
    
         
            +
                    expect(request[:method].to_s.downcase).to eq('post')
         
     | 
| 
      
 239 
     | 
    
         
            +
                    expect(request[:url].to_s).to eq('https://www.googleapis.com/batch')
         
     | 
| 
      
 240 
     | 
    
         
            +
                    expect(request[:request_headers]['Content-Type']).to eq("multipart/mixed;boundary=#{boundary}")
         
     | 
| 
      
 241 
     | 
    
         
            +
                    body = request[:body].read
         
     | 
| 
      
 242 
     | 
    
         
            +
                    expect(body).to include(@call1[:body])
         
     | 
| 
      
 243 
     | 
    
         
            +
                    expect(body).to include(@call2[:body])
         
     | 
| 
      
 244 
     | 
    
         
            +
                  end
         
     | 
| 
      
 245 
     | 
    
         
            +
                end
         
     | 
| 
      
 246 
     | 
    
         
            +
             
     | 
| 
      
 247 
     | 
    
         
            +
              end
         
     | 
| 
      
 248 
     | 
    
         
            +
            end
         
     |