my_john_deere_api 2.5.0 → 3.0.0

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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/lib/my_john_deere_api.rb +1 -1
  3. data/lib/my_john_deere_api/authorize.rb +36 -27
  4. data/lib/my_john_deere_api/client.rb +38 -29
  5. data/lib/my_john_deere_api/consumer.rb +46 -35
  6. data/lib/my_john_deere_api/helpers/case_conversion.rb +5 -2
  7. data/lib/my_john_deere_api/helpers/uri_helpers.rb +1 -1
  8. data/lib/my_john_deere_api/model/contribution_definition.rb +1 -1
  9. data/lib/my_john_deere_api/net_http_retry/decorator.rb +10 -11
  10. data/lib/my_john_deere_api/net_http_retry/invalid_response_error.rb +2 -2
  11. data/lib/my_john_deere_api/request/collection/asset_locations.rb +1 -1
  12. data/lib/my_john_deere_api/request/collection/assets.rb +1 -1
  13. data/lib/my_john_deere_api/request/collection/base.rb +2 -14
  14. data/lib/my_john_deere_api/request/collection/contribution_definitions.rb +1 -1
  15. data/lib/my_john_deere_api/request/collection/contribution_products.rb +1 -1
  16. data/lib/my_john_deere_api/request/collection/fields.rb +1 -1
  17. data/lib/my_john_deere_api/request/collection/flags.rb +1 -1
  18. data/lib/my_john_deere_api/request/collection/organizations.rb +1 -1
  19. data/lib/my_john_deere_api/request/create/asset.rb +8 -11
  20. data/lib/my_john_deere_api/request/create/asset_location.rb +24 -25
  21. data/lib/my_john_deere_api/request/create/base.rb +2 -20
  22. data/lib/my_john_deere_api/request/individual/asset.rb +2 -2
  23. data/lib/my_john_deere_api/request/individual/base.rb +6 -24
  24. data/lib/my_john_deere_api/request/individual/contribution_definition.rb +1 -1
  25. data/lib/my_john_deere_api/request/individual/contribution_product.rb +1 -1
  26. data/lib/my_john_deere_api/request/individual/field.rb +1 -1
  27. data/lib/my_john_deere_api/request/individual/organization.rb +1 -1
  28. data/lib/my_john_deere_api/request/update/asset.rb +2 -2
  29. data/lib/my_john_deere_api/request/update/base.rb +1 -19
  30. data/lib/my_john_deere_api/version.rb +1 -1
  31. data/test/lib/my_john_deere_api/authorize_test.rb +37 -25
  32. data/test/lib/my_john_deere_api/client_test.rb +22 -56
  33. data/test/lib/my_john_deere_api/consumer_test.rb +16 -28
  34. data/test/lib/my_john_deere_api/helpers/uri_helpers_test.rb +0 -10
  35. data/test/lib/my_john_deere_api/model/asset_location_test.rb +0 -4
  36. data/test/lib/my_john_deere_api/model/asset_test.rb +9 -8
  37. data/test/lib/my_john_deere_api/model/base_test.rb +4 -8
  38. data/test/lib/my_john_deere_api/model/contribution_definition_test.rb +3 -7
  39. data/test/lib/my_john_deere_api/model/contribution_product_test.rb +4 -7
  40. data/test/lib/my_john_deere_api/model/field_test.rb +4 -6
  41. data/test/lib/my_john_deere_api/model/flag_test.rb +6 -7
  42. data/test/lib/my_john_deere_api/model/organization_test.rb +3 -5
  43. data/test/lib/my_john_deere_api/net_http_retry/decorator_test.rb +14 -14
  44. data/test/lib/my_john_deere_api/net_http_retry/invalid_response_error_test.rb +22 -2
  45. data/test/lib/my_john_deere_api/request/collection/asset_locations_test.rb +2 -2
  46. data/test/lib/my_john_deere_api/request/collection/assets_test.rb +2 -2
  47. data/test/lib/my_john_deere_api/request/collection/contribution_definitions_test.rb +2 -2
  48. data/test/lib/my_john_deere_api/request/collection/contribution_products_test.rb +2 -2
  49. data/test/lib/my_john_deere_api/request/collection/fields_test.rb +2 -2
  50. data/test/lib/my_john_deere_api/request/collection/flags_test.rb +2 -2
  51. data/test/lib/my_john_deere_api/request/collection/organizations_test.rb +2 -2
  52. data/test/lib/my_john_deere_api/request/create/asset_location_test.rb +3 -2
  53. data/test/lib/my_john_deere_api/request/create/asset_test.rb +5 -4
  54. data/test/lib/my_john_deere_api/request/create/base_test.rb +0 -14
  55. data/test/lib/my_john_deere_api/request/individual/asset_test.rb +2 -3
  56. data/test/lib/my_john_deere_api/request/individual/base_test.rb +0 -1
  57. data/test/lib/my_john_deere_api/request/individual/contribution_definition_test.rb +2 -3
  58. data/test/lib/my_john_deere_api/request/individual/contribution_product_test.rb +2 -3
  59. data/test/lib/my_john_deere_api/request/individual/field_test.rb +2 -3
  60. data/test/lib/my_john_deere_api/request/individual/organization_test.rb +2 -3
  61. data/test/lib/my_john_deere_api/request/update/asset_test.rb +5 -17
  62. data/test/lib/my_john_deere_api/request/update/base_test.rb +0 -14
  63. data/test/support/helper.rb +14 -5
  64. data/test/support/link_helpers.rb +14 -0
  65. data/test/support/response_helpers.rb +18 -0
  66. data/test/support/vcr/catalog.yml +44 -37
  67. data/test/support/vcr/get_access_token.yml +90 -17
  68. data/test/support/vcr/get_refresh_token.yml +159 -0
  69. data/test/support/vcr/get_request_url.yml +51 -0
  70. data/test/support/vcr_setup.rb +80 -19
  71. metadata +11 -8
  72. data/test/support/vcr/get_request_token.yml +0 -83
