looker-sdk 0.0.7 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -58,7 +58,9 @@ module LookerSDK
58
58
  @original_options = options.dup
59
59
 
60
60
  load_credentials_from_netrc unless application_credentials?
61
- load_swagger
61
+ if !@lazy_swagger
62
+ load_swagger
63
+ end
62
64
  self.dynamic = true
63
65
  end
64
66
 
@@ -89,11 +91,12 @@ module LookerSDK
89
91
  #
90
92
  # @param url [String] The path, relative to {#api_endpoint}
91
93
  # @param options [Hash] Query and header params for request
94
+ # @param encoded [Boolean] true: url already encoded, false: url needs encoding
92
95
  # @param &block [Block] Block to be called with |response, chunk| for each chunk of the body from
93
96
  # the server. The block must return true to continue, or false to abort streaming.
94
97
  # @return [Sawyer::Resource]
95
- def get(url, options = {}, &block)
96
- request :get, url, nil, parse_query_and_convenience_headers(options), &block
98
+ def get(url, options = {}, encoded=false, &block)
99
+ request :get, url, nil, parse_query_and_convenience_headers(options), encoded, &block
97
100
  end
98
101
 
99
102
  # Make a HTTP POST request
@@ -101,11 +104,12 @@ module LookerSDK
101
104
  # @param url [String] The path, relative to {#api_endpoint}
102
105
  # @param data [String|Array|Hash] Body and optionally header params for request
103
106
  # @param options [Hash] Optional header params for request
107
+ # @param encoded [Boolean] true: url already encoded, false: url needs encoding
104
108
  # @param &block [Block] Block to be called with |response, chunk| for each chunk of the body from
105
109
  # the server. The block must return true to continue, or false to abort streaming.
106
110
  # @return [Sawyer::Resource]
107
- def post(url, data = {}, options = {}, &block)
108
- request :post, url, data, parse_query_and_convenience_headers(options), &block
111
+ def post(url, data = {}, options = {}, encoded=false, &block)
112
+ request :post, url, data, parse_query_and_convenience_headers(options), encoded, &block
109
113
  end
110
114
 
111
115
  # Make a HTTP PUT request
@@ -113,11 +117,12 @@ module LookerSDK
113
117
  # @param url [String] The path, relative to {#api_endpoint}
114
118
  # @param data [String|Array|Hash] Body and optionally header params for request
115
119
  # @param options [Hash] Optional header params for request
120
+ # @param encoded [Boolean] true: url already encoded, false: url needs encoding
116
121
  # @param &block [Block] Block to be called with |response, chunk| for each chunk of the body from
117
122
  # the server. The block must return true to continue, or false to abort streaming.
118
123
  # @return [Sawyer::Resource]
119
- def put(url, data = {}, options = {}, &block)
120
- request :put, url, data, parse_query_and_convenience_headers(options), &block
124
+ def put(url, data = {}, options = {}, encoded=false, &block)
125
+ request :put, url, data, parse_query_and_convenience_headers(options), encoded, &block
121
126
  end
122
127
 
123
128
  # Make a HTTP PATCH request
@@ -125,29 +130,32 @@ module LookerSDK
125
130
  # @param url [String] The path, relative to {#api_endpoint}
126
131
  # @param data [String|Array|Hash] Body and optionally header params for request
127
132
  # @param options [Hash] Optional header params for request
133
+ # @param encoded [Boolean] true: url already encoded, false: url needs encoding
128
134
  # @param &block [Block] Block to be called with |response, chunk| for each chunk of the body from
129
135
  # the server. The block must return true to continue, or false to abort streaming.
130
136
  # @return [Sawyer::Resource]
131
- def patch(url, data = {}, options = {}, &block)
132
- request :patch, url, data, parse_query_and_convenience_headers(options), &block
137
+ def patch(url, data = {}, options = {}, encoded=false, &block)
138
+ request :patch, url, data, parse_query_and_convenience_headers(options), encoded, &block
133
139
  end
134
140
 
