xero-ruby 9.2.0 → 9.3.0.pre.alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/xero-ruby/api_client.rb +6 -6
- data/lib/xero-ruby/models/accounting/credit_note.rb +16 -4
- data/lib/xero-ruby/models/accounting/invoice.rb +16 -4
- data/lib/xero-ruby/models/accounting/invoice_address.rb +338 -0
- data/lib/xero-ruby/models/accounting/line_item.rb +75 -4
- data/lib/xero-ruby/models/accounting/tax_breakdown_component.rb +351 -0
- data/lib/xero-ruby/models/payroll_uk/employee_leave_type.rb +14 -4
- data/lib/xero-ruby/version.rb +2 -2
- data/lib/xero-ruby/where.rb +37 -37
- data/lib/xero-ruby.rb +2 -0
- data/spec/api_client_spec.rb +56 -56
- data/spec/api_error_spec.rb +1 -1
- data/spec/configuration_spec.rb +2 -2
- data/spec/helper_methods_spec.rb +3 -3
- data/spec/where_spec.rb +2 -2
- metadata +373 -371
data/spec/api_client_spec.rb
CHANGED
@@ -70,8 +70,8 @@ describe XeroRuby::ApiClient do
|
|
70
70
|
state: "custom-state"
|
71
71
|
}
|
72
72
|
api_client = XeroRuby::ApiClient.new(credentials: creds)
|
73
|
-
altered_state = {'state': 'not-original-state'}
|
74
|
-
expect{api_client.validate_state(altered_state)}.to raise_error(StandardError, 'WARNING: @config.state: custom-state and OAuth callback state: do not match!')
|
73
|
+
altered_state = { 'state': 'not-original-state' }
|
74
|
+
expect { api_client.validate_state(altered_state) }.to raise_error(StandardError, 'WARNING: @config.state: custom-state and OAuth callback state: do not match!')
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
@@ -102,16 +102,16 @@ describe XeroRuby::ApiClient do
|
|
102
102
|
|
103
103
|
describe 'api_client helper functions' do
|
104
104
|
let(:api_client) { XeroRuby::ApiClient.new }
|
105
|
-
let(:token_set) { {'access_token': 'eyx.authorization.data', 'id_token': 'eyx.authentication.data', 'refresh_token': 'REFRESHMENTS'} }
|
105
|
+
let(:token_set) { { 'access_token': 'eyx.authorization.data', 'id_token': 'eyx.authentication.data', 'refresh_token': 'REFRESHMENTS' } }
|
106
106
|
let(:connections) {
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
107
|
+
[{
|
108
|
+
"id" => "xxx-yyy-zzz",
|
109
|
+
"tenantId" => "xxx-yyy-zzz",
|
110
|
+
"tenantType" => "ORGANISATION",
|
111
|
+
"tenantName" => "Demo Company (US)",
|
112
|
+
"createdDateUtc" => "2019-11-01T20:08:03.0766400",
|
113
|
+
"updatedDateUtc" => "2020-04-15T22:37:10.4943410"
|
114
|
+
}]
|
115
115
|
}
|
116
116
|
|
117
117
|
before do
|
@@ -190,7 +190,7 @@ describe XeroRuby::ApiClient do
|
|
190
190
|
}
|
191
191
|
}
|
192
192
|
api_client.accounting_api.get_invoices('active_tenant_id', opts)
|
193
|
-
expect(opts).to eq({:where=>{:invoice_number=>["=", "INV-0060"]}})
|
193
|
+
expect(opts).to eq({ :where => { :invoice_number => ["=", "INV-0060"] } })
|
194
194
|
end
|
195
195
|
end
|
196
196
|
|
@@ -224,10 +224,10 @@ describe XeroRuby::ApiClient do
|
|
224
224
|
end
|
225
225
|
|
226
226
|
describe "#object_to_hash modifies a hash from snake_case to PascalCase" do
|
227
|
-
contact_after = {:Contacts=>[{:Name=>"Bruce Banner", :EmailAddress=>"hulk@avengers.com", :Phones=>[{:PhoneType=>"MOBILE", :PhoneNumber=>"555-1212", :PhoneAreaCode=>"415"}], :PaymentTerms=>{:Bills=>{:Day=>15, :Type=>"OFCURRENTMONTH"}, :Sales=>{:Day=>10, :Type=>"DAYSAFTERBILLMONTH"}}}]}
|
227
|
+
contact_after = { :Contacts => [{ :Name => "Bruce Banner", :EmailAddress => "hulk@avengers.com", :Phones => [{ :PhoneType => "MOBILE", :PhoneNumber => "555-1212", :PhoneAreaCode => "415" }], :PaymentTerms => { :Bills => { :Day => 15, :Type => "OFCURRENTMONTH" }, :Sales => { :Day => 10, :Type => "DAYSAFTERBILLMONTH" } } }] }
|
228
228
|
|
229
229
|
it 'Serializes snake_case object correctly' do
|
230
|
-
contact_before = {:contacts=>[{:name=>"Bruce Banner", :email_address=>"hulk@avengers.com", :phones=>[{:phone_type=>"MOBILE", :phone_number=>"555-1212", :phone_area_code=>"415"}], :payment_terms=>{:bills=>{:day=>15, :type=>"OFCURRENTMONTH"}, :sales=>{:day=>10, :type=>"DAYSAFTERBILLMONTH"}}}]}
|
230
|
+
contact_before = { :contacts => [{ :name => "Bruce Banner", :email_address => "hulk@avengers.com", :phones => [{ :phone_type => "MOBILE", :phone_number => "555-1212", :phone_area_code => "415" }], :payment_terms => { :bills => { :day => 15, :type => "OFCURRENTMONTH" }, :sales => { :day => 10, :type => "DAYSAFTERBILLMONTH" } } }] }
|
231
231
|
api_client = XeroRuby::ApiClient.new
|
232
232
|
expect(api_client.object_to_hash(contact_before)).to eq(contact_after)
|
233
233
|
end
|
@@ -255,26 +255,26 @@ describe XeroRuby::ApiClient do
|
|
255
255
|
|
256
256
|
it 'Serializes json with multiple nested objects correctly' do
|
257
257
|
json_before = {
|
258
|
-
"line_Items":[
|
258
|
+
"line_Items": [
|
259
259
|
{
|
260
|
-
"quantity":1.0,
|
261
|
-
"unit_amount":20,
|
262
|
-
"sub_Items":[
|
260
|
+
"quantity": 1.0,
|
261
|
+
"unit_amount": 20,
|
262
|
+
"sub_Items": [
|
263
263
|
{
|
264
|
-
"quantity":1.0,
|
265
|
-
"unit_amount":20
|
264
|
+
"quantity": 1.0,
|
265
|
+
"unit_amount": 20
|
266
266
|
},
|
267
267
|
{
|
268
|
-
"quantity":1.0,
|
269
|
-
"Unit_amount":20,
|
270
|
-
"Deep_Items":[
|
268
|
+
"quantity": 1.0,
|
269
|
+
"Unit_amount": 20,
|
270
|
+
"Deep_Items": [
|
271
271
|
{
|
272
|
-
"quantity":1.0,
|
273
|
-
"unit_amount":20
|
272
|
+
"quantity": 1.0,
|
273
|
+
"unit_amount": 20
|
274
274
|
},
|
275
275
|
{
|
276
|
-
"quantity":1.0,
|
277
|
-
"unit_Amount":20
|
276
|
+
"quantity": 1.0,
|
277
|
+
"unit_Amount": 20
|
278
278
|
}
|
279
279
|
]
|
280
280
|
}
|
@@ -284,26 +284,26 @@ describe XeroRuby::ApiClient do
|
|
284
284
|
}
|
285
285
|
|
286
286
|
json_after = {
|
287
|
-
"LineItems":[
|
287
|
+
"LineItems": [
|
288
288
|
{
|
289
|
-
"UnitAmount":20,
|
290
|
-
"Quantity":1.0,
|
291
|
-
"SubItems":[
|
289
|
+
"UnitAmount": 20,
|
290
|
+
"Quantity": 1.0,
|
291
|
+
"SubItems": [
|
292
292
|
{
|
293
|
-
"UnitAmount":20,
|
294
|
-
"Quantity":1.0
|
293
|
+
"UnitAmount": 20,
|
294
|
+
"Quantity": 1.0
|
295
295
|
},
|
296
296
|
{
|
297
|
-
"UnitAmount":20,
|
298
|
-
"Quantity":1.0,
|
299
|
-
"DeepItems":[
|
297
|
+
"UnitAmount": 20,
|
298
|
+
"Quantity": 1.0,
|
299
|
+
"DeepItems": [
|
300
300
|
{
|
301
|
-
"UnitAmount":20,
|
302
|
-
"Quantity":1.0
|
301
|
+
"UnitAmount": 20,
|
302
|
+
"Quantity": 1.0
|
303
303
|
},
|
304
304
|
{
|
305
|
-
"UnitAmount":20,
|
306
|
-
"Quantity":1.0
|
305
|
+
"UnitAmount": 20,
|
306
|
+
"Quantity": 1.0
|
307
307
|
}
|
308
308
|
]
|
309
309
|
}
|
@@ -316,8 +316,8 @@ describe XeroRuby::ApiClient do
|
|
316
316
|
end
|
317
317
|
|
318
318
|
it 'Serializes mixed cased keys correctly' do
|
319
|
-
contact_after = { :Contacts=>[{:Name=>"Bruce Banner", :EmailAddress=>"hulk@avengers.com", :Phones=>[{:PhoneType=>"MOBILE", :PhoneNumber=>"555-1212", :PhoneAreaCode=>"415"}], :PaymentTerms=>{:Bills=>{:Day=>15, :Type=>"OFCURRENTMONTH"}, :Sales=>{:Day=>10, :Type=>"DAYSAFTERBILLMONTH"}}}]}
|
320
|
-
contact_before = {:contacts=>[{:name=>"Bruce Banner", :emailAddress=>"hulk@avengers.com", :phones=>[{:phoneType=>"MOBILE", :phone_number=>"555-1212", :phone_areaCode=>"415"}], :Payment_terms=>{:bills=>{:day=>15, :type=>"OFCURRENTMONTH"}, :sales=>{:day=>10, :type=>"DAYSAFTERBILLMONTH"}}}]}
|
319
|
+
contact_after = { :Contacts => [{ :Name => "Bruce Banner", :EmailAddress => "hulk@avengers.com", :Phones => [{ :PhoneType => "MOBILE", :PhoneNumber => "555-1212", :PhoneAreaCode => "415" }], :PaymentTerms => { :Bills => { :Day => 15, :Type => "OFCURRENTMONTH" }, :Sales => { :Day => 10, :Type => "DAYSAFTERBILLMONTH" } } }] }
|
320
|
+
contact_before = { :contacts => [{ :name => "Bruce Banner", :emailAddress => "hulk@avengers.com", :phones => [{ :phoneType => "MOBILE", :phone_number => "555-1212", :phone_areaCode => "415" }], :Payment_terms => { :bills => { :day => 15, :type => "OFCURRENTMONTH" }, :sales => { :day => 10, :type => "DAYSAFTERBILLMONTH" } } }] }
|
321
321
|
api_client = XeroRuby::ApiClient.new
|
322
322
|
expect(api_client.object_to_hash(contact_before)).to eq(contact_after)
|
323
323
|
end
|
@@ -418,9 +418,9 @@ describe XeroRuby::ApiClient do
|
|
418
418
|
|
419
419
|
describe 'token helper methods' do
|
420
420
|
let(:api_client) { XeroRuby::ApiClient.new }
|
421
|
-
let(:id_token){'eyJhbGciOiJSUzI1NiIsImtpZCI6IjFDQUY4RTY2NzcyRDZEQzAyOEQ2NzI2RkQwMjYxNTgxNTcwRUZDMTkiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJISy1PWm5jdGJjQW8xbkp2MENZVmdWY09fQmsifQ.eyJuYmYiOjE2MTk3MTQwNDMsImV4cCI6MTYxOTcxNDM0MywiaXNzIjoiaHR0cHM6Ly9pZGVudGl0eS54ZXJvLmNvbSIsImF1ZCI6IkFEQjVBNzdEQTZCNjRFOTI4RDg0MDkwOTlBMzlDQTdCIiwiaWF0IjoxNjE5NzE0MDQzLCJhdF9oYXNoIjoiMXJNamVvUTJiOUxUNFU0ZlBXbEZJZyIsInNpZCI6ImY0YTY4ZDc0ZmM3OTQzMjc4YTgzMTg0NGM5ZWRmNzFiIiwic3ViIjoiZGI0ZjBmMzdiNTg1NTMwZTkxZjNiOWNiYjUwMzQwZTgiLCJhdXRoX3RpbWUiOjE2MTk3MTM5ODcsInhlcm9fdXNlcmlkIjoiZmFhODNlYzktZjZhNy00ODlmLTg5MTEtZTNmY2UwM2ExMTg2IiwiZ2xvYmFsX3Nlc3Npb25faWQiOiJmNGE2OGQ3NGZjNzk0MzI3OGE4MzE4NDRjOWVkZjcxYiIsInByZWZlcnJlZF91c2VybmFtZSI6ImNocmlzLmtuaWdodEB4ZXJvLmNvbSIsImVtYWlsIjoiY2hyaXMua25pZ2h0QHhlcm8uY29tIiwiZ2l2ZW5fbmFtZSI6IkNocmlzdG9waGVyIiwiZmFtaWx5X25hbWUiOiJLbmlnaHQifQ.hF04tCE1Qd-al355fQyCjWqTVWKnguor4RD1sC7rKH7zV3r3_nGwnGLMm2A96fov06fig0zusTX8onev0qFLZy-jlEXDp1f19LHhT15sBy0KH6dB0lGMrM14BnDuEP4NUGeP06nAPhQHHLw2oCc9hzYXorRVOSFDw43jgAC0vxRgDvJwgKgv6TDVEmpvwP0S4R7A0VbnFemHP_HY8gLHd7RpN7rrYmpJC4cofztdptDNLTF8Qup8qVlFdQgpJPQEQ95N1m6W-unvrh_dlO6AVMjXBjC1BJ10IGzoCCr8DSVyz2UMPnUT3oIYFVTlDc2K-ZJYkW86pigITMCdvR1hKg'}
|
422
|
-
let(:access_token){'eyJhbGciOiJSUzI1NiIsImtpZCI6IjFDQUY4RTY2NzcyRDZEQzAyOEQ2NzI2RkQwMjYxNTgxNTcwRUZDMTkiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJISy1PWm5jdGJjQW8xbkp2MENZVmdWY09fQmsifQ.eyJuYmYiOjE2MTk3MTQwNDMsImV4cCI6MTYxOTcxNTg0MywiaXNzIjoiaHR0cHM6Ly9pZGVudGl0eS54ZXJvLmNvbSIsImF1ZCI6Imh0dHBzOi8vaWRlbnRpdHkueGVyby5jb20vcmVzb3VyY2VzIiwiY2xpZW50X2lkIjoiQURCNUE3N0RBNkI2NEU5MjhEODQwOTA5OUEzOUNBN0IiLCJzdWIiOiJkYjRmMGYzN2I1ODU1MzBlOTFmM2I5Y2JiNTAzNDBlOCIsImF1dGhfdGltZSI6MTYxOTcxMzk4NywieGVyb191c2VyaWQiOiJmYWE4M2VjOS1mNmE3LTQ4OWYtODkxMS1lM2ZjZTAzYTExODYiLCJnbG9iYWxfc2Vzc2lvbl9pZCI6ImY0YTY4ZDc0ZmM3OTQzMjc4YTgzMTg0NGM5ZWRmNzFiIiwianRpIjoiZmFmNGNkYzQ5MjM0YzhmZDE0OTA0ZjRlOWEyMWY4YmYiLCJhdXRoZW50aWNhdGlvbl9ldmVudF9pZCI6IjI0MmRjNWIyLTIwZTMtNGFjNS05NjU3LWExMGI5ZTI0ZGI1NSIsInNjb3BlIjpbImVtYWlsIiwicHJvZmlsZSIsIm9wZW5pZCIsImFjY291bnRpbmcucmVwb3J0cy5yZWFkIiwiZmlsZXMiLCJwYXlyb2xsLmVtcGxveWVlcyIsInBheXJvbGwucGF5cnVucyIsInBheXJvbGwucGF5c2xpcCIsInBheXJvbGwudGltZXNoZWV0cyIsInByb2plY3RzLnJlYWQiLCJwcm9qZWN0cyIsImFjY291bnRpbmcuc2V0dGluZ3MiLCJhY2NvdW50aW5nLmF0dGFjaG1lbnRzIiwiYWNjb3VudGluZy50cmFuc2FjdGlvbnMiLCJhY2NvdW50aW5nLmpvdXJuYWxzLnJlYWQiLCJhc3NldHMucmVhZCIsImFzc2V0cyIsImFjY291bnRpbmcuY29udGFjdHMiLCJwYXlyb2xsLnNldHRpbmdzIiwib2ZmbGluZV9hY2Nlc3MiXX0.vNV-YsgHFWKFBmyYdhg7tztdsPc9ykObadQcGFoFXJ8qCBerR3h7XXKzWAP3KzFzhOCcIpWU8Q081zuYBNxahPeeLRLUuc_3MwgwE72esE5vGuxa2_-_QidtNvMCgsX-ie_LcX7FE_KI-sXB_EZ8fDk6WAMIPC9d3GejgeuH5Uh6rZkhowN2jm5pZjEOEy_QE7PScBO0XEbiZNUsarvBUSdKuSTvVVLHzHzs0bHMRfgKEkqZySNtZlac-oyaL3PVba1S7A_vbRcNWpYR_VrKGf2g9LHSI3EA5j3Beto4pKukU-bk6rLBGul37u4tM17U-wyJLsFmt6ZC_SEJKgmluQ'}
|
423
|
-
let(:tkn_set) {{'id_token': id_token, 'access_token': access_token, 'refresh_token': 'abc123xyz'}}
|
421
|
+
let(:id_token) { 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjFDQUY4RTY2NzcyRDZEQzAyOEQ2NzI2RkQwMjYxNTgxNTcwRUZDMTkiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJISy1PWm5jdGJjQW8xbkp2MENZVmdWY09fQmsifQ.eyJuYmYiOjE2MTk3MTQwNDMsImV4cCI6MTYxOTcxNDM0MywiaXNzIjoiaHR0cHM6Ly9pZGVudGl0eS54ZXJvLmNvbSIsImF1ZCI6IkFEQjVBNzdEQTZCNjRFOTI4RDg0MDkwOTlBMzlDQTdCIiwiaWF0IjoxNjE5NzE0MDQzLCJhdF9oYXNoIjoiMXJNamVvUTJiOUxUNFU0ZlBXbEZJZyIsInNpZCI6ImY0YTY4ZDc0ZmM3OTQzMjc4YTgzMTg0NGM5ZWRmNzFiIiwic3ViIjoiZGI0ZjBmMzdiNTg1NTMwZTkxZjNiOWNiYjUwMzQwZTgiLCJhdXRoX3RpbWUiOjE2MTk3MTM5ODcsInhlcm9fdXNlcmlkIjoiZmFhODNlYzktZjZhNy00ODlmLTg5MTEtZTNmY2UwM2ExMTg2IiwiZ2xvYmFsX3Nlc3Npb25faWQiOiJmNGE2OGQ3NGZjNzk0MzI3OGE4MzE4NDRjOWVkZjcxYiIsInByZWZlcnJlZF91c2VybmFtZSI6ImNocmlzLmtuaWdodEB4ZXJvLmNvbSIsImVtYWlsIjoiY2hyaXMua25pZ2h0QHhlcm8uY29tIiwiZ2l2ZW5fbmFtZSI6IkNocmlzdG9waGVyIiwiZmFtaWx5X25hbWUiOiJLbmlnaHQifQ.hF04tCE1Qd-al355fQyCjWqTVWKnguor4RD1sC7rKH7zV3r3_nGwnGLMm2A96fov06fig0zusTX8onev0qFLZy-jlEXDp1f19LHhT15sBy0KH6dB0lGMrM14BnDuEP4NUGeP06nAPhQHHLw2oCc9hzYXorRVOSFDw43jgAC0vxRgDvJwgKgv6TDVEmpvwP0S4R7A0VbnFemHP_HY8gLHd7RpN7rrYmpJC4cofztdptDNLTF8Qup8qVlFdQgpJPQEQ95N1m6W-unvrh_dlO6AVMjXBjC1BJ10IGzoCCr8DSVyz2UMPnUT3oIYFVTlDc2K-ZJYkW86pigITMCdvR1hKg' }
|
422
|
+
let(:access_token) { 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjFDQUY4RTY2NzcyRDZEQzAyOEQ2NzI2RkQwMjYxNTgxNTcwRUZDMTkiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJISy1PWm5jdGJjQW8xbkp2MENZVmdWY09fQmsifQ.eyJuYmYiOjE2MTk3MTQwNDMsImV4cCI6MTYxOTcxNTg0MywiaXNzIjoiaHR0cHM6Ly9pZGVudGl0eS54ZXJvLmNvbSIsImF1ZCI6Imh0dHBzOi8vaWRlbnRpdHkueGVyby5jb20vcmVzb3VyY2VzIiwiY2xpZW50X2lkIjoiQURCNUE3N0RBNkI2NEU5MjhEODQwOTA5OUEzOUNBN0IiLCJzdWIiOiJkYjRmMGYzN2I1ODU1MzBlOTFmM2I5Y2JiNTAzNDBlOCIsImF1dGhfdGltZSI6MTYxOTcxMzk4NywieGVyb191c2VyaWQiOiJmYWE4M2VjOS1mNmE3LTQ4OWYtODkxMS1lM2ZjZTAzYTExODYiLCJnbG9iYWxfc2Vzc2lvbl9pZCI6ImY0YTY4ZDc0ZmM3OTQzMjc4YTgzMTg0NGM5ZWRmNzFiIiwianRpIjoiZmFmNGNkYzQ5MjM0YzhmZDE0OTA0ZjRlOWEyMWY4YmYiLCJhdXRoZW50aWNhdGlvbl9ldmVudF9pZCI6IjI0MmRjNWIyLTIwZTMtNGFjNS05NjU3LWExMGI5ZTI0ZGI1NSIsInNjb3BlIjpbImVtYWlsIiwicHJvZmlsZSIsIm9wZW5pZCIsImFjY291bnRpbmcucmVwb3J0cy5yZWFkIiwiZmlsZXMiLCJwYXlyb2xsLmVtcGxveWVlcyIsInBheXJvbGwucGF5cnVucyIsInBheXJvbGwucGF5c2xpcCIsInBheXJvbGwudGltZXNoZWV0cyIsInByb2plY3RzLnJlYWQiLCJwcm9qZWN0cyIsImFjY291bnRpbmcuc2V0dGluZ3MiLCJhY2NvdW50aW5nLmF0dGFjaG1lbnRzIiwiYWNjb3VudGluZy50cmFuc2FjdGlvbnMiLCJhY2NvdW50aW5nLmpvdXJuYWxzLnJlYWQiLCJhc3NldHMucmVhZCIsImFzc2V0cyIsImFjY291bnRpbmcuY29udGFjdHMiLCJwYXlyb2xsLnNldHRpbmdzIiwib2ZmbGluZV9hY2Nlc3MiXX0.vNV-YsgHFWKFBmyYdhg7tztdsPc9ykObadQcGFoFXJ8qCBerR3h7XXKzWAP3KzFzhOCcIpWU8Q081zuYBNxahPeeLRLUuc_3MwgwE72esE5vGuxa2_-_QidtNvMCgsX-ie_LcX7FE_KI-sXB_EZ8fDk6WAMIPC9d3GejgeuH5Uh6rZkhowN2jm5pZjEOEy_QE7PScBO0XEbiZNUsarvBUSdKuSTvVVLHzHzs0bHMRfgKEkqZySNtZlac-oyaL3PVba1S7A_vbRcNWpYR_VrKGf2g9LHSI3EA5j3Beto4pKukU-bk6rLBGul37u4tM17U-wyJLsFmt6ZC_SEJKgmluQ' }
|
423
|
+
let(:tkn_set) { { 'id_token': id_token, 'access_token': access_token, 'refresh_token': 'abc123xyz' } }
|
424
424
|
|
425
425
|
before do
|
426
426
|
api_client.set_token_set(tkn_set)
|
@@ -431,17 +431,17 @@ describe XeroRuby::ApiClient do
|
|
431
431
|
end
|
432
432
|
|
433
433
|
it '#token_expired? for a just expired token' do
|
434
|
-
allow(api_client).to receive(:decoded_access_token).and_return({"exp"=>Time.now.to_i})
|
434
|
+
allow(api_client).to receive(:decoded_access_token).and_return({ "exp" => Time.now.to_i })
|
435
435
|
expect(api_client.token_expired?).to eq(true)
|
436
436
|
end
|
437
437
|
|
438
438
|
it '#token_expired? for a non-expired token' do
|
439
|
-
allow(api_client).to receive(:decoded_access_token).and_return({"exp"=>(Time.now + 30.minutes).to_i})
|
439
|
+
allow(api_client).to receive(:decoded_access_token).and_return({ "exp" => (Time.now + 30.minutes).to_i })
|
440
440
|
expect(api_client.token_expired?).to eq(false)
|
441
441
|
end
|
442
442
|
|
443
443
|
it '#token_expired? for an almost expired token' do
|
444
|
-
allow(api_client).to receive(:decoded_access_token).and_return({"exp"=>(Time.now + 30.seconds).to_i})
|
444
|
+
allow(api_client).to receive(:decoded_access_token).and_return({ "exp" => (Time.now + 30.seconds).to_i })
|
445
445
|
expect(api_client.token_expired?).to eq(false)
|
446
446
|
end
|
447
447
|
|
@@ -463,29 +463,29 @@ describe XeroRuby::ApiClient do
|
|
463
463
|
|
464
464
|
it 'decoding an invalid access_token' do
|
465
465
|
api_client.set_access_token("#{access_token}.NotAValidJWTstring")
|
466
|
-
expect{api_client.decoded_access_token}.to raise_error(JSON::JWT::InvalidFormat)
|
466
|
+
expect { api_client.decoded_access_token }.to raise_error(JSON::JWT::InvalidFormat)
|
467
467
|
end
|
468
468
|
|
469
469
|
it 'decoding an invalid id_token' do
|
470
470
|
api_client.set_id_token("#{id_token}.NotAValidJWTstring")
|
471
|
-
expect{api_client.decoded_id_token}.to raise_error(JSON::JWT::InvalidFormat)
|
471
|
+
expect { api_client.decoded_id_token }.to raise_error(JSON::JWT::InvalidFormat)
|
472
472
|
end
|
473
473
|
end
|
474
474
|
|
475
475
|
|
476
476
|
describe 'thread safety in the XeroClient' do
|
477
|
-
let(:creds) {{
|
477
|
+
let(:creds) { {
|
478
478
|
client_id: 'abc',
|
479
479
|
client_secret: '123',
|
480
480
|
redirect_uri: 'https://mydomain.com/callback',
|
481
481
|
scopes: 'openid profile email accounting.transactions'
|
482
482
|
}}
|
483
|
-
let(:api_client_1) {XeroRuby::ApiClient.new(credentials: creds)}
|
484
|
-
let(:api_client_2) {XeroRuby::ApiClient.new(credentials: creds)}
|
485
|
-
let(:api_client_3) {XeroRuby::ApiClient.new(credentials: creds)}
|
483
|
+
let(:api_client_1) { XeroRuby::ApiClient.new(credentials: creds) }
|
484
|
+
let(:api_client_2) { XeroRuby::ApiClient.new(credentials: creds) }
|
485
|
+
let(:api_client_3) { XeroRuby::ApiClient.new(credentials: creds) }
|
486
486
|
|
487
|
-
let(:tkn_set_1){{'id_token': "abc.123.1", 'access_token': "xxx.yyy.zzz.111"}}
|
488
|
-
let(:tkn_set_2){{'id_token': "efg.456.2", 'access_token': "xxx.yyy.zzz.222"}}
|
487
|
+
let(:tkn_set_1) { { 'id_token': "abc.123.1", 'access_token': "xxx.yyy.zzz.111" } }
|
488
|
+
let(:tkn_set_2) { { 'id_token': "efg.456.2", 'access_token': "xxx.yyy.zzz.222" } }
|
489
489
|
|
490
490
|
describe 'when configuration is changed, other instantiations of the client are not affected' do
|
491
491
|
it 'applies to #set_access_token' do
|
data/spec/api_error_spec.rb
CHANGED
@@ -29,7 +29,7 @@ describe XeroRuby::ApiError do
|
|
29
29
|
}
|
30
30
|
api_error = XeroRuby::ApiError.new(
|
31
31
|
:code => 400,
|
32
|
-
:response_headers => {"content-type"=>"application/json; charset=utf-8", "content-length"=>"1700", "server"=>"nginx", "xero-correlation-id"=>"31e2c94e-3ae4-402a-a374-b7a94ef9445c", "x-appminlimit-remaining"=>"9988", "x-minlimit-remaining"=>"58", "x-daylimit-remaining"=>"4998", "expires"=>"Fri, 18 Dec 2020 17:56:29 GMT", "cache-control"=>"max-age=0, no-cache, no-store", "pragma"=>"no-cache", "date"=>"Fri, 18 Dec 2020 17:56:29 GMT", "connection"=>"close", "x-client-tls-ver"=>"tls1.3"},
|
32
|
+
:response_headers => { "content-type" => "application/json; charset=utf-8", "content-length" => "1700", "server" => "nginx", "xero-correlation-id" => "31e2c94e-3ae4-402a-a374-b7a94ef9445c", "x-appminlimit-remaining" => "9988", "x-minlimit-remaining" => "58", "x-daylimit-remaining" => "4998", "expires" => "Fri, 18 Dec 2020 17:56:29 GMT", "cache-control" => "max-age=0, no-cache, no-store", "pragma" => "no-cache", "date" => "Fri, 18 Dec 2020 17:56:29 GMT", "connection" => "close", "x-client-tls-ver" => "tls1.3" },
|
33
33
|
:response_body => error_body
|
34
34
|
)
|
35
35
|
expect(api_error.message).to include("The TaxType code NONE does not exist or cannot be used for this type of transaction")
|
data/spec/configuration_spec.rb
CHANGED
@@ -25,12 +25,12 @@ describe XeroRuby::Configuration do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'should allow you to overwrite the default configuration options' do
|
28
|
-
client = XeroRuby::ApiClient.new(credentials: {}, config: {login_url: 'ngrok.login.xero.test'})
|
28
|
+
client = XeroRuby::ApiClient.new(credentials: {}, config: { login_url: 'ngrok.login.xero.test' })
|
29
29
|
expect(client.config.login_url).to eq('ngrok.login.xero.test')
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'should allow you to set the timeout config option' do
|
33
|
-
client = XeroRuby::ApiClient.new(credentials: {}, config: {timeout: 30})
|
33
|
+
client = XeroRuby::ApiClient.new(credentials: {}, config: { timeout: 30 })
|
34
34
|
expect(client.config.timeout).to eq(30)
|
35
35
|
end
|
36
36
|
end
|
data/spec/helper_methods_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe 'shared helper methods' do
|
4
4
|
|
5
5
|
describe '#parse_date' do
|
6
|
-
let(:model_instance) {XeroRuby::Accounting::Account.new}
|
6
|
+
let(:model_instance) { XeroRuby::Accounting::Account.new }
|
7
7
|
|
8
8
|
it 'can parse from ms date with backslash' do
|
9
9
|
datestring = "\/Date(1519851689297+0000)\/"
|
@@ -85,11 +85,11 @@ describe 'shared helper methods' do
|
|
85
85
|
|
86
86
|
describe '#attributes' do
|
87
87
|
it 'can serialize invoice attributes into a snake_case hash' do
|
88
|
-
expect(invoice.to_attributes).to eq({currency_code: "USD", has_attachments: false, has_errors: false, invoice_number: "abc-123", total_discount: 100, type: "ACCPAY"})
|
88
|
+
expect(invoice.to_attributes).to eq({ currency_code: "USD", has_attachments: false, has_errors: false, invoice_number: "abc-123", total_discount: 100, type: "ACCPAY" })
|
89
89
|
end
|
90
90
|
|
91
91
|
it 'can serialize contact attributes into a snake_case hash' do
|
92
|
-
expect(contact.to_attributes).to eq({account_number: "abc-123", contact_status: "ACTIVE", email_address: "email@gmail.com", first_name: 'Contact', has_attachments: false, has_validation_errors: false, last_name: "Name", name: "Contact Name"})
|
92
|
+
expect(contact.to_attributes).to eq({ account_number: "abc-123", contact_status: "ACTIVE", email_address: "email@gmail.com", first_name: 'Contact', has_attachments: false, has_validation_errors: false, last_name: "Name", name: "Contact Name" })
|
93
93
|
end
|
94
94
|
|
95
95
|
it 'can serialize nested attributes into a snake_case hash' do
|
data/spec/where_spec.rb
CHANGED
@@ -69,13 +69,13 @@ describe XeroRuby::Where do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
describe "operators starting with a dot" do
|
72
|
-
let(:opts) { {a: '.Test("Hello")' } }
|
72
|
+
let(:opts) { { a: '.Test("Hello")' } }
|
73
73
|
|
74
74
|
it { is_expected.to eq %{A.Test("Hello")} }
|
75
75
|
end
|
76
76
|
|
77
77
|
describe "unmatched operators" do
|
78
|
-
let(:opts) { {a: 'something unusual'} }
|
78
|
+
let(:opts) { { a: 'something unusual' } }
|
79
79
|
|
80
80
|
it { is_expected.to eq %{A something unusual} }
|
81
81
|
end
|