@@ -1,3 +1,3 @@
1
1
  module MyJohnDeereApi
2
- VERSION='2.5.0'
2
+ VERSION='3.0.0'
3
3
  end
@@ -31,13 +31,12 @@ describe 'MyJohnDeereApi::Authorize' do
31
31
  end
32
32
  end
33
33
 
34
- describe '#consumer' do
35
- it "returns a non-user-specific consumer configured for GET requests" do
34
+ describe '#oauth_client' do
35
+ it "returns a non-user-specific client" do
36
36
  authorize = create_authorize
37
- consumer = VCR.use_cassette('catalog') { authorize.consumer }
37
+ consumer = VCR.use_cassette('catalog') { authorize.oauth_client }
38
38
 
39
- assert_kind_of OAuth::Consumer, consumer
40
- assert_equal :get, consumer.http_method
39
+ assert_kind_of OAuth2::Client, consumer
41
40
  end
42
41
  end
43
42
 
@@ -45,37 +44,50 @@ describe 'MyJohnDeereApi::Authorize' do
45
44
  it 'retrieves a request url' do
46
45
  authorize = create_authorize
47
46
 
48
- url = VCR.use_cassette('get_request_token') { authorize.authorize_url }
49
- links = VCR.use_cassette('catalog') { JD::Consumer.new(api_key, api_secret, environment: :sandbox).send(:links) }
47
+ url = VCR.use_cassette('get_request_url') { authorize.authorize_url }
48
+ links = VCR.use_cassette('catalog') { JD::Consumer.new(api_key, api_secret, environment: :sandbox).send(:authorization_links) }
50
49
 
51
- assert_includes url, links[:authorize_request_token]
52
-
53
- query = URI.parse(url).query
54
- params = CGI::parse(query)
55
-
56
- assert_match(TOKEN_PATTERN, params['oauth_token'].first)
50
+ assert_includes url, links[:authorization]
57
51
  end
52
+ end
58
53
 
59
- it 'sets the request token/secret' do
54
+ describe '#verify(code)' do
55
+ it 'sets the access/refresh token hash' do
60
56
  authorize = create_authorize
57
+ code = 'VERIFY'
58
+
59
+ VCR.use_cassette('get_request_url') { authorize.authorize_url }
60
+ VCR.use_cassette('get_access_token') { authorize.verify(code) }
61
61
 
62
- VCR.use_cassette('get_request_token') { authorize.authorize_url }
62
+ hash = authorize.token_hash
63
63
 
64
- assert_match TOKEN_PATTERN, authorize.request_token
65
- assert_match SECRET_PATTERN, authorize.request_secret
64
+ assert_match TOKEN_PATTERN, hash['access_token']
65
+ assert_match TOKEN_PATTERN, hash['refresh_token']
66
66
  end
67
67
  end
68
68
 