135
141
  # Make a HTTP DELETE request
136
142
  #
137
143
  # @param url [String] The path, relative to {#api_endpoint}
138
144
  # @param options [Hash] Query and header params for request
145
+ # @param encoded [Boolean] true: url already encoded, false: url needs encoding
139
146
  # @return [Sawyer::Resource]
140
- def delete(url, options = {}, &block)
141
- request :delete, url, nil, parse_query_and_convenience_headers(options)
147
+ def delete(url, options = {}, encoded=false, &block)
148
+ request :delete, url, nil, parse_query_and_convenience_headers(options), encoded, &block
142
149
  end
143
150
 
144
151
  # Make a HTTP HEAD request
145
152
  #
146
153
  # @param url [String] The path, relative to {#api_endpoint}
147
154
  # @param options [Hash] Query and header params for request
155
+ # @param encoded [Boolean] true: url already encoded, false: url needs encoding
148
156
  # @return [Sawyer::Resource]
149
- def head(url, options = {}, &block)
150
- request :head, url, nil, parse_query_and_convenience_headers(options)
157
+ def head(url, options = {}, encoded=false, &block)
158
+ request :head, url, nil, parse_query_and_convenience_headers(options), encoded
151
159
  end
152
160
 
153
161
  # Make one or more HTTP GET requests, optionally fetching
@@ -192,7 +200,7 @@ module LookerSDK
192
200
  Sawyer::Agent.new(api_endpoint, options) do |http|
193
201
  http.headers[:accept] = default_media_type
194
202
  http.headers[:user_agent] = user_agent
195
- http.authorization('token', @access_token) if token_authenticated?
203
+ http.headers[:authorization] = "token #{@access_token}" if token_authenticated?
196
204
  end
197
205
  end
198
206
 
@@ -296,12 +304,16 @@ module LookerSDK
296
304
  @agent = nil
297
305
  end
298
306
 
299
- def request(method, path, data, options, &block)
307
+ def request(method, path, data, options, encoded, &block)
300
308
  ensure_logged_in
301
309
  begin
310
+ path = path.to_s
311
+ if !encoded
312
+ path = URI::Parser.new.escape(path)
313
+ end
302
314
  @last_response = @last_error = nil
303
315
  return stream_request(method, path, data, options, &block) if block_given?
304
- @last_response = response = agent.call(method, URI::Parser.new.escape(path.to_s), data, options)
316
+ @last_response = response = agent.call(method, path, data, options)
305
317
  @raw_responses ? response : response.data
306
318
  rescue StandardError => e
307
319
  @last_error = e
@@ -66,7 +66,8 @@ module LookerSDK
66
66
  attr_accessor :access_token, :auto_paginate, :client_id,
67
67
  :client_secret, :default_media_type, :connection_options,
68
68
  :middleware, :netrc, :netrc_file,
69
- :per_page, :proxy, :user_agent, :faraday, :swagger, :shared_swagger, :raw_responses
69
+ :per_page, :proxy, :user_agent, :faraday, :swagger, :shared_swagger, :raw_responses,
70
+ :lazy_swagger
70
71
  attr_writer :web_endpoint, :api_endpoint
71
72
 
72
73
  class << self
@@ -92,7 +93,8 @@ module LookerSDK
92
93
  :shared_swagger,
93
94
  :swagger,
94
95
  :raw_responses,
95
- :web_endpoint
96
+ :web_endpoint,
97
+ :lazy_swagger,
96
98
  ]
97
99
  end
98
100
  end
@@ -125,6 +125,12 @@ module LookerSDK
125
125
  false
126
126
  end
127
127
 
128
+ # Default behavior for loading swagger during initialization or at first call
129
+ # @return [Boolean]
130
+ def lazy_swagger
131
+ false
132
+ end
133
+
128
134
  def raw_responses
129
135
  false
130
136
  end
@@ -30,9 +30,7 @@ module LookerSDK
30
30
  module Response
31
31
 
32
32
  # HTTP status codes returned by the API
