my_john_deere_api 2.4.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.
Files changed (153) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +813 -0
  3. data/Rakefile +9 -0
  4. data/lib/my_john_deere_api.rb +17 -0
  5. data/lib/my_john_deere_api/authorize.rb +69 -0
  6. data/lib/my_john_deere_api/client.rb +151 -0
  7. data/lib/my_john_deere_api/consumer.rb +90 -0
  8. data/lib/my_john_deere_api/errors.rb +7 -0
  9. data/lib/my_john_deere_api/errors/invalid_record_error.rb +29 -0
  10. data/lib/my_john_deere_api/errors/missing_contribution_definition_id_error.rb +12 -0
  11. data/lib/my_john_deere_api/errors/not_yet_implemented_error.rb +12 -0
  12. data/lib/my_john_deere_api/errors/type_mismatch_error.rb +12 -0
  13. data/lib/my_john_deere_api/errors/unsupported_environment_error.rb +18 -0
  14. data/lib/my_john_deere_api/helpers.rb +6 -0
  15. data/lib/my_john_deere_api/helpers/case_conversion.rb +37 -0
  16. data/lib/my_john_deere_api/helpers/environment_helper.rb +25 -0
  17. data/lib/my_john_deere_api/helpers/uri_helpers.rb +19 -0
  18. data/lib/my_john_deere_api/helpers/validate_contribution_definition.rb +18 -0
  19. data/lib/my_john_deere_api/model.rb +10 -0
  20. data/lib/my_john_deere_api/model/asset.rb +69 -0
  21. data/lib/my_john_deere_api/model/asset_location.rb +19 -0
  22. data/lib/my_john_deere_api/model/base.rb +97 -0
  23. data/lib/my_john_deere_api/model/contribution_definition.rb +15 -0
  24. data/lib/my_john_deere_api/model/contribution_product.rb +33 -0
  25. data/lib/my_john_deere_api/model/field.rb +40 -0
  26. data/lib/my_john_deere_api/model/flag.rb +36 -0
  27. data/lib/my_john_deere_api/model/organization.rb +43 -0
  28. data/lib/my_john_deere_api/net_http_retry.rb +2 -0
  29. data/lib/my_john_deere_api/net_http_retry/decorator.rb +53 -0
  30. data/lib/my_john_deere_api/net_http_retry/max_retries_exceeded_error.rb +20 -0
  31. data/lib/my_john_deere_api/request.rb +6 -0
  32. data/lib/my_john_deere_api/request/collection.rb +10 -0
  33. data/lib/my_john_deere_api/request/collection/asset_locations.rb +27 -0
  34. data/lib/my_john_deere_api/request/collection/assets.rb +34 -0
  35. data/lib/my_john_deere_api/request/collection/base.rb +91 -0
  36. data/lib/my_john_deere_api/request/collection/contribution_definitions.rb +26 -0
  37. data/lib/my_john_deere_api/request/collection/contribution_products.rb +26 -0
  38. data/lib/my_john_deere_api/request/collection/fields.rb +26 -0
  39. data/lib/my_john_deere_api/request/collection/flags.rb +33 -0
  40. data/lib/my_john_deere_api/request/collection/organizations.rb +26 -0
  41. data/lib/my_john_deere_api/request/create.rb +5 -0
  42. data/lib/my_john_deere_api/request/create/asset.rb +57 -0
  43. data/lib/my_john_deere_api/request/create/asset_location.rb +110 -0
  44. data/lib/my_john_deere_api/request/create/base.rb +67 -0
  45. data/lib/my_john_deere_api/request/individual.rb +8 -0
  46. data/lib/my_john_deere_api/request/individual/asset.rb +19 -0
  47. data/lib/my_john_deere_api/request/individual/base.rb +52 -0
  48. data/lib/my_john_deere_api/request/individual/contribution_definition.rb +19 -0
  49. data/lib/my_john_deere_api/request/individual/contribution_product.rb +19 -0
  50. data/lib/my_john_deere_api/request/individual/field.rb +19 -0
  51. data/lib/my_john_deere_api/request/individual/organization.rb +19 -0
  52. data/lib/my_john_deere_api/request/update.rb +4 -0
  53. data/lib/my_john_deere_api/request/update/asset.rb +40 -0
  54. data/lib/my_john_deere_api/request/update/base.rb +67 -0
  55. data/lib/my_john_deere_api/validators.rb +5 -0
  56. data/lib/my_john_deere_api/validators/asset.rb +35 -0
  57. data/lib/my_john_deere_api/validators/asset_location.rb +34 -0
  58. data/lib/my_john_deere_api/validators/base.rb +67 -0
  59. data/lib/my_john_deere_api/version.rb +3 -0
  60. data/test/lib/my_john_deere_api/authorize_test.rb +81 -0
  61. data/test/lib/my_john_deere_api/client_test.rb +225 -0
  62. data/test/lib/my_john_deere_api/consumer_test.rb +58 -0
  63. data/test/lib/my_john_deere_api/errors/invalid_record_error_test.rb +26 -0
  64. data/test/lib/my_john_deere_api/errors/max_retries_exceeded_error_test.rb +13 -0
  65. data/test/lib/my_john_deere_api/errors/missing_contribution_definition_id_error_test.rb +14 -0
  66. data/test/lib/my_john_deere_api/errors/not_yet_implemented_error_test.rb +13 -0
  67. data/test/lib/my_john_deere_api/errors/type_mismatch_error_test.rb +13 -0
  68. data/test/lib/my_john_deere_api/errors/unsupported_environment_error_test.rb +18 -0
  69. data/test/lib/my_john_deere_api/errors_test.rb +25 -0
  70. data/test/lib/my_john_deere_api/helpers/case_conversion_test.rb +100 -0
  71. data/test/lib/my_john_deere_api/helpers/environment_helper_test.rb +67 -0
  72. data/test/lib/my_john_deere_api/helpers/uri_helpers_test.rb +58 -0
  73. data/test/lib/my_john_deere_api/helpers/validate_contribution_definition_test.rb +74 -0
  74. data/test/lib/my_john_deere_api/helpers_test.rb +21 -0
  75. data/test/lib/my_john_deere_api/model/asset_location_test.rb +38 -0
  76. data/test/lib/my_john_deere_api/model/asset_test.rb +133 -0
  77. data/test/lib/my_john_deere_api/model/base_test.rb +76 -0
  78. data/test/lib/my_john_deere_api/model/contribution_definition_test.rb +52 -0
  79. data/test/lib/my_john_deere_api/model/contribution_product_test.rb +82 -0
  80. data/test/lib/my_john_deere_api/model/field_test.rb +65 -0
  81. data/test/lib/my_john_deere_api/model/flag_test.rb +48 -0
  82. data/test/lib/my_john_deere_api/model/organization_test.rb +84 -0
  83. data/test/lib/my_john_deere_api/model_test.rb +37 -0
  84. data/test/lib/my_john_deere_api/net_http_retry/decorator_test.rb +163 -0
  85. data/test/lib/my_john_deere_api/request/collection/asset_locations_test.rb +102 -0
  86. data/test/lib/my_john_deere_api/request/collection/assets_test.rb +99 -0
  87. data/test/lib/my_john_deere_api/request/collection/base_test.rb +27 -0
  88. data/test/lib/my_john_deere_api/request/collection/contribution_definitions_test.rb +88 -0
  89. data/test/lib/my_john_deere_api/request/collection/contribution_products_test.rb +88 -0
  90. data/test/lib/my_john_deere_api/request/collection/fields_test.rb +86 -0
  91. data/test/lib/my_john_deere_api/request/collection/flags_test.rb +92 -0
  92. data/test/lib/my_john_deere_api/request/collection/organizations_test.rb +87 -0
  93. data/test/lib/my_john_deere_api/request/collection_test.rb +37 -0
  94. data/test/lib/my_john_deere_api/request/create/asset_location_test.rb +163 -0
  95. data/test/lib/my_john_deere_api/request/create/asset_test.rb +182 -0
  96. data/test/lib/my_john_deere_api/request/create/base_test.rb +29 -0
  97. data/test/lib/my_john_deere_api/request/create_test.rb +17 -0
  98. data/test/lib/my_john_deere_api/request/individual/asset_test.rb +33 -0
  99. data/test/lib/my_john_deere_api/request/individual/base_test.rb +18 -0
  100. data/test/lib/my_john_deere_api/request/individual/contribution_definition_test.rb +33 -0
  101. data/test/lib/my_john_deere_api/request/individual/contribution_product_test.rb +33 -0
  102. data/test/lib/my_john_deere_api/request/individual/field_test.rb +37 -0
  103. data/test/lib/my_john_deere_api/request/individual/organization_test.rb +33 -0
  104. data/test/lib/my_john_deere_api/request/individual_test.rb +29 -0
  105. data/test/lib/my_john_deere_api/request/update/asset_test.rb +99 -0
  106. data/test/lib/my_john_deere_api/request/update/base_test.rb +60 -0
  107. data/test/lib/my_john_deere_api/request/update_test.rb +13 -0
  108. data/test/lib/my_john_deere_api/request_test.rb +21 -0
  109. data/test/lib/my_john_deere_api/validators/asset_location_test.rb +61 -0
  110. data/test/lib/my_john_deere_api/validators/asset_test.rb +93 -0
  111. data/test/lib/my_john_deere_api/validators/base_test.rb +92 -0
  112. data/test/lib/my_john_deere_api/validators_test.rb +17 -0
  113. data/test/lib/my_john_deere_api/version_test.rb +9 -0
  114. data/test/my_john_deere_api_test.rb +37 -0
  115. data/test/support/helper.rb +97 -0
  116. data/test/support/vcr/accessor/delete_failed.yml +327 -0
  117. data/test/support/vcr/accessor/delete_max_failed.yml +615 -0
  118. data/test/support/vcr/accessor/delete_retry.yml +191 -0
  119. data/test/support/vcr/accessor/delete_retry_too_soon.yml +191 -0
  120. data/test/support/vcr/accessor/get_failed.yml +390 -0
  121. data/test/support/vcr/accessor/get_max_failed.yml +734 -0
  122. data/test/support/vcr/accessor/get_retry.yml +226 -0
  123. data/test/support/vcr/accessor/get_retry_too_soon.yml +226 -0
  124. data/test/support/vcr/accessor/post_failed.yml +417 -0
  125. data/test/support/vcr/accessor/post_max_failed.yml +785 -0
  126. data/test/support/vcr/accessor/post_retry.yml +241 -0
  127. data/test/support/vcr/accessor/post_retry_too_soon.yml +241 -0
  128. data/test/support/vcr/accessor/put_failed.yml +372 -0
  129. data/test/support/vcr/accessor/put_max_failed.yml +700 -0
  130. data/test/support/vcr/accessor/put_retry.yml +216 -0
  131. data/test/support/vcr/accessor/put_retry_too_soon.yml +216 -0
  132. data/test/support/vcr/catalog.yml +89 -0
  133. data/test/support/vcr/delete_asset.yml +82 -0
  134. data/test/support/vcr/get_access_token.yml +41 -0
  135. data/test/support/vcr/get_asset.yml +144 -0
  136. data/test/support/vcr/get_asset_locations.yml +196 -0
  137. data/test/support/vcr/get_assets.yml +152 -0
  138. data/test/support/vcr/get_contribution_definition.yml +90 -0
  139. data/test/support/vcr/get_contribution_definitions.yml +91 -0
  140. data/test/support/vcr/get_contribution_product.yml +91 -0
  141. data/test/support/vcr/get_contribution_products.yml +91 -0
  142. data/test/support/vcr/get_field.yml +144 -0
  143. data/test/support/vcr/get_fields.yml +146 -0
  144. data/test/support/vcr/get_flags.yml +47 -0
  145. data/test/support/vcr/get_organization.yml +90 -0
  146. data/test/support/vcr/get_organizations.yml +149 -0
  147. data/test/support/vcr/get_request_token.yml +83 -0
  148. data/test/support/vcr/post_asset_locations.yml +244 -0
  149. data/test/support/vcr/post_assets.yml +192 -0
  150. data/test/support/vcr/put_asset.yml +87 -0
  151. data/test/support/vcr/warning.txt +28 -0
  152. data/test/support/vcr_setup.rb +488 -0
  153. metadata +277 -0