69
- describe '#verify(code, token, secret)' do
70
- it 'sets the access token/secret' do
71
- authorize = create_authorize
72
- code = 'VERIFY'
69
+ describe '#refresh_from_hash(old_token_hash)' do
70
+ let(:authorize) { create_authorize }
71
+
72
+ let(:old_hash) do
73
+ {
74
+ "token_type": "Bearer",
75
+ "scope": "ag2 ag1 offline_access ag3",
76
+ "access_token": access_token,
77
+ "refresh_token": refresh_token,
78
+ "expires_at": 1616484631
79
+ }
80
+ end
73
81
 
74
- VCR.use_cassette('get_request_token') { authorize.authorize_url }
75
- VCR.use_cassette('get_access_token') { authorize.verify(code) }
82
+ subject { authorize.refresh_from_hash(old_hash) }
83
+
84
+ it "fetches a new token hash using OAuth2's refresh! method" do
85
+ new_hash = VCR.use_cassette('get_refresh_token') { subject }
86
+
87
+ # normalize response hash
88
+ new_hash = JSON.parse(new_hash.to_json)
76
89
 
77
- assert_match TOKEN_PATTERN, authorize.access_token
78
- assert_match SECRET_PATTERN, authorize.access_secret
90
+ assert_equal new_access_token, new_hash['access_token']
79
91
  end
80
92
  end
81
93
  end
@@ -1,6 +1,8 @@
1
1
  require 'support/helper'
2
2
 
3
3
  describe 'MyJohnDeereApi::Client' do
4
+ include JD::ResponseHelpers
5
+
4
6
  it 'includes the CaseConversion helper' do
5
7
  client = JD::Client.new(api_key, api_secret)
6
8
  assert_equal 'thisIsATest', client.send(:camelize, :this_is_a_test)
@@ -14,14 +16,10 @@ describe 'MyJohnDeereApi::Client' do
14
16
  assert_equal api_secret, client.api_secret
15
17
  end
16
18
 
17
- it 'accepts access token/secret' do
18
- access_token = 'token'
19
- access_secret = 'secret'
20
-
21
- client = JD::Client.new(api_key, api_secret, access: [access_token, access_secret])
19
+ it 'accepts token_hash' do
20
+ client = JD::Client.new(api_key, api_secret, token_hash: token_hash)
22
21
 
23
- assert_equal access_token, client.access_token
24
- assert_equal access_secret, client.access_secret
22
+ assert_equal token_hash, client.token_hash
25
23
  end
26
24
 
27
25
  it 'accepts the environment' do
@@ -45,7 +43,7 @@ describe 'MyJohnDeereApi::Client' do
45
43
  api_secret,
46
44
  contribution_definition_id: contribution_definition_id,
47
45
  environment: :sandbox,
48
- access: [access_token, access_secret],
46
+ token_hash: token_hash,
49
47
  http_retry: {max_retries: custom_retries}
50
48
  )
51
49
 
@@ -66,7 +64,7 @@ describe 'MyJohnDeereApi::Client' do
66
64
 
67
65
  describe '#get' do
68
66
  it 'returns the response as a Hash' do
69
- response = VCR.use_cassette('get_organizations') { client.get('/organizations') }
67
+ response = VCR.use_cassette('get_organizations') { client.get('/platform/organizations') }
70
68
 
71
69
  assert_kind_of Hash, response
72
70
  assert_kind_of Integer, response['total']
@@ -75,16 +73,7 @@ describe 'MyJohnDeereApi::Client' do
75
73
  end
76
74
 
77
75
  it 'prepends the leading slash if needed' do
78
- response = VCR.use_cassette('get_organizations') { client.get('organizations') }
79
-
80
- assert_kind_of Hash, response
81
- assert_kind_of Integer, response['total']
82
- assert response['values'].all?{|value| value['@type'] == 'Organization'}
83
- assert response['values'].all?{|value| value.has_key?('links')}
84
- end
85
-
86
- it 'allows symbols for simple resources' do
87
- response = VCR.use_cassette('get_organizations') { client.get(:organizations) }
76
+ response = VCR.use_cassette('get_organizations') { client.get('platform/organizations') }
88
77
 
89
78
  assert_kind_of Hash, response
90
79
  assert_kind_of Integer, response['total']
@@ -108,22 +97,20 @@ describe 'MyJohnDeereApi::Client' do
108
97
 
109
98
  it 'returns the response as a Hash' do
110
99
  response = VCR.use_cassette('post_assets') do
111
- client.post("/organizations/#{organization_id}/assets", attributes)
100
+ client.post("/platform/organizations/#{organization_id}/assets", attributes)
112
101
  end
113
102
 