33
- class RaiseError < Faraday::Response::Middleware
34
-
35
- private
33
+ class RaiseError < Faraday::Middleware
36
34
 
37
35
  def on_complete(response)
38
36
  if error = LookerSDK::Error.from_response(response)
@@ -26,6 +26,6 @@ module LookerSDK
26
26
 
27
27
  # Current version
28
28
  # @return [String]
29
- VERSION = "0.0.7"
29
+ VERSION = "0.1.2"
30
30
 
31
31
  end
data/lib/looker-sdk.rb CHANGED
@@ -43,7 +43,6 @@ require 'faraday/rack_builder'
43
43
  require 'faraday/request'
44
44
  require 'faraday/request/authorization'
45
45
  require 'faraday/response'
46
- require 'faraday/upload_io'
47
46
  require 'faraday/utils'
48
47
 
49
48
  #require 'rack'
data/looker-sdk.gemspec CHANGED
@@ -7,15 +7,15 @@ Gem::Specification.new do |s|
7
7
  s.version = LookerSDK::VERSION
8
8
  s.date = "#{Time.now.strftime('%F')}"
9
9
  s.authors = ['Looker']
10
- s.email = 'opensource+sdkruby@looker.com'
11
- s.homepage = 'https://github.com/looker/looker-sdk-ruby'
10
+ s.email = 'drstrangelove@google.com'
11
+ s.homepage = 'https://github.com/looker-open-source/looker-sdk-ruby'
12
12
  s.summary = %q{Looker Ruby SDK}
13
13
  s.description = 'Use this SDK to access the Looker API. The Looker API provides functions to perform administrative '+
14
14
  'tasks such as provisioning users, configuring database connections, and so on. It also enables you to leverage '+
15
15
  'the Looker data analytics engine to fetch data or render visualizations defined in your Looker data models. '+
16
16
  'For more information, see https://looker.com.'
17
17
  s.license = 'MIT'
18
- s.required_ruby_version = '>= 2.0'
18
+ s.required_ruby_version = '>= 2.5'
19
19
  s.requirements = 'Looker version 4.0 or later' # informational
20
20
 
21
21
  s.files = `git ls-files`.split("\n")
@@ -24,5 +24,5 @@ Gem::Specification.new do |s|
24
24
  s.require_paths = %w(lib)
25
25
  s.add_dependency 'jruby-openssl' if s.platform == :jruby
26
26
  s.add_dependency 'sawyer', '~> 0.8'
27
- s.add_dependency 'faraday', ['>= 0.9.0', '< 1.0']
27
+ s.add_dependency 'faraday', ['>= 1.2', '< 2.0']
28
28
  end