@@ -0,0 +1,27 @@
1
+ require 'support/helper'
2
+
3
+ describe 'MyJohnDeereApi::Request::Collection::Base' do
4
+ let(:klass) { JD::Request::Collection::Base }
5
+
6
+ describe '#initialize(client)' do
7
+ it 'accepts a client' do
8
+ collection = klass.new(client)
9
+ assert_equal client, collection.client
10
+ end
11
+
12
+ it 'accepts associations' do
13
+ collection = klass.new(client, organization: organization_id)
14
+
15
+ assert_kind_of Hash, collection.associations
16
+ assert_equal organization_id, collection.associations[:organization]
17
+ end
18
+ end
19
+
20
+ it 'uses the Enumerable module' do
21
+ collection = klass.new(client)
22
+
23
+ [:each, :first, :map, :detect, :select].each do |method_name|
24
+ assert collection.respond_to?(method_name)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,88 @@
1
+ require 'support/helper'
2
+ require 'yaml'
3
+ require 'json'
4
+
5
+ describe 'MyJohnDeereApi::Request::Collection::ContributionDefinitions' do
6
+ let(:klass) { MyJohnDeereApi::Request::Collection::ContributionDefinitions }
7
+
8
+ let(:collection) { klass.new(client, contribution_product: contribution_product_id) }
9
+ let(:object) { collection }
10
+
11
+ inherits_from JD::Request::Collection::Base
12
+
13
+ describe '#initialize(client)' do
14
+ it 'accepts a client' do
15
+ assert_equal client, collection.client
16
+ end
17
+
18
+ it 'accepts associations' do
19
+ collection = klass.new(client, something: 123)
20
+
21
+ assert_kind_of Hash, collection.associations
22
+ assert_equal 123, collection.associations[:something]
23
+ end
24
+ end
25
+
26
+ describe '#resource' do
27
+ it 'returns /contributionProducts/<contribution_product_id>/contributionDefinitions' do
28
+ assert_equal "/contributionProducts/#{contribution_product_id}/contributionDefinitions", collection.resource
29
+ end
30
+ end
31
+
32
+ describe '#all' do
33
+ it 'returns all records' do
34
+ all = VCR.use_cassette('get_contribution_definitions') { collection.all }
35
+
36
+ assert_kind_of Array, all
37
+ assert_equal collection.count, all.size
38
+
39
+ all.each do |item|
40
+ assert_kind_of JD::Model::ContributionDefinition, item
41
+ end
42
+ end
43
+ end
44
+
45
+ describe '#count' do
46
+ let(:server_response) do
47
+ contents = File.read('test/support/vcr/get_contribution_definitions.yml')
48
+ body = YAML.load(contents)['http_interactions'].last['response']['body']['string']
49
+ JSON.parse(body)
50
+ end
51
+
52
+ let(:server_count) { server_response['total'] }
53
+
54
+ it 'returns the total count of records in the collection' do
55
+ count = VCR.use_cassette('get_contribution_definitions') { collection.count }
56
+
57
+ assert_equal server_count, count
58
+ end
59
+ end
60
+
61
+ describe 'results' do
62
+ let(:definition_names) do
63
+ contents = File.read('test/support/vcr/get_contribution_definitions.yml')
64
+ body = YAML.load(contents)['http_interactions'].last['response']['body']['string']
65
+
66
+ JSON.parse(body)['values'].map{|v| v['name']}
67
+ end
68
+
69
+ it 'returns all records as a single enumerator' do
70
+ count = VCR.use_cassette('get_contribution_definitions') { collection.count }
71
+ names = VCR.use_cassette('get_contribution_definitions') { collection.map(&:name) }
72
+
73
+ assert_kind_of Array, names
74
+ assert_equal count, names.size
75
+
76
+ definition_names.each do |expected_name|
77
+ assert_includes names, expected_name
78
+ end
79
+ end
80
+ end
81
+
82
+ describe '#find(contribution_definition_id)' do
83
+ it 'retrieves the asset' do
84
+ definition = VCR.use_cassette('get_contribution_definition') { collection.find(contribution_definition_id) }
85
+ assert_kind_of JD::Model::ContributionDefinition, definition
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,88 @@
1
+ require 'support/helper'
2
+ require 'yaml'
3
+ require 'json'
4
+
5
+ describe 'MyJohnDeereApi::Request::Collection::ContributionProducts' do
6
+ let(:klass) { MyJohnDeereApi::Request::Collection::ContributionProducts }
7
+
8
+ let(:collection) { klass.new(client) }
9
+ let(:object) { collection }
10
+
11
+ inherits_from JD::Request::Collection::Base
12
+
13
+ describe '#initialize(client)' do
14
+ it 'accepts a client' do
15
+ assert_equal client, collection.client
16
+ end
17
+
18
+ it 'accepts associations' do
19
+ collection = klass.new(client, something: 123)
20
+
21
+ assert_kind_of Hash, collection.associations
22
+ assert_equal 123, collection.associations[:something]
23
+ end
24
+ end
25
+
26
+ describe '#resource' do
27
+ it 'returns /contributionProducts' do
28
+ assert_equal "/contributionProducts?clientControlled=true", collection.resource
29
+ end
30
+ end
31
+
32
+ describe '#all' do
33
+ it 'returns all records' do
34
+ all = VCR.use_cassette('get_contribution_products') { collection.all }
35
+
36
+ assert_kind_of Array, all
37
+ assert_equal collection.count, all.size
38
+
39
+ all.each do |item|
40
+ assert_kind_of JD::Model::ContributionProduct, item
41
+ end
42
+ end
43
+ end
44
+
45
+ describe '#count' do
46
+ let(:server_response) do
47
+ contents = File.read('test/support/vcr/get_contribution_products.yml')
48
+ body = YAML.load(contents)['http_interactions'].last['response']['body']['string']
49
+ JSON.parse(body)
50
+ end
51
+
52
+ let(:server_count) { server_response['total'] }
53
+
54
+ it 'returns the total count of records in the collection' do
55
+ count = VCR.use_cassette('get_contribution_products') { collection.count }
56
+
57
+ assert_equal server_count, count
58
+ end
59
+ end
60
+
61
+ describe 'results' do
62
+ let(:product_names) do
63
+ contents = File.read('test/support/vcr/get_contribution_products.yml')
64
+ body = YAML.load(contents)['http_interactions'].last['response']['body']['string']
65
+
66
+ JSON.parse(body)['values'].map{|v| v['marketPlaceName']}
67
+ end
68
+
69
+ it 'returns all records as a single enumerator' do
70
+ count = VCR.use_cassette('get_contribution_products') { collection.count }
71
+ names = VCR.use_cassette('get_contribution_products') { collection.map(&:market_place_name) }
72
+
73
+ assert_kind_of Array, names
74
+ assert_equal count, names.size
75
+
76
+ product_names.each do |expected_name|
77
+ assert_includes names, expected_name
78
+ end
79
+ end
80
+ end
81
+
82
+ describe '#find(contribution_product_id)' do
83
+ it 'retrieves the asset' do
84
+ product = VCR.use_cassette('get_contribution_product') { collection.find(contribution_product_id) }
85
+ assert_kind_of JD::Model::ContributionProduct, product
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,86 @@
1
+ require 'support/helper'
2
+ require 'yaml'
3
+ require 'json'
4
+
5
+ describe 'MyJohnDeereApi::Request::Collection::Fields' do
6
+ let(:klass) { JD::Request::Collection::Fields }
7
+ let(:collection) { klass.new(client, organization: organization_id) }
8
+ let(:object) { collection }
9
+
10
+ inherits_from JD::Request::Collection::Base
11
+
12
+ describe '#initialize(client)' do
13
+ it 'accepts a client' do
14
+ assert_equal client, collection.client
15
+ end
16
+
17
+ it 'accepts associations' do
18
+ collection = klass.new(client, organization: organization_id)
19
+
20
+ assert_kind_of Hash, collection.associations
21
+ assert_equal organization_id, collection.associations[:organization]
22
+ end
23
+ end
24
+
25
+ describe '#resource' do
26
+ it 'returns /organizations/{org_id}/fields' do
27
+ assert_equal "/organizations/#{organization_id}/fields", collection.resource
28
+ end
29
+ end
30
+
31
+ describe '#all' do
32
+ it 'returns all records' do
33
+ all = VCR.use_cassette('get_fields') { collection.all }
34
+
35
+ assert_kind_of Array, all
36
+ assert_equal collection.count, all.size
37
+
38
+ all.each do |item|
39
+ assert_kind_of JD::Model::Field, item
40
+ end
41
+ end
42
+ end
43
+
44
+ describe '#find(field_id)' do
45
+ it 'retrieves the asset' do
46
+ field = VCR.use_cassette('get_field') { collection.find(field_id) }
47
+ assert_kind_of JD::Model::Field, field
48
+ end
49
+ end
50
+
51
+ describe '#count' do
52
+ let(:server_response) do
53
+ contents = File.read('test/support/vcr/get_fields.yml')
54
+ body = YAML.load(contents)['http_interactions'].last['response']['body']['string']
55
+ JSON.parse(body)
56
+ end
57
+
58
+ let(:server_count) { server_response['total'] }
59
+
60
+ it 'returns the total count of records in the collection' do
61
+ count = VCR.use_cassette('get_fields') { collection.count }
62
+
63
+ assert_equal server_count, count
64
+ end
65
+ end
66
+
67
+ describe 'results' do
68
+ let(:field_names) do
69
+ contents = File.read('test/support/vcr/get_fields.yml')
70
+ body = YAML.load(contents)['http_interactions'].last['response']['body']['string']
71
+ JSON.parse(body)['values'].map{|v| v['name']}
72
+ end
73
+
74
+ it 'returns all records as a single enumerator' do
75
+ count = VCR.use_cassette('get_fields') { collection.count }
76
+ names = VCR.use_cassette('get_fields') { collection.map{|item| item.name} }
77
+
78
+ assert_kind_of Array, names
79
+ assert_equal count, names.size
80
+
81
+ field_names.each do |expected_name|
82
+ assert_includes names, expected_name
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,92 @@
1
+ require 'support/helper'
2
+ require 'yaml'
3
+ require 'json'
4
+
5
+ describe 'MyJohnDeereApi::Request::Collection::Flags' do
6
+ let(:klass) { JD::Request::Collection::Flags }
7
+ let(:collection) { klass.new(client, organization: organization_id, field: field_id) }
8
+ let(:object) { collection }
9
+
10
+ inherits_from JD::Request::Collection::Base
11
+
12
+ describe '#initialize(client)' do
13
+ it 'accepts a client' do
14
+ assert_equal client, collection.client
15
+ end
16
+
17
+ it 'accepts associations' do
18
+ collection = klass.new(client, organization: organization_id, field: field_id)
19
+
20
+ assert_kind_of Hash, collection.associations
21
+ assert_equal organization_id, collection.associations[:organization]
22
+ assert_equal field_id, collection.associations[:field]
23
+ end
24
+ end
25
+
26
+ describe '#resource' do
27
+ it 'returns /organizations/{org_id}/fields/{field_id}/flags' do
28
+ assert_equal "/organizations/#{organization_id}/fields/#{field_id}/flags", collection.resource
29
+ end
30
+ end
31
+
32
+ describe '#all' do
33
+ it 'returns all records' do
34
+ all = VCR.use_cassette('get_flags') { collection.all }
35
+
36
+ assert_kind_of Array, all
37
+ assert_equal collection.count, all.size
38
+
39
+ all.each do |item|
40
+ assert_kind_of JD::Model::Flag, item
41
+ end
42
+ end
43
+ end
44
+
45
+ describe '#count' do
46
+ let(:server_response) do
47
+ contents = File.read('test/support/vcr/get_flags.yml')
48
+ body = YAML.load(contents)['http_interactions'].last['response']['body']['string']
49
+ JSON.parse(body)
50
+ end
51
+
52
+ let(:server_count) { server_response['total'] }
53
+
54
+ it 'returns the total count of records in the collection' do
55
+ count = VCR.use_cassette('get_flags') { collection.count }
56
+
57
+ assert_equal server_count, count
58
+ end
59
+ end
60
+
61
+ describe '#create(attributes)' do
62
+ it 'raises an error, not yet implemented' do
63
+ assert_raises(NotImplementedError) { collection.create({}) }
64
+ end
65
+ end
66
+
67
+ describe '#find(id)' do
68
+ it 'raises an error, not yet implemented' do
69
+ assert_raises(NotImplementedError) { collection.find(123) }
70
+ end
71
+ end
72
+
73
+ describe 'results' do
74
+ let(:flag_geometries) do
75
+ contents = File.read('test/support/vcr/get_flags.yml')
76
+ body = YAML.load(contents)['http_interactions'].last['response']['body']['string']
77
+ JSON.parse(body)['values'].map{|v| JSON.parse(v['geometry'])}
78
+ end
79
+
80
+ it 'returns all records as a single enumerator' do
81
+ count = VCR.use_cassette('get_flags') { collection.count }
82
+ geometries = VCR.use_cassette('get_flags') { collection.map{|item| item.geometry} }
83
+
84
+ assert_kind_of Array, geometries
85
+ assert_equal count, geometries.size
86
+
87
+ flag_geometries.each do |expected_geometry|
88
+ assert_includes geometries, expected_geometry
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,87 @@
1
+ require 'support/helper'
2
+ require 'yaml'
3
+ require 'json'
4
+
5
+ describe 'MyJohnDeereApi::Request::Collection::Organizations' do
6
+ let(:klass) { JD::Request::Collection::Organizations }
7
+ let(:collection) { klass.new(client) }
8
+ let(:object) { collection }
9
+
10
+ inherits_from JD::Request::Collection::Base
11
+
12
+ describe '#initialize(client)' do
13
+ it 'accepts a client' do
14
+ assert_equal client, collection.client
15
+ end
16
+ end
17
+
18
+ describe '#resource' do
19
+ it 'returns /organization' do
20
+ assert_equal '/organizations', collection.resource
21
+ end
22
+ end
23
+
24
+ describe '#all' do
25
+ it 'returns all records' do
26
+ all = VCR.use_cassette('get_organizations') { collection.all }
27
+
28
+ assert_kind_of Array, all
29
+ assert_equal collection.count, all.size
30
+
31
+ all.each do |item|
32
+ assert_kind_of JD::Model::Organization, item
33
+ end
34
+ end
35
+ end
36
+
37
+ describe '#find(organization_id)' do
38
+ it 'retrieves the asset' do
39
+ organization = VCR.use_cassette('get_organization') { collection.find(organization_id) }
40
+ assert_kind_of JD::Model::Organization, organization
41
+ end
42
+ end
43
+
44
+ describe '#count' do
45
+ let(:server_response) do
46
+ contents = File.read('test/support/vcr/get_organizations.yml')
47
+ body = YAML.load(contents)['http_interactions'].last['response']['body']['string']
48
+ JSON.parse(body)
49
+ end
50
+
51
+ let(:server_count) { server_response['total'] }
52
+
53
+ it 'returns the total count of records in the collection' do
54
+ count = VCR.use_cassette('get_organizations') { collection.count }
55
+
56
+ assert_equal server_count, count
57
+ end
58
+ end
59
+
60
+ describe 'pagination' do
61
+ let(:organization_names) do
62
+ contents = File.read('test/support/vcr/get_organizations.yml')
63
+ body = YAML.load(contents)['http_interactions'].last['response']['body']['string']
64
+ JSON.parse(body)['values'].map{|v| v['name']}
65
+ end
66
+
67
+ it 'returns all records as a single enumerator' do
68
+ count = VCR.use_cassette('get_organizations') { collection.count }
69
+ names = VCR.use_cassette('get_organizations') { collection.map{|item| item.name} }
70
+
71
+ assert_kind_of Array, names
72
+ assert_equal count, names.size
73
+
74
+ organization_names.each do |expected_name|
75
+ assert_includes names, expected_name
76
+ end
77
+ end
78
+
79
+ it 'passes the client to all organizations' do
80
+ organizations = VCR.use_cassette('get_organizations') { collection.all }
81
+
82
+ organizations.each do |organization|
83
+ assert_equal client, organization.client
84
+ end
85
+ end
86
+ end
87
+ end