114
- assert_equal '201', response.code
115
- assert_equal 'Created', response.message
116
- assert_equal "#{base_url}/assets/#{asset_id}", response['Location']
103
+ assert_created response
104
+ assert_equal "#{base_url}/platform/assets/#{asset_id}", response.response.headers['Location']
117
105
  end
118
106
 
119
107
  it 'prepends the leading slash if needed' do
120
108
  response = VCR.use_cassette('post_assets') do
121
- client.post("organizations/#{organization_id}/assets", attributes)
109
+ client.post("platform/organizations/#{organization_id}/assets", attributes)
122
110
  end
123
111
 
124
- assert_equal '201', response.code
125
- assert_equal 'Created', response.message
126
- assert_equal "#{base_url}/assets/#{asset_id}", response['Location']
112
+ assert_created response
113
+ assert_equal "#{base_url}/platform/assets/#{asset_id}", response.response.headers['Location']
127
114
  end
128
115
  end
129
116
 
@@ -146,33 +133,29 @@ describe 'MyJohnDeereApi::Client' do
146
133
  end
147
134
 
148
135
  it 'sends the request' do
149
- response = VCR.use_cassette('put_asset') { client.put("/assets/#{asset_id}", attributes) }
136
+ response = VCR.use_cassette('put_asset') { client.put("/platform/assets/#{asset_id}", attributes) }
150
137
 
151
- assert_equal '204', response.code
152
- assert_equal 'No Content', response.message
138
+ assert_no_content response
153
139
  end
154
140
 
155
141
  it 'prepends the leading slash if needed' do
156
- response = VCR.use_cassette('put_asset') { client.put("assets/#{asset_id}", attributes) }
142
+ response = VCR.use_cassette('put_asset') { client.put("platform/assets/#{asset_id}", attributes) }
157
143
 
158
- assert_equal '204', response.code
159
- assert_equal 'No Content', response.message
144
+ assert_no_content response
160
145
  end
161
146
  end
162
147
 
163
148
  describe '#delete' do
164
149
  it 'sends the request' do
165
- response = VCR.use_cassette('delete_asset') { client.delete("/assets/#{asset_id}") }
150
+ response = VCR.use_cassette('delete_asset') { client.delete("/platform/assets/#{asset_id}") }
166
151
 
167
- assert_equal '204', response.code
168
- assert_equal 'No Content', response.message
152
+ assert_no_content response
169
153
  end
170
154
 
171
155
  it 'prepends the leading slash if needed' do
172
- response = VCR.use_cassette('delete_asset') { client.delete("assets/#{asset_id}") }
156
+ response = VCR.use_cassette('delete_asset') { client.delete("platform/assets/#{asset_id}") }
173
157
 
174
- assert_equal '204', response.code
175
- assert_equal 'No Content', response.message
158
+ assert_no_content response
176
159
  end
177
160
  end
178
161
 
@@ -200,26 +183,9 @@ describe 'MyJohnDeereApi::Client' do
200
183
  end
201
184
  end
202
185
 
203
- describe '#consumer' do
204
- it 'receives the api key/secret and environment of the client' do
205
- environment = :sandbox
206
-
207
- client = JD::Client.new(api_key, api_secret, environment: environment)
208
- consumer = client.send :consumer
209
-
210
- assert_kind_of JD::Consumer, consumer
211
- assert_equal api_key, consumer.api_key
212
- assert_equal api_secret, consumer.api_secret
213
- assert_equal environment, consumer.environment
214
- end
215
- end
216
-
217
186
  describe '#accessor' do
218
187
  it 'returns an object that can make user-specific requests' do
219
188
  assert_kind_of JD::NetHttpRetry::Decorator, accessor
220
- assert_kind_of OAuth::Consumer, accessor.consumer
221
- assert_equal access_token, accessor.token
222
- assert_equal access_secret, accessor.secret
223
189
  end
224
190
  end
225
191
  end
@@ -14,45 +14,33 @@ describe 'JD::Consumer' do
14
14
  consumer = JD::Consumer.new(api_key, api_secret, environment: environment)
15
15
 
16
16
  assert_equal environment, consumer.environment
17
- assert_equal JD::Consumer::URLS[environment], consumer.base_url
17
+ assert_equal JD::Consumer::URLS[environment], consumer.site
18
18
  end
19
19
 
20
- it 'accepts an arbitrary base_url' do
21
- base_url = 'https://example.com'
22
- consumer = JD::Consumer.new(api_key, api_secret, base_url: base_url)
20
+ it 'accepts an arbitrary site' do
21
+ site = 'https://example.com'
22
+ consumer = JD::Consumer.new(api_key, api_secret, site: site)
23
23
 
