taxjar-ruby 2.4.1 → 3.0.1

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.
@@ -41,7 +41,7 @@ describe Taxjar::API::Request do
41
41
  it 'should return headers' do
42
42
  expect(subject).to respond_to(:headers)
43
43
  expect(subject.headers).to be_instance_of(Hash)
44
- expect(subject.headers[:user_agent]).to match('TaxjarRubyGem')
44
+ expect(subject.headers[:user_agent]).to match(/^TaxJar\/Ruby \(.+\) taxjar-ruby\/\d+\.\d+\.\d+$/)
45
45
  expect(subject.headers[:authorization]).to eq('Bearer AK')
46
46
  end
47
47
 
@@ -52,7 +52,7 @@ describe Taxjar::API::Request do
52
52
  subject = Taxjar::API::Request.new(client, :get, '/api_path', 'object')
53
53
  expect(subject).to respond_to(:headers)
54
54
  expect(subject.headers).to be_instance_of(Hash)
55
- expect(subject.headers[:user_agent]).to match('TaxjarRubyGem')
55
+ expect(subject.headers[:user_agent]).to match(/^TaxJar\/Ruby \(.+\) taxjar-ruby\/\d+\.\d+\.\d+$/)
56
56
  expect(subject.headers[:authorization]).to eq('Bearer AK')
57
57
  expect(subject.headers['X-TJ-Expected-Response']).to eq(422)
58
58
  end
@@ -119,12 +119,25 @@ describe Taxjar::API::Request do
119
119
  Taxjar::API::Request.new(client, :get, '/api_path', 'object')
120
120
  end
121
121
 
122
+ context 'with a proxy' do
123
+ let(:client){ Taxjar::Client.new(api_key: 'AK', http_proxy: ["127.0.0.1", 8080])}
124
+ it "runs through the proxy" do
125
+ stub_request(:get, "https://api.taxjar.com/api_path").
126
+ with(:headers => {'Authorization'=>'Bearer AK', 'Connection'=>'close',
127
+ 'Host'=>'api.taxjar.com'}).
128
+ to_return(:status => 200, :body => '{"object": {"id": "3"}}',
129
+ :headers => {content_type: 'application/json; charset=UTF-8'})
130
+
131
+ expect(subject.perform).to eq({id: '3'})
132
+ expect(subject.send(:build_http_client).default_options.proxy).to eq({proxy_address: "127.0.0.1", proxy_port: 8080})
133
+ end
134
+ end
135
+
122
136
  context 'with get' do
123
137
  it 'should return a body if no errors' do
124
138
  stub_request(:get, "https://api.taxjar.com/api_path").
125
139
  with(:headers => {'Authorization'=>'Bearer AK', 'Connection'=>'close',
126
- 'Host'=>'api.taxjar.com',
127
- 'User-Agent'=>"TaxjarRubyGem/#{Taxjar::Version.to_s}"}).
140
+ 'Host'=>'api.taxjar.com'}).
128
141
  to_return(:status => 200, :body => '{"object": {"id": "3"}}',
129
142
  :headers => {content_type: 'application/json; charset=UTF-8'})
130
143
 
@@ -144,8 +157,7 @@ describe Taxjar::API::Request do
144
157
  with(:body => "{\"city\":\"New York\"}",
145
158
  :headers => {'Authorization'=>'Bearer AK', 'Connection'=>'close',
146
159
  'Content-Type'=>'application/json; charset=UTF-8',
147
- 'Host'=>'api.taxjar.com',
148
- 'User-Agent'=>"TaxjarRubyGem/#{Taxjar::Version.to_s}"}).
160
+ 'Host'=>'api.taxjar.com'}).
149
161
  to_return(:status => 200, :body => '{"object": {"id": "3"}}',
150
162
  :headers => {content_type: 'application/json; charset=UTF-8'})
151
163
 
@@ -153,13 +165,22 @@ describe Taxjar::API::Request do
153
165
  end
154
166
  end
155
167
 
168
+ it 'handles unexpected Content-Type responses' do
169
+ stub_request(:get, "https://api.taxjar.com/api_path").
170
+ with(:headers => {'Authorization'=>'Bearer AK', 'Connection'=>'close',
171
+ 'Host'=>'api.taxjar.com'}).
172
+ to_return(:status => 200, :body => 'Something unexpected',
173
+ :headers => {content_type: 'text/html; charset=UTF-8'})
174
+
175
+ expect{subject.perform}.to raise_error(Taxjar::Error::ServerError)
176
+ end
177
+
156
178
  Taxjar::Error::ERRORS.each do |status, exception|
157
179
  context "when HTTP status is #{status}" do
158
180
  it "raises #{exception}" do
159
181
  stub_request(:get, "https://api.taxjar.com/api_path").