data/readme.md CHANGED
@@ -1,4 +1,5 @@
1
- # [Looker](http://looker.com/) SDK for Ruby [![Build Status](https://travis-ci.org/looker/looker-sdk-ruby.svg)](https://travis-ci.org/looker/looker-sdk-ruby)
1
+ [![Ruby-CI](https://github.com/looker-open-source/looker-sdk-ruby/actions/workflows/ruby-ci.yml/badge.svg?branch=main)](https://github.com/looker-open-source/looker-sdk-ruby/actions/workflows/ruby-ci.yml)
2
+ # [Looker](http://looker.com/) SDK for Ruby
2
3
  ### Overview
3
4
  This SDK supports secure/authenticated access to the Looker RESTful API. The SDK binds dynamically to the Looker API and builds mappings for the sets of API methods that the Looker instance exposes. This allows for writing straightforward Ruby scripts to interact with the Looker API. And, it allows the SDK to provide access to new Looker API features in each Looker release without requiring an update to the SDK each time.
4
5
 
@@ -14,7 +15,7 @@ When trying to access a resource with the API that the current user is not allow
14
15
 
15
16
  ### Installation
16
17
  ```bash
17
- $ git clone git@github.com:looker/looker-sdk-ruby.git looker-sdk
18
+ $ git clone git@github.com:looker-open-source/looker-sdk-ruby.git looker-sdk
18
19
  $ cd looker-sdk
19
20
  $ gem install bundle
20
21
  $ bundle install
@@ -23,10 +24,13 @@ $ rake install
23
24
 
24
25
  ### Development
25
26
 
27
+ Rename test/fixtures/.netrc.template to test/fixtures/.netrc and add API3
28
+ credentials for tests to pass.
29
+ Comment out coverage configuration in test/helper.rb for debugging.
26
30
  ```bash
27
31
  $ bundle install
28
32
  $ rake test # run the test suite
29
- $ rake test:all # run the test suite on all supported Rubies
33
+ $ make install test # run the test suite on all supported Rubies
30
34
  ```
31
35
 
32
36
  ### Basic Usage
@@ -39,7 +43,7 @@ require 'looker-sdk'
39
43
  sdk = LookerSDK::Client.new(
40
44
  :client_id => "4CN7jzm7yrkcy2MC4CCG",
41
45
  :client_secret => "Js3rZZ7vHfbc2hBynSj7zqKh",
42
- :api_endpoint => "https://mygreatcompany.looker.com:19999/api/3.0"
46
+ :api_endpoint => "https://mygreatcompany.looker.com:19999/api/4.0"
43
47
  )
44
48
 
45
49
  # If you don't want to provide explicit credentials: (trust me you don't)
@@ -53,7 +57,7 @@ sdk = LookerSDK::Client.new(
53
57
  sdk = LookerSDK::Client.new(
54
58
  :netrc => true,
55
59
  :netrc_file => "~/.net_rc",
56
- :api_endpoint => "https://mygreatcompany.looker.com:19999/api/3.0",
60
+ :api_endpoint => "https://mygreatcompany.looker.com:19999/api/4.0",
57
61
 
58
62
  # Set longer timeout to allow for long running queries. The default is 60 seconds and can be problematic.
59
63
  :connection_options => {:request => {:timeout => 60 * 60, :open_timeout => 30}},
data/shell/Gemfile CHANGED
@@ -2,5 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  gem 'pry', '~> 0.10.1'
4
4
  gem 'netrc', '~> 0.7.7'
5
- # gem 'looker-sdk', :git => 'git@github.com:looker/looker-sdk-ruby.git'
5
+ # gem 'looker-sdk', :git => 'git@github.com:looker-open-source/looker-sdk-ruby.git'
6
6
  gem 'looker-sdk', :path => '../'
File without changes
data/test/helper.rb CHANGED
@@ -52,19 +52,45 @@ def fix_netrc_permissions(path)
52
52
  File.chmod(0600, path) unless s.mode.to_s(8)[3..5] == "0600"
53
53
  end
54
54
 
55
- fix_netrc_permissions(File.join(fixture_path, '.netrc'))
55
+ begin
56
+ fix_netrc_permissions(File.join(fixture_path, '.netrc'))
57
+ rescue => e
58
+ puts e
59
+ end
56
60
 
57
61
  def setup_sdk
58
62
  LookerSDK.reset!
63
+
64
+ base_url = ENV['LOOKERSDK_BASE_URL'] || 'https://localhost:20000'
65
+ verify_ssl = case ENV['LOOKERSDK_VERIFY_SSL']
66
+ when /false/i
67
+ false
68
+ when /f/i
69
+ false
70
+ when '0'
71
+ false
72
+ else
73
+ true
74
+ end
75
+ api_version = ENV['LOOKERSDK_API_VERSION'] || '4.0'
76
+ client_id = ENV['LOOKERSDK_CLIENT_ID']
77
+ client_secret = ENV['LOOKERSDK_CLIENT_SECRET']
78
+
59
79
  LookerSDK.configure do |c|
60
- c.connection_options = {:ssl => {:verify => false}}
61
- c.netrc = true
62
- c.netrc_file = File.join(fixture_path, '.netrc')
80
+ c.lazy_swagger = true
81
+ c.connection_options = {:ssl => {:verify => false}} unless verify_ssl
82
+ if (client_id && client_secret) then
83
+ c.client_id = client_id
84
+ c.client_secret = client_secret
85
+ c.api_endpoint = "#{base_url}/api/#{api_version}"
86
+ else
87
+ c.netrc = true
88
+ c.netrc_file = File.join(fixture_path, '.netrc')
89
+ end
63
90
  end
64
91
  end
65
92
 
66
93
  def teardown_sdk
94
+ setup_sdk # put back initial config
67
95
  LookerSDK.logout
68
96
  end
69
-
70
-
@@ -5,7 +5,7 @@
5
5
  "title": "Looker API",
6
6
  "description": "This document is a representative sample (subset) of the Looker API that should only be used to unit test the Looker ruby sdk. To get the current, actual Looker API metadata visit /api/3.0/swagger.json on your Looker instance.",
7
7
  "contact": {
8
- "name": "Looker Team <support@looker.com>"
8
+ "name": "Looker Team <https://help.looker.com>"
9
9
  },
10
10
  "license": {
11
11
  "name": "EULA",
@@ -30,8 +30,52 @@ describe LookerSDK::Client do
30
30
  setup_sdk
31
31
  end
32
32
 
33
- after(:each) do
34
- teardown_sdk
33
+ base_url = ENV['LOOKERSDK_BASE_URL'] || 'https://localhost:20000'
34
+ verify_ssl = case ENV['LOOKERSDK_VERIFY_SSL']
35
+ when /false/i
36
+ false
37
+ when /f/i
38
+ false
39
+ when '0'
40
+ false
41
+ else
42
+ true
43
+ end
44
+ api_version = ENV['LOOKERSDK_API_VERSION'] || '4.0'
45
+ client_id = ENV['LOOKERSDK_CLIENT_ID']
46
+ client_secret = ENV['LOOKERSDK_CLIENT_SECRET']
47
+
48
+ opts = {}
49
+ if (client_id && client_secret) then
50
+ opts.merge!({
51
+ :client_id => client_id,
52
+ :client_secret => client_secret,
53
+ :api_endpoint => "#{base_url}/api/#{api_version}",
54
+ })
55
+ opts[:connection_options] = {:ssl => {:verify => false}} unless verify_ssl
56
+ else
57
+ opts.merge!({
58
+ :netrc => true,
59
+ :netrc_file => File.join(fixture_path, '.netrc'),
60
+ :connection_options => {:ssl => {:verify => false}},
61
+ })
62
+
63
+ end
64
+
65
+ describe "lazy load swagger" do
66
+ it "lazy loads swagger" do
67
+ LookerSDK.reset!
68
+ client = LookerSDK::Client.new(opts.merge({:lazy_swagger => true}))
69
+ assert_nil client.swagger
70
+ client.me()
71
+ assert client.swagger
72
+ end
73
+
74
+ it "loads swagger initially" do
75
+ LookerSDK.reset!
76
+ client = LookerSDK::Client.new(opts.merge({:lazy_swagger => false}))
77
+ assert client.swagger
78
+ end
35
79
  end
36
80
 
37
81
  describe "module configuration" do
@@ -50,8 +94,9 @@ describe LookerSDK::Client do
50
94
  end
51
95
 
52
96
  it "inherits the module configuration" do
53
- client = LookerSDK::Client.new
97
+ client = LookerSDK::Client.new(:lazy_swagger => true)
54
98
  LookerSDK::Configurable.keys.each do |key|
99
+ next if key == :lazy_swagger
55
100
  client.instance_variable_get(:"@#{key}").must_equal("Some #{key}")
56
101
  end
57
102
  end
@@ -63,7 +108,8 @@ describe LookerSDK::Client do
63
108
  :connection_options => {:ssl => {:verify => false}},
64
109
  :per_page => 40,
65
110
  :client_id => "looker_client_id",
66
- :client_secret => "client_secret2"
111
+ :client_secret => "client_secret2",
112
+ :lazy_swagger => true,
67
113
  }
68
114
  end
69
115
 
@@ -110,8 +156,13 @@ describe LookerSDK::Client do
110
156
 
111
157
  describe "with .netrc" do
112
158
  it "can read .netrc files" do
159
+ skip unless File.exist?(File.join(fixture_path, '.netrc'))
113
160
  LookerSDK.reset!
114
- client = LookerSDK::Client.new(:netrc => true, :netrc_file => File.join(fixture_path, '.netrc'))
161
+ client = LookerSDK::Client.new(
162
+ :lazy_swagger => true,
163
+ :netrc => true,
164
+ :netrc_file => File.join(fixture_path, '.netrc'),
165
+ )
115
166
  client.client_id.wont_be_nil
116
167
  client.client_secret.wont_be_nil
117
168
  end
@@ -122,6 +173,9 @@ describe LookerSDK::Client do
122
173
 
123
174
  before do
124
175
  LookerSDK.reset!
176
+ LookerSDK.configure do |c|
177
+ c.lazy_swagger = true
178
+ end
125
179
  end
126
180
 
127
181
  it "sets oauth token with .configure" do
@@ -232,6 +286,40 @@ describe LookerSDK::Client do
232
286
  end
233
287
  end
234
288
 
289
+ [
290
+ [:get, '/api/3.0/users/foo%2Fbar', false],
291
+ [:get, '/api/3.0/users/foo%252Fbar', true],
292
+ [:post, '/api/3.0/users/foo%2Fbar', false],
293
+ [:post, '/api/3.0/users/foo%252Fbar', true],
294
+ [:put, '/api/3.0/users/foo%2Fbar', false],
295
+ [:put, '/api/3.0/users/foo%252Fbar', true],
296
+ [:patch, '/api/3.0/users/foo%2Fbar', false],
297
+ [:patch, '/api/3.0/users/foo%252Fbar', true],
298
+ [:delete, '/api/3.0/users/foo%2Fbar', false],
299
+ [:delete, '/api/3.0/users/foo%252Fbar', true],
300
+ [:head, '/api/3.0/users/foo%2Fbar', false],
301
+ [:head, '/api/3.0/users/foo%252Fbar', true],
302
+ ].each do |method, path, encoded|
303
+ it "handles request path encoding" do
304
+ expected_path = '/api/3.0/users/foo%252Fbar'
305
+
306
+ resp = OpenStruct.new(:data => "hi", :status => 204)
307
+ mock = MiniTest::Mock.new.expect(:call, resp, [method, expected_path, nil, {}])
308
+ Sawyer::Agent.stubs(:new).returns(mock, mock)
309
+
310
+ sdk = LookerSDK::Client.new
311
+ if [:get, :delete, :head].include? method
312
+ args = [method, path, nil, encoded]
313
+ else
314
+ args = [method, path, nil, nil, encoded]
315
+ end
316
+ sdk.without_authentication do
317
+ value = sdk.public_send *args
318
+ assert_equal "hi", value
319
+ end
320
+ mock.verify
321
+ end
322
+ end
235
323
  end
236
324
 
237
325
  describe 'Sawyer date/time parsing patch' do
@@ -36,6 +36,7 @@ class LookerDynamicClientTest < MiniTest::Spec
36
36
  conn.adapter :rack, engine
37
37
  end
38
38
 
39
+ LookerSDK.reset!
39
40
  LookerSDK::Client.new do |config|
40
41
  config.swagger = swagger
41
42
  config.access_token = access_token
@@ -92,41 +93,30 @@ class LookerDynamicClientTest < MiniTest::Spec
92
93
 
93
94
  describe "swagger" do
94
95
 
95
- it "warns when swagger.json can't be loaded" do
96
- sdk = sdk_client(nil, nil)
97
-
98
- obj = OpenStruct.new({status: 200, data: {key: "my data"}})
99
- sdk.stubs(:last_response).returns(obj)
100
- sdk.stubs(:looker_warn).once
101
-
102
- sdk.load_swagger
96
+ it "raises when swagger.json can't be loaded" do
97
+ mock = MiniTest::Mock.new.expect(:call, nil) {raise "no swagger for you"}
98
+ mock.expect(:call, nil) {raise "still no swagger for you"}
99
+ err = assert_raises(RuntimeError) { sdk_client(nil, mock) }
100
+ assert_equal "still no swagger for you", err.message
103
101
  end
104
102
 
105
- it "no warning when swagger.json can be loaded with authentication" do
106
- sdk = sdk_client(nil, nil)
107
-
108
- # first call to try_load_swagger fails, returning nil
109
- # second call succeeds
110
- sdk.stubs(:try_load_swagger).returns(nil, {key: "my data"})
111
- sdk.stubs(:looker_warn).never
112
-
113
- sdk.load_swagger
103
+ it "loads swagger without authentication" do
104
+ resp = [200, {'Content-Type' => 'application/json'}, [default_swagger.to_json]]
105
+ mock = MiniTest::Mock.new.expect(:call, resp, [Hash])
106
+ sdk = sdk_client(nil, mock)
107
+ assert_equal default_swagger, sdk.swagger
114
108
  end
115
109
 
116
- it "no warning when swagger.json can be loaded without authentication" do
117
- sdk = sdk_client(nil, nil)
118
-
119
- # first call to try_load_swagger fails, returning nil
120
- # second call succeeds
121
- sdk.stubs(:try_load_swagger).returns({key: "my data"}, nil)
122
- sdk.stubs(:looker_warn).never
123
-
124
- sdk.load_swagger
110
+ it "loads swagger with authentication" do
111
+ resp = [200, {'Content-Type' => 'application/json'}, [default_swagger.to_json]]
112
+ mock = MiniTest::Mock.new.expect(:call, nil) {raise "login first!"}
113
+ mock.expect(:call, resp, [Hash])
114
+ sdk = sdk_client(nil, mock)
115
+ assert_equal default_swagger, sdk.swagger
125
116
  end
126
117
 
127
118
  it "invalid method name" do
128
- mock = MiniTest::Mock.new.expect(:call, response){|env| confirm_env(env, method, path, body, query, content_type)}
129
- sdk = sdk_client(default_swagger, mock)
119
+ sdk = sdk_client(default_swagger, nil)
130
120
  assert_raises NoMethodError do
131
121
  sdk.this_method_name_doesnt_exist()
132
122
  end
@@ -136,18 +126,44 @@ class LookerDynamicClientTest < MiniTest::Spec
136
126
  end
137
127
  end
138
128
 
129
+ describe "operation maps" do
130
+ it "invoke by string operationId" do
131
+ verify(response, :get, '/api/3.0/user') do |sdk|
132
+ sdk.invoke('me')
133
+ end
134
+ end
135
+
136
+ it "invoke by symbol operationId" do
137
+ verify(response, :get, '/api/3.0/user') do |sdk|
138
+ sdk.invoke(:me)
139
+ end
140
+ end
141
+ end
142
+
139
143
  it "get no params" do
140
144
  verify(response, :get, '/api/3.0/user') do |sdk|
141
145
  sdk.me
142
146
  end
143
147
  end
144
148
 
145
- it "get with parms" do
149
+ it "get with params" do
146
150
  verify(response, :get, '/api/3.0/users/25') do |sdk|
147
151
  sdk.user(25)
148
152
  end
149
153
  end
150
154
 
155
+ it "get with params that need encoding" do
156
+ verify(response, :get, '/api/3.0/users/foo%2Fbar') do |sdk|
157
+ sdk.user("foo/bar")
158
+ end
159
+ end
160
+
161
+ it "get with params already encoded" do
162
+ verify(response, :get, '/api/3.0/users/foo%2Fbar') do |sdk|
163
+ sdk.user("foo%2Fbar")
164
+ end
165
+ end
166
+
151
167
  it "get with query" do
152
168
  verify(response, :get, '/api/3.0/user', '', {bar:"foo"}) do |sdk|
153
169
  sdk.me({bar:'foo'})