24
- assert_equal base_url, consumer.base_url
24
+ assert_equal site, consumer.site
25
25
  end
26
26
 
27
- it 'uses specified base_url regardless of specified environment' do
28
- base_url = 'https://example.com'
29
- consumer = JD::Consumer.new(api_key, api_secret, base_url: base_url, environment: :sandbox)
27
+ it 'uses specified site regardless of specified environment' do
28
+ site = 'https://example.com'
29
+ consumer = JD::Consumer.new(api_key, api_secret, site: site, environment: :sandbox)
30
30
 
31
- assert_equal base_url, consumer.base_url
31
+ assert_equal site, consumer.site
32
32
  end
33
33
  end
34
34
 
35
- describe '#app_get' do
36
- it 'creates a working oAuth consumer for non-user-specific GET requests' do
35
+ describe '#platform_client' do
36
+ it 'creates a working oAuth client' do
37
37
  consumer = JD::Consumer.new(api_key, api_secret, environment: :sandbox)
38
- app_get = VCR.use_cassette('catalog') { consumer.app_get }
38
+ platform_client = VCR.use_cassette('catalog') { consumer.platform_client }
39
39
 
40
- assert_kind_of OAuth::Consumer, app_get
41
- assert_equal api_key, app_get.key
42
- assert_equal api_secret, app_get.secret
43
- assert_equal JD::Consumer::URLS[:sandbox], app_get.site
44
- end
45
- end
46
-
47
- describe '#user_get' do
48
- it 'creates a working oAuth consumer for user-specific GET requests' do
49
- consumer = JD::Consumer.new(api_key, api_secret, environment: :sandbox)
50
- user_get = VCR.use_cassette('catalog') { consumer.user_get }
51
-
52
- assert_kind_of OAuth::Consumer, user_get
53
- assert_equal api_key, user_get.key
54
- assert_equal api_secret, user_get.secret
55
- assert_equal "#{JD::Consumer::URLS[:sandbox]}/platform", user_get.site
40
+ assert_kind_of OAuth2::Client, platform_client
41
+ assert_equal api_key, platform_client.id
42
+ assert_equal api_secret, platform_client.secret
43
+ assert_equal JD::Consumer::URLS[:sandbox], platform_client.site
56
44
  end
57
45
  end
58
46
  end
@@ -17,16 +17,6 @@ describe 'UriHelpers' do
17
17
  assert_equal '/turtles', path
18
18
  end
19
19
 
20
- it 'removes leading /platform from the path' do
21
- path = object.send(:uri_path, 'https://example.com/platform/turtles')
22
- assert_equal '/turtles', path
23
- end
24
-
25
- it 'preserves /platform in any other part of the path' do
26
- path = object.send(:uri_path, 'https://example.com/platform/turtles/platform')
27
- assert_equal '/turtles/platform', path
28
- end
29
-
30
20
  it 'is a private method' do
31
21
  exception = assert_raises(NoMethodError) { object.uri_path('https://example.com/turtles')}
32
22
  assert_includes exception.message, 'private method'
@@ -15,10 +15,6 @@ describe 'MyJohnDeereApi::Model::AssetLocation' do
15
15
  end
16
16
 
17
17
  describe '#initialize' do
18
- def link_for label
19
- record['links'].detect{|link| link['rel'] == label}['uri'].gsub('https://sandboxapi.deere.com/platform', '')
20
- end
21
-
22
18
  it 'sets the attributes from the given record' do
23
19
  location = klass.new(client, record)
24
20
 
@@ -1,6 +1,9 @@
1
1
  require 'support/helper'
2
2
 
3
3
  describe 'MyJohnDeereApi::Model::Asset' do
4
+ include JD::ResponseHelpers
5
+ include JD::LinkHelpers
6
+
4
7
  let(:klass) { JD::Model::Asset }
5
8
 
6
9
  let(:record) do
@@ -21,10 +24,6 @@ describe 'MyJohnDeereApi::Model::Asset' do
21
24
  end
22
25
 
23
26
  describe '#initialize' do
24
- def link_for label
25
- record['links'].detect{|link| link['rel'] == label}['uri'].gsub('https://sandboxapi.deere.com/platform', '')
26
- end
27
-
28
27
  it 'sets the attributes from the given record' do
29
28
  asset = klass.new(client, record)
30
29
 