160
182
  with(:headers => {'Authorization'=>'Bearer AK', 'Connection'=>'close',
161
- 'Host'=>'api.taxjar.com',
162
- 'User-Agent'=>"TaxjarRubyGem/#{Taxjar::Version.to_s}"}).
183
+ 'Host'=>'api.taxjar.com'}).
163
184
  to_return(:status => status,
164
185
  :body => '{"error": "Not Acceptable",
165
186
  "detail": "error explanation",
@@ -170,5 +191,41 @@ describe Taxjar::API::Request do
170
191
  end
171
192
  end
172
193
  end
194
+
195
+ context "when HTTP status is 502" do
196
+ it "raises Taxjar::Error" do
197
+ stub_request(:get, "https://api.taxjar.com/api_path").
198
+ with(:headers => {'Authorization'=>'Bearer AK', 'Connection'=>'close',
199
+ 'Host'=>'api.taxjar.com'}).
200
+ to_return(:status => 502,
201
+ :body => '{}',
202
+ :headers => {content_type: 'application/json; charset=UTF-8'})
203
+
204
+ expect{subject.perform}.to raise_error(
205
+ an_instance_of(Taxjar::Error).and having_attributes({
206
+ "message" => "Bad Gateway",
207
+ "code" => 502
208
+ })
209
+ )
210
+ end
211
+ end
212
+
213
+ context "when HTTP status is 5xx" do
214
+ it "raises Taxjar::Error" do
215
+ stub_request(:get, "https://api.taxjar.com/api_path").
216
+ with(:headers => {'Authorization'=>'Bearer AK', 'Connection'=>'close',
217
+ 'Host'=>'api.taxjar.com'}).
218
+ to_return(:status => 509,
219
+ :body => '{}',
220
+ :headers => {content_type: 'application/json; charset=UTF-8'})
221
+
222
+ expect{subject.perform}.to raise_error(
223
+ an_instance_of(Taxjar::Error).and having_attributes({
224
+ "message" => "Unknown Error",
225
+ "code" => 509
226
+ })
227
+ )
228
+ end
229
+ end
173
230
  end
174
231
  end
@@ -1,7 +1,7 @@
1
1
  require 'helper'
2
2
 
3
3
  describe Taxjar::Client do
4
- describe '#api_key?' do
4
+ describe '#api_key?' do
5
5
  it 'returns true if api_key is present' do
6
6
  client = Taxjar::Client.new(api_key: 'AK')
7
7
  expect(client.api_key?).to be true
@@ -25,14 +25,14 @@ describe Taxjar::Client do
25
25
  client.set_api_config('api_url', 'https://api.sandbox.taxjar.com')
26
26
  expect(client.api_url).to eq('https://api.sandbox.taxjar.com')
27
27
  end
28
-
28
+
29
29
  it 'sets new custom headers' do
30
30
  client = Taxjar::Client.new(api_key: 'AK')
31
31
  client.set_api_config('headers', { 'X-TJ-Expected-Response' => 422 })
32
32
  expect(client.headers).to eq({ 'X-TJ-Expected-Response' => 422 })
33
33
  end
34
34
  end
35
-
35
+
36
36
  describe "#get_api_config" do
37
37
  it 'gets a config value' do
38
38
  client = Taxjar::Client.new(api_key: 'AK')
@@ -44,7 +44,7 @@ describe Taxjar::Client do
44
44
  describe '#user_agent' do
45
45
  it 'returns string with version' do
46
46
  client = Taxjar::Client.new(api_key: 'AK')
47
- expect(client.user_agent).to eq("TaxjarRubyGem/#{Taxjar::Version}")
47
+ expect(client.user_agent).to match(/^TaxJar\/Ruby \(.+\) taxjar-ruby\/\d+\.\d+\.\d+$/)
48
48
  end
49
49
  end
50
50
  end
data/taxjar-ruby.gemspec CHANGED
@@ -18,13 +18,13 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.required_ruby_version = '>= 2.0'
21
+ spec.required_ruby_version = '>= 2.3'
22
22
 
23
23
  spec.add_dependency 'addressable', '~> 2.3'
24
- spec.add_dependency 'http', '>= 1.0', '< 5.0'
24
+ spec.add_dependency 'http', '>= 4.3', '< 5.0'
25
25
  spec.add_dependency 'memoizable', '~> 0.4.0'
26
26
  spec.add_dependency 'model_attribute', '~> 3.2'
27
- spec.add_development_dependency "bundler", "~> 1.7"
27
+ spec.add_development_dependency "bundler", ">= 1.7", "< 3.0"
28
28
  spec.add_development_dependency "rake", "~> 12.0"
29
29
 
30
30
  if spec.respond_to?(:metadata)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taxjar-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.1
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - TaxJar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-04 00:00:00.000000000 Z
11
+ date: 2021-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.0'
33
+ version: '4.3'
34
34
  - - "<"
35
35
  - !ruby/object:Gem::Version
36
36
  version: '5.0'
@@ -40,7 +40,7 @@ dependencies:
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: '1.0'
43
+ version: '4.3'
44
44
  - - "<"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '5.0'
@@ -76,16 +76,22 @@ dependencies:
76
76
  name: bundler
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - "~>"
79
+ - - ">="
80
80
  - !ruby/object:Gem::Version
81
81
  version: '1.7'
82
+ - - "<"
83
+ - !ruby/object:Gem::Version
84
+ version: '3.0'
82
85
  type: :development
83
86
  prerelease: false
84
87
  version_requirements: !ruby/object:Gem::Requirement
85
88
  requirements:
86
- - - "~>"
89
+ - - ">="
87
90
  - !ruby/object:Gem::Version
88
91
  version: '1.7'
92
+ - - "<"
93
+ - !ruby/object:Gem::Version
94
+ version: '3.0'
89
95
  - !ruby/object:Gem::Dependency
90
96
  name: rake
91
97
  requirement: !ruby/object:Gem::Requirement
@@ -189,7 +195,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
189
195
  requirements:
190
196
  - - ">="
191
197
  - !ruby/object:Gem::Version
192
- version: '2.0'
198
+ version: '2.3'
193
199
  required_rubygems_version: !ruby/object:Gem::Requirement
194
200
  requirements:
195
201
  - - ">="
@@ -197,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
197
203
  version: '0'
198
204
  requirements: []
199
205
  rubyforge_project:
200
- rubygems_version: 2.6.8
206
+ rubygems_version: 2.7.6.2
201
207
  signing_key:
202
208
  specification_version: 4
203
209
  summary: Ruby wrapper for Taxjar API