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,58 @@
1
+ require 'support/helper'
2
+
3
+ describe 'JD::Consumer' do
4
+ describe '#initialize' do
5
+ it 'requires an api key and secret' do
6
+ consumer = JD::Consumer.new(api_key, api_secret)
7
+
8
+ assert_equal api_key, consumer.api_key
9
+ assert_equal api_secret, consumer.api_secret
10
+ end
11
+
12
+ it 'accepts the environment' do
13
+ environment = :sandbox
14
+ consumer = JD::Consumer.new(api_key, api_secret, environment: environment)
15
+
16
+ assert_equal environment, consumer.environment
17
+ assert_equal JD::Consumer::URLS[environment], consumer.base_url
18
+ end
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)
23
+
24
+ assert_equal base_url, consumer.base_url
25
+ end
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)
30
+
31
+ assert_equal base_url, consumer.base_url
32
+ end
33
+ end
34
+
35
+ describe '#app_get' do
36
+ it 'creates a working oAuth consumer for non-user-specific GET requests' do
37
+ consumer = JD::Consumer.new(api_key, api_secret, environment: :sandbox)
38
+ app_get = VCR.use_cassette('catalog') { consumer.app_get }
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
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,26 @@
1
+ require 'support/helper'
2
+
3
+ describe 'MyJohnDeereApi::InvalidRecordError' do
4
+ it 'inherits from StandardError' do
5
+ error = MyJohnDeereApi::InvalidRecordError.new
6
+ assert_kind_of StandardError, error
7
+ end
8
+
9
+ it 'has a default message' do
10
+ error = MyJohnDeereApi::InvalidRecordError.new
11
+ assert_includes error.message, 'Record is invalid'
12
+ end
13
+
14
+ it 'accepts a hash of errors, and includes them in message' do
15
+ errors = {
16
+ name: 'must be specified',
17
+ age: 'must be greater than 21'
18
+ }
19
+
20
+ message = MyJohnDeereApi::InvalidRecordError.new(errors).message
21
+
22
+ assert_includes message, 'Record is invalid'
23
+ assert_includes message, 'name must be specified'
24
+ assert_includes message, 'age must be greater than 21'
25
+ end
26
+ end
@@ -0,0 +1,13 @@
1
+ require 'support/helper'
2
+
3
+ describe 'JD::NetHttpRetry::MaxRetriesExceededError' do
4
+ it 'inherits from StandardError' do
5
+ error = JD::NetHttpRetry::MaxRetriesExceededError.new(:get, '503')
6
+ assert_kind_of StandardError, error
7
+ end
8
+
9
+ it 'accepts a request description, and includes in message' do
10
+ message = JD::NetHttpRetry::MaxRetriesExceededError.new(:get, '503 Service Unavailable').message
11
+ assert_equal message, "Max retries exceeded for GET request: 503 Service Unavailable"
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ require 'support/helper'
2
+
3
+ describe 'MyJohnDeereApi::MissingContributionDefinitionIdError' do
4
+ let(:klass) { MyJohnDeereApi::MissingContributionDefinitionIdError }
5
+ let(:error) { klass.new }
6
+
7
+ it 'inherits from StandardError' do
8
+ assert_kind_of StandardError, error
9
+ end
10
+
11
+ it 'has a default message' do
12
+ assert_includes error.message, 'Contribution Definition ID must be set in the client to use this feature.'
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ require 'support/helper'
2
+
3
+ describe 'MyJohnDeereApi::NotYetImplementedError' do
4
+ it 'inherits from StandardError' do
5
+ error = MyJohnDeereApi::NotYetImplementedError.new
6
+ assert_kind_of StandardError, error
7
+ end
8
+
9
+ it 'has a default message' do
10
+ error = MyJohnDeereApi::NotYetImplementedError.new
11
+ assert_includes error.message, 'This is not yet implemented. View README to help make this gem better!'
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'support/helper'
2
+
3
+ describe 'MyJohnDeereApi::TypeMismatchError' do
4
+ it 'inherits from StandardError' do
5
+ error = MyJohnDeereApi::TypeMismatchError.new
6
+ assert_kind_of StandardError, error
7
+ end
8
+
9
+ it 'has a default message' do
10
+ error = MyJohnDeereApi::TypeMismatchError.new
11
+ assert_includes error.message, 'Record type does not match'
12
+ end
13
+ end
@@ -0,0 +1,18 @@
1
+ require 'support/helper'
2
+
3
+ describe 'MyJohnDeereApi::UnsupportedEnvironmentError' do
4
+ it 'inherits from StandardError' do
5
+ error = MyJohnDeereApi::UnsupportedEnvironmentError.new
6
+ assert_kind_of StandardError, error
7
+ end
8
+
9
+ it 'has a default message' do
10
+ error = MyJohnDeereApi::UnsupportedEnvironmentError.new
11
+ assert_includes error.message, 'This environment is not supported.'
12
+ end
13
+
14
+ it 'specifies the failing environment if supplied' do
15
+ error = MyJohnDeereApi::UnsupportedEnvironmentError.new(:turtles)
16
+ assert_includes error.message, "The :turtles environment is not supported."
17
+ end
18
+ end
@@ -0,0 +1,25 @@
1
+ require 'support/helper'
2
+
3
+ describe 'MyJohnDeereApi Errors' do
4
+ describe 'loading dependencies' do
5
+ it 'loads InvalidRecordError' do
6
+ assert JD::InvalidRecordError
7
+ end
8
+
9
+ it 'loads MissingContributionDefinitionIdError' do
10
+ assert JD::MissingContributionDefinitionIdError
11
+ end
12
+
13
+ it 'loads NotYetImplementedError' do
14
+ assert JD::NotYetImplementedError
15
+ end
16
+
17
+ it 'loads TypeMismatchError' do
18
+ assert JD::TypeMismatchError
19
+ end
20
+
21
+ it 'loads UnsupportedEnvironmentError' do
22
+ assert JD::UnsupportedEnvironmentError
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,100 @@
1
+ require 'support/helper'
2
+
3
+ class CaseConversionHelperSample
4
+ include JD::Helpers::CaseConversion
5
+
6
+ def test
7
+ 'test'
8
+ end
9
+ end
10
+
11
+ describe 'Helpers::CaseConversion' do
12
+ let(:object) { CaseConversionHelperSample.new }
13
+
14
+ describe '#underscore' do
15
+ it 'converts from camelcase' do
16
+ string = object.send(:underscore, 'camelCaseExample')
17
+ assert_equal 'camel_case_example', string
18
+ end
19
+
20
+ it 'converts from a symbol' do
21
+ string = object.send(:underscore, :camelCaseExample)
22
+ assert_equal 'camel_case_example', string
23
+ end
24
+
25
+ it 'converts the keys of a hash' do
26
+ hash = {
27
+ assetCategory: 'Asset Category',
28
+ assetType: 'Asset Type'
29
+ }
30
+
31
+ new_hash = object.send(:underscore, hash)
32
+
33
+ assert_equal new_hash['asset_category'], hash[:assetCategory]
34
+ assert_equal new_hash['asset_type'], hash[:assetType]
35
+ end
36
+
37
+ it 'handles leading uppercase' do
38
+ string = object.send(:underscore, 'CamelCaseExample')
39
+ assert_equal 'camel_case_example', string
40
+ end
41
+
42
+ it 'converts spaces to underscores' do
43
+ string = object.send(:underscore, 'camel case Example')
44
+ assert_equal 'camel_case_example', string
45
+ end
46
+
47
+ it 'removes duplicate underscores after processing' do
48
+ string = object.send(:underscore, 'camel Case Example')
49
+ assert_equal 'camel_case_example', string
50
+ end
51
+
52
+ it 'is a private method' do
53
+ exception = assert_raises(NoMethodError) { object.underscore('test') }
54
+ assert_includes exception.message, 'private method'
55
+ end
56
+ end
57
+
58
+ describe '#camelize' do
59
+ it 'converts from underscored' do
60
+ string = object.send(:camelize, 'this_is_a_test')
61
+ assert_equal 'thisIsATest', string
62
+ end
63
+
64
+ it 'converts from spaced' do
65
+ string = object.send(:camelize, 'this is a test')
66
+ assert_equal 'thisIsATest', string
67
+ end
68
+
69
+ it 'honors original capitalization' do
70
+ string = object.send(:camelize, 'This is a test')
71
+ assert_equal 'ThisIsATest', string
72
+ end
73
+
74
+ it 'converts from a symbol' do
75
+ string = object.send(:camelize, :this_is_a_test)
76
+ assert_equal 'thisIsATest', string
77
+ end
78
+
79
+ it 'converts the keys of a hash' do
80
+ hash = {
81
+ asset_category: 'Asset Category',
82
+ asset_type: 'Asset Type'
83
+ }
84
+
85
+ new_hash = object.send(:camelize, hash)
86
+
87
+ assert_equal new_hash['assetCategory'], hash[:asset_category]
88
+ assert_equal new_hash['assetType'], hash[:asset_type]
89
+ end
90
+
91
+ it 'is a private method' do
92
+ exception = assert_raises(NoMethodError) { object.camelize('test') }
93
+ assert_includes exception.message, 'private method'
94
+ end
95
+ end
96
+
97
+ it "preserves the public nature of the including class's other methods" do
98
+ assert_equal 'test', object.test
99
+ end
100
+ end
@@ -0,0 +1,67 @@
1
+ require 'support/helper'
2
+
3
+ class EnvironmentHelperSample
4
+ include JD::Helpers::EnvironmentHelper
5
+
6
+ def initialize(environment = nil)
7
+ self.environment = environment
8
+ end
9
+ end
10
+
11
+ describe 'EnvironmentHelper' do
12
+ let(:object) { EnvironmentHelperSample.new(environment) }
13
+ let(:environment) { :sandbox }
14
+
15
+ it 'provides an attr_reader for :environment' do
16
+ assert object.environment
17
+ end
18
+
19
+ describe 'when no specific environment requested' do
20
+ let(:environment) { nil }
21
+
22
+ it 'sets the environment to :live' do
23
+ assert_equal :live, object.environment
24
+ end
25
+ end
26
+
27
+ describe 'when :sandbox environment requested' do
28
+ let(:environment) { :sandbox }
29
+
30
+ it 'sets the environment to :sandbox' do
31
+ assert_equal environment, object.environment
32
+ end
33
+ end
34
+
35
+ describe 'when :live environment requested' do
36
+ let(:environment) { :live }
37
+
38
+ it 'sets the environment to :live' do
39
+ assert_equal environment, object.environment
40
+ end
41
+ end
42
+
43
+ describe 'when :production synonym requested' do
44
+ let(:environment) { :production }
45
+
46
+ it 'sets the environment to :live' do
47
+ assert_equal :live, object.environment
48
+ end
49
+ end
50
+
51
+ describe 'when environment is passed as a string' do
52
+ let(:environment) { 'sandbox' }
53
+
54
+ it 'converts the environment to a symbol' do
55
+ assert_equal :sandbox, object.environment
56
+ end
57
+ end
58
+
59
+ describe 'when an unrecognized environment is requested' do
60
+ let(:environment) { :turtles }
61
+
62
+ it 'raises an error' do
63
+ exception = assert_raises(JD::UnsupportedEnvironmentError) { object }
64
+ assert_equal "The :turtles environment is not supported.", exception.message
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,58 @@
1
+ require 'support/helper'
2
+
3
+ class UriHelpersHelperSample
4
+ include JD::Helpers::UriHelpers
5
+
6
+ def test
7
+ 'test'
8
+ end
9
+ end
10
+
11
+ describe 'UriHelpers' do
12
+ let(:object) { UriHelpersHelperSample.new }
13
+
14
+ describe '#uri_path' do
15
+ it 'extracts the path from the uri' do
16
+ path = object.send(:uri_path, 'https://example.com/turtles')
17
+ assert_equal '/turtles', path
18
+ end
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
+ it 'is a private method' do
31
+ exception = assert_raises(NoMethodError) { object.uri_path('https://example.com/turtles')}
32
+ assert_includes exception.message, 'private method'
33
+ end
34
+ end
35
+
36
+ describe '#id_from_uri(uri, label)' do
37
+ it 'extracts the id immediately following a given label' do
38
+ uri = 'https://example.com/cows/123/pigs/456/turtles/789/birds/012'
39
+ assert_equal '789', object.send(:id_from_uri, uri, 'turtles')
40
+ end
41
+
42
+ it 'accepts a symbol for the label' do
43
+ uri = 'https://example.com/cows/123/pigs/456/turtles/789/birds/012'
44
+ assert_equal '789', object.send(:id_from_uri, uri, :turtles)
45
+ end
46
+
47
+ it 'is a private method' do
48
+ uri = 'https://example.com/cows/123/pigs/456/turtles/789/birds/012'
49
+
50
+ exception = assert_raises(NoMethodError) { object.id_from_uri(uri, 'turtles') }
51
+ assert_includes exception.message, 'private method'
52
+ end
53
+ end
54
+
55
+ it "preserves the public nature of the including class's other methods" do
56
+ assert_equal 'test', object.test
57
+ end
58
+ end
@@ -0,0 +1,74 @@
1
+ require 'support/helper'
2
+
3
+ class ValidateContributionDefinitionHelperSample
4
+ include JD::Helpers::ValidateContributionDefinition
5
+
6
+ attr_reader :client
7
+
8
+ def initialize(client)
9
+ @client = client
10
+ end
11
+ end
12
+
13
+ describe 'Helpers::ValidateContributionDefinition' do
14
+ let(:object) { ValidateContributionDefinitionHelperSample.new(client) }
15
+
16
+ describe '#validate_contribution_definition' do
17
+ it 'returns true when contribution_definition_id is present' do
18
+ assert object.send(:validate_contribution_definition)
19
+ end
20
+
21
+ it 'raises an error when contribution_definition_id is missing' do
22
+ client.contribution_definition_id = nil
23
+
24
+ assert_raises(JD::MissingContributionDefinitionIdError) do
25
+ object.send(:validate_contribution_definition)
26
+ end
27
+ end
28
+ end
29
+
30
+ # describe '#uri_path' do
31
+ # it 'extracts the path from the uri' do
32
+ # path = object.send(:uri_path, 'https://example.com/turtles')
33
+ # assert_equal '/turtles', path
34
+ # end
35
+ #
36
+ # it 'removes leading /platform from the path' do
37
+ # path = object.send(:uri_path, 'https://example.com/platform/turtles')
38
+ # assert_equal '/turtles', path
39
+ # end
40
+ #
41
+ # it 'preserves /platform in any other part of the path' do
42
+ # path = object.send(:uri_path, 'https://example.com/platform/turtles/platform')
43
+ # assert_equal '/turtles/platform', path
44
+ # end
45
+ #
46
+ # it 'is a private method' do
47
+ # exception = assert_raises(NoMethodError) { object.uri_path('https://example.com/turtles')}
48
+ # assert_includes exception.message, 'private method'
49
+ # end
50
+ # end
51
+ #
52
+ # describe '#id_from_uri(uri, label)' do
53
+ # it 'extracts the id immediately following a given label' do
54
+ # uri = 'https://example.com/cows/123/pigs/456/turtles/789/birds/012'
55
+ # assert_equal '789', object.send(:id_from_uri, uri, 'turtles')
56
+ # end
57
+ #
58
+ # it 'accepts a symbol for the label' do
59
+ # uri = 'https://example.com/cows/123/pigs/456/turtles/789/birds/012'
60
+ # assert_equal '789', object.send(:id_from_uri, uri, :turtles)
61
+ # end
62
+ #
63
+ # it 'is a private method' do
64
+ # uri = 'https://example.com/cows/123/pigs/456/turtles/789/birds/012'
65
+ #
66
+ # exception = assert_raises(NoMethodError) { object.id_from_uri(uri, 'turtles') }
67
+ # assert_includes exception.message, 'private method'
68
+ # end
69
+ # end
70
+ #
71
+ # it "preserves the public nature of the including class's other methods" do
72
+ # assert_equal 'test', object.test
73
+ # end
74
+ end