@@ -43,7 +42,7 @@ describe 'MyJohnDeereApi::Model::Asset' do
43
42
  assert_kind_of Hash, asset.links
44
43
 
45
44
  ['self', 'organization', 'locations'].each do |association|
46
- assert_equal link_for(association), asset.links[association]
45
+ assert_link_for(asset, association)
47
46
  end
48
47
  end
49
48
  end
@@ -70,7 +69,7 @@ describe 'MyJohnDeereApi::Model::Asset' do
70
69
  assert_equal new_title, asset.title
71
70
 
72
71
  response = VCR.use_cassette('put_asset') { asset.save }
73
- assert_kind_of Net::HTTPNoContent, response
72
+ assert_no_content response
74
73
  end
75
74
 
76
75
  it 'does not make a JD request if nothing has changed' do
@@ -85,7 +84,9 @@ describe 'MyJohnDeereApi::Model::Asset' do
85
84
  asset.title = 'i REALLY like turtles!'
86
85
 
87
86
  response = VCR.use_cassette('put_asset') { asset.save }
88
- assert_kind_of Net::HTTPNoContent, response
87
+
88
+ assert_equal 204, response.response.status
89
+ assert_equal 'No Content', response.response.reason_phrase
89
90
 
90
91
  response = asset.save
91
92
  assert_nil response
@@ -109,7 +110,7 @@ describe 'MyJohnDeereApi::Model::Asset' do
109
110
  new_title = 'i REALLY like turtles!'
110
111
  response = VCR.use_cassette('put_asset') { asset.update(title: new_title) }
111
112
 
112
- assert_kind_of Net::HTTPNoContent, response
113
+ assert_no_content response
113
114
  end
114
115
  end
115
116
 
@@ -9,6 +9,8 @@ class SampleModel < JD::Model::Base
9
9
  end
10
10
 
11
11
  describe 'MyJohnDeereApi::Model::Base' do
12
+ include JD::LinkHelpers
13
+
12
14
  let(:klass) { JD::Model::Base }
13
15
  let(:object) { klass.new(client, record) }
14
16
 
@@ -31,10 +33,6 @@ describe 'MyJohnDeereApi::Model::Base' do
31
33
  end
32
34
 
33
35
  describe '#initialize(client, record)' do
34
- def link_for label
35
- record['links'].detect{|link| link['rel'] == label}['uri'].gsub('https://sandboxapi.deere.com/platform', '')
36
- end
37
-
38
36
  describe 'when the wrong record type is passed' do
39
37
  let(:record) do
40
38
  {
@@ -59,12 +57,10 @@ describe 'MyJohnDeereApi::Model::Base' do
59
57
  end
60
58
 
61
59
  it 'sets the links' do
62
- links = object.links
63
-
64
- assert_kind_of Hash, links
60
+ assert_kind_of Hash, object.links
65
61
 
66
62
  ['self', 'organization', 'locations'].each do |link|
67
- assert_equal link_for(link), links[link]
63
+ assert_link_for(object, link)
68
64
  end
69
65
  end
70
66
 
@@ -1,6 +1,8 @@
1
1
  require 'support/helper'
2
2
 
3
3
  describe 'MyJohnDeereApi::Model::ContributionDefinition' do
4
+ include JD::LinkHelpers
5
+
4
6
  let(:klass) { JD::Model::ContributionDefinition }
5
7
 
6
8
  let(:record) do
@@ -25,16 +27,10 @@ describe 'MyJohnDeereApi::Model::ContributionDefinition' do
25
27
  end
26
28
 
27
29
  describe '#initialize' do
28
- def link_for label
29
- camel_label = label.gsub(/_(.)/){|m| m[1].upcase}
30
- record['links'].detect{|link| link['rel'] == camel_label}['uri'].gsub('https://sandboxapi.deere.com/platform', '')
31
- end
32
-
33
30
  it 'sets the attributes from the given record' do
34
31
  definition = klass.new(client, record)
35
32
 
36
33
  assert_equal client, definition.client
37
- assert_equal accessor, definition.accessor
38
34
 
39
35
  # basic attributes
40
36
  assert_equal record['id'], definition.id
@@ -45,7 +41,7 @@ describe 'MyJohnDeereApi::Model::ContributionDefinition' do
45
41
  product = klass.new(client, record)
46
42
 
47
43
  ['self', 'contribution_product'].each do |association|
48
- assert_equal link_for(association), product.links[association]
44
+ assert_link_for product, association
49
45
  end
50
46
  end
51
47
  end