adyen-ruby-api-library 6.0.0 → 10.1.2

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 (219) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -1
  3. data/.github/release.yml +18 -0
  4. data/.github/workflows/codeql.yml +37 -0
  5. data/.github/workflows/label_new_issues.yml +15 -0
  6. data/.github/workflows/release.yml +40 -0
  7. data/.github/workflows/ruby.yml +2 -2
  8. data/.github/workflows/rubygems_release.yml +18 -0
  9. data/.github/workflows/stale.yml +26 -0
  10. data/.gitignore +3 -0
  11. data/.rubocop.yml +8 -0
  12. data/CONTRIBUTING.md +1 -1
  13. data/Gemfile +7 -7
  14. data/Makefile +79 -0
  15. data/README.md +158 -20
  16. data/Rakefile +3 -3
  17. data/VERSION +2 -0
  18. data/adyen-ruby-api-library.gemspec +6 -3
  19. data/bin/console +2 -2
  20. data/lib/adyen/client.rb +213 -99
  21. data/lib/adyen/errors.rb +30 -22
  22. data/lib/adyen/hash_with_accessors.rb +12 -7
  23. data/lib/adyen/services/balanceControlService.rb +27 -0
  24. data/lib/adyen/services/balancePlatform/account_holders_api.rb +76 -0
  25. data/lib/adyen/services/balancePlatform/balance_accounts_api.rb +116 -0
  26. data/lib/adyen/services/balancePlatform/bank_account_validation_api.rb +26 -0
  27. data/lib/adyen/services/balancePlatform/card_orders_api.rb +36 -0
  28. data/lib/adyen/services/balancePlatform/grant_accounts_api.rb +26 -0
  29. data/lib/adyen/services/balancePlatform/grant_offers_api.rb +36 -0
  30. data/lib/adyen/services/balancePlatform/manage_card_pin_api.rb +46 -0
  31. data/lib/adyen/services/balancePlatform/manage_sca_devices_api.rb +56 -0
  32. data/lib/adyen/services/balancePlatform/network_tokens_api.rb +36 -0
  33. data/lib/adyen/services/balancePlatform/payment_instrument_groups_api.rb +46 -0
  34. data/lib/adyen/services/balancePlatform/payment_instruments_api.rb +86 -0
  35. data/lib/adyen/services/balancePlatform/platform_api.rb +46 -0
  36. data/lib/adyen/services/balancePlatform/transaction_rules_api.rb +56 -0
  37. data/lib/adyen/services/balancePlatform/transfer_routes_api.rb +26 -0
  38. data/lib/adyen/services/balancePlatform.rb +89 -0
  39. data/lib/adyen/services/binLookup.rb +37 -0
  40. data/lib/adyen/services/checkout/donations_api.rb +36 -0
  41. data/lib/adyen/services/checkout/modifications_api.rb +76 -0
  42. data/lib/adyen/services/checkout/orders_api.rb +46 -0
  43. data/lib/adyen/services/checkout/payment_links_api.rb +46 -0
  44. data/lib/adyen/services/checkout/payments_api.rb +76 -0
  45. data/lib/adyen/services/checkout/recurring_api.rb +46 -0
  46. data/lib/adyen/services/checkout/utility_api.rb +48 -0
  47. data/lib/adyen/services/checkout.rb +29 -108
  48. data/lib/adyen/services/dataProtection.rb +27 -0
  49. data/lib/adyen/services/disputes.rb +67 -0
  50. data/lib/adyen/services/legalEntityManagement/business_lines_api.rb +56 -0
  51. data/lib/adyen/services/legalEntityManagement/documents_api.rb +56 -0
  52. data/lib/adyen/services/legalEntityManagement/hosted_onboarding_api.rb +46 -0
  53. data/lib/adyen/services/legalEntityManagement/legal_entities_api.rb +76 -0
  54. data/lib/adyen/services/legalEntityManagement/pci_questionnaires_api.rb +66 -0
  55. data/lib/adyen/services/legalEntityManagement/tax_e_delivery_consent_api.rb +36 -0
  56. data/lib/adyen/services/legalEntityManagement/terms_of_service_api.rb +66 -0
  57. data/lib/adyen/services/legalEntityManagement/transfer_instruments_api.rb +56 -0
  58. data/lib/adyen/services/legalEntityManagement.rb +59 -0
  59. data/lib/adyen/services/management/account_company_level_api.rb +46 -0
  60. data/lib/adyen/services/management/account_merchant_level_api.rb +56 -0
  61. data/lib/adyen/services/management/account_store_level_api.rb +96 -0
  62. data/lib/adyen/services/management/allowed_origins_company_level_api.rb +56 -0
  63. data/lib/adyen/services/management/allowed_origins_merchant_level_api.rb +56 -0
  64. data/lib/adyen/services/management/android_files_company_level_api.rb +76 -0
  65. data/lib/adyen/services/management/api_credentials_company_level_api.rb +56 -0
  66. data/lib/adyen/services/management/api_credentials_merchant_level_api.rb +56 -0
  67. data/lib/adyen/services/management/api_key_company_level_api.rb +26 -0
  68. data/lib/adyen/services/management/api_key_merchant_level_api.rb +26 -0
  69. data/lib/adyen/services/management/client_key_company_level_api.rb +26 -0
  70. data/lib/adyen/services/management/client_key_merchant_level_api.rb +26 -0
  71. data/lib/adyen/services/management/my_api_credential_api.rb +76 -0
  72. data/lib/adyen/services/management/payment_methods_merchant_level_api.rb +76 -0
  73. data/lib/adyen/services/management/payout_settings_merchant_level_api.rb +66 -0
  74. data/lib/adyen/services/management/split_configuration_merchant_level_api.rb +106 -0
  75. data/lib/adyen/services/management/terminal_actions_company_level_api.rb +36 -0
  76. data/lib/adyen/services/management/terminal_actions_terminal_level_api.rb +26 -0
  77. data/lib/adyen/services/management/terminal_orders_company_level_api.rb +116 -0
  78. data/lib/adyen/services/management/terminal_orders_merchant_level_api.rb +116 -0
  79. data/lib/adyen/services/management/terminal_settings_company_level_api.rb +56 -0
  80. data/lib/adyen/services/management/terminal_settings_merchant_level_api.rb +56 -0
  81. data/lib/adyen/services/management/terminal_settings_store_level_api.rb +96 -0
  82. data/lib/adyen/services/management/terminal_settings_terminal_level_api.rb +56 -0
  83. data/lib/adyen/services/management/terminals_terminal_level_api.rb +36 -0
  84. data/lib/adyen/services/management/users_company_level_api.rb +56 -0
  85. data/lib/adyen/services/management/users_merchant_level_api.rb +56 -0
  86. data/lib/adyen/services/management/webhooks_company_level_api.rb +86 -0
  87. data/lib/adyen/services/management/webhooks_merchant_level_api.rb +86 -0
  88. data/lib/adyen/services/management.rb +164 -0
  89. data/lib/adyen/services/marketpay.rb +42 -36
  90. data/lib/adyen/services/payment.rb +149 -0
  91. data/lib/adyen/services/paymentsApp.rb +67 -0
  92. data/lib/adyen/services/payout/initialization_api.rb +46 -0
  93. data/lib/adyen/services/payout/instant_payouts_api.rb +26 -0
  94. data/lib/adyen/services/payout/reviewing_api.rb +36 -0
  95. data/lib/adyen/services/payout.rb +34 -0
  96. data/lib/adyen/services/posMobile.rb +27 -0
  97. data/lib/adyen/services/posTerminalManagement.rb +82 -0
  98. data/lib/adyen/services/recurring.rb +70 -13
  99. data/lib/adyen/services/service.rb +8 -2
  100. data/lib/adyen/services/storedValue.rb +77 -0
  101. data/lib/adyen/services/terminalCloudAPI.rb +38 -0
  102. data/lib/adyen/services/transfers/capital_api.rb +55 -0
  103. data/lib/adyen/services/transfers/transactions_api.rb +36 -0
  104. data/lib/adyen/services/transfers/transfers_api.rb +76 -0
  105. data/lib/adyen/services/transfers.rb +34 -0
  106. data/lib/adyen/utils/hmac_validator.rb +52 -22
  107. data/lib/adyen/version.rb +2 -2
  108. data/lib/adyen-ruby-api-library.rb +23 -15
  109. data/renovate.json +3 -3
  110. data/spec/account_spec.rb +20 -20
  111. data/spec/balance_control_spec.rb +43 -0
  112. data/spec/balance_platform_spec.rb +129 -0
  113. data/spec/bin_lookup_spec.rb +69 -11
  114. data/spec/checkout-oauth_spec.rb +588 -0
  115. data/spec/checkout_spec.rb +591 -314
  116. data/spec/client_spec.rb +240 -45
  117. data/spec/data_protection_spec.rb +4 -4
  118. data/spec/disputes_spec.rb +45 -0
  119. data/spec/errors_spec.rb +44 -15
  120. data/spec/fund_spec.rb +10 -10
  121. data/spec/hash_with_accessors_spec.rb +18 -8
  122. data/spec/hop_spec.rb +4 -4
  123. data/spec/lem_spec.rb +63 -0
  124. data/spec/management-oauth_spec.rb +62 -0
  125. data/spec/management_spec.rb +66 -0
  126. data/spec/mocks/requests/BalanceControl/balance_transfer.json +10 -0
  127. data/spec/mocks/requests/BalancePlatform/create_account_holder.json +5 -0
  128. data/spec/mocks/requests/BalancePlatform/update_account_holder.json +10 -0
  129. data/spec/mocks/requests/Checkout/amount_updates.json +22 -0
  130. data/spec/mocks/requests/Checkout/apple_pay_sessions.json +5 -0
  131. data/spec/mocks/requests/Checkout/capture.json +34 -0
  132. data/spec/mocks/requests/Checkout/generic_cancel.json +5 -0
  133. data/spec/mocks/requests/Checkout/modifications_request.json +0 -0
  134. data/spec/mocks/requests/Checkout/psp_cancel.json +4 -0
  135. data/spec/mocks/requests/Checkout/refund.json +34 -0
  136. data/spec/mocks/requests/DisputesService/retrieve_applicable_defense_reasons.json +4 -0
  137. data/spec/mocks/requests/LegalEntityManagement/create_business_line.json +15 -0
  138. data/spec/mocks/requests/Management/create_store.json +15 -0
  139. data/spec/mocks/requests/Recurring/create_permit.json +6 -0
  140. data/spec/mocks/requests/StoredValue/issue_giftcard.json +12 -0
  141. data/spec/mocks/requests/TerminalCloudAPI/connected_terminals.json +3 -0
  142. data/spec/mocks/requests/TerminalCloudAPI/sync_payment.json +29 -0
  143. data/spec/mocks/requests/Transfers/get_transactions.json +82 -0
  144. data/spec/mocks/requests/Transfers/make_transfer.json +32 -0
  145. data/spec/mocks/responses/BalanceControl/balance_transfer.json +14 -0
  146. data/spec/mocks/responses/BalancePlatform/create_account_holder.json +41 -0
  147. data/spec/mocks/responses/BalancePlatform/get_balance_account.json +15 -0
  148. data/spec/mocks/responses/BalancePlatform/update_account_holder.json +16 -0
  149. data/spec/mocks/responses/Checkout/amount_updates.json +24 -0
  150. data/spec/mocks/responses/Checkout/apple_pay_sessions.json +3 -0
  151. data/spec/mocks/responses/Checkout/capture.json +37 -0
  152. data/spec/mocks/responses/Checkout/generic_cancel.json +7 -0
  153. data/spec/mocks/responses/Checkout/modifications.json +0 -0
  154. data/spec/mocks/responses/Checkout/psp_cancel.json +7 -0
  155. data/spec/mocks/responses/Checkout/refund.json +37 -0
  156. data/spec/mocks/responses/Checkout/stored_payment_methods.json +1 -0
  157. data/spec/mocks/responses/DisputesService/retrieve_applicable_defense_reasons.json +71 -0
  158. data/spec/mocks/responses/LegalEntityManagement/create_business_line.json +17 -0
  159. data/spec/mocks/responses/Management/create_store.json +23 -0
  160. data/spec/mocks/responses/Management/get_companies.json +42 -0
  161. data/spec/mocks/responses/Recurring/create_permit.json +4 -0
  162. data/spec/mocks/responses/StoredValue/issue_giftcard.json +13 -0
  163. data/spec/mocks/responses/TerminalCloudAPI/connected_terminals.json +5 -0
  164. data/spec/mocks/responses/TerminalCloudAPI/sync_payment.json +18 -0
  165. data/spec/mocks/responses/Transfers/get_transactions.json +82 -0
  166. data/spec/mocks/responses/Transfers/make_transfer.json +36 -0
  167. data/spec/mocks/responses/Webhooks/backslash_webhook.json +41 -0
  168. data/spec/mocks/responses/Webhooks/colon_webhook.json +41 -0
  169. data/spec/mocks/responses/Webhooks/forwardslash_webhook.json +41 -0
  170. data/spec/mocks/responses/Webhooks/mixed_webhook.json +41 -0
  171. data/spec/notification_spec.rb +9 -9
  172. data/spec/payments_spec.rb +39 -22
  173. data/spec/payouts_spec.rb +39 -15
  174. data/spec/pos_terminal_management_spec.rb +44 -0
  175. data/spec/recurring_spec.rb +8 -8
  176. data/spec/service_spec.rb +4 -0
  177. data/spec/spec_helper.rb +42 -46
  178. data/spec/stored_value_spec.rb +44 -0
  179. data/spec/terminal_cloud_api_spec.rb +91 -0
  180. data/spec/transfers_spec.rb +64 -0
  181. data/spec/utils/hmac_validator_spec.rb +53 -23
  182. data/templates/api-single.mustache +32 -0
  183. data/templates/api-small.mustache +39 -0
  184. data/templates/api.mustache +38 -0
  185. data/templates/config.yaml +10 -0
  186. metadata +160 -47
  187. data/.github/dependabot.yml +0 -8
  188. data/docs/checkout.html +0 -128
  189. data/docs/index.html +0 -50
  190. data/docs/install-library.html +0 -61
  191. data/docs/javascripts/prism.js +0 -5
  192. data/docs/javascripts/scale.fix.js +0 -17
  193. data/docs/marketpay.html +0 -171
  194. data/docs/params.json +0 -1
  195. data/docs/payment.html +0 -106
  196. data/docs/payout.html +0 -135
  197. data/docs/recurring.html +0 -113
  198. data/docs/stylesheets/github-light.css +0 -115
  199. data/docs/stylesheets/prism.css +0 -140
  200. data/docs/stylesheets/styles.css +0 -324
  201. data/docs/using-library.html +0 -67
  202. data/lib/adyen/services/bin_lookup.rb +0 -18
  203. data/lib/adyen/services/data_protection.rb +0 -17
  204. data/lib/adyen/services/dispute.rb +0 -20
  205. data/lib/adyen/services/payments.rb +0 -34
  206. data/lib/adyen/services/payouts.rb +0 -22
  207. data/lib/adyen/services/postfmapi.rb +0 -19
  208. data/spec/dispute_spec.rb +0 -17
  209. data/spec/mocks/requests/DisputeService/defend_dispute.json +0 -5
  210. data/spec/mocks/requests/DisputeService/delete_dispute_defense_document.json +0 -5
  211. data/spec/mocks/requests/DisputeService/retrieve_applicable_defense_reasons.json +0 -4
  212. data/spec/mocks/requests/DisputeService/supply_defense_document.json +0 -11
  213. data/spec/mocks/requests/Recurring/store_token.json +0 -15
  214. data/spec/mocks/responses/DisputeService/defend_dispute.json +0 -5
  215. data/spec/mocks/responses/DisputeService/delete_dispute_defense_document.json +0 -5
  216. data/spec/mocks/responses/DisputeService/retrieve_applicable_defense_reasons.json +0 -28
  217. data/spec/mocks/responses/DisputeService/supply_defense_document.json +0 -5
  218. data/spec/mocks/responses/Recurring/store_token.json +0 -7
  219. data/spec/postfmapi_spec.rb +0 -16
data/spec/client_spec.rb CHANGED
@@ -1,86 +1,281 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  RSpec.describe Adyen do
4
- before(:all) do
4
+ before(:each) do
5
5
  @shared_values = {
6
- client: nil
6
+ client: Adyen::Client.new(env: :test)
7
7
  }
8
8
  end
9
9
 
10
- it "creates Adyen client" do
10
+ it 'creates Adyen client' do
11
11
  @shared_values[:client] = Adyen::Client.new
12
12
  expect(@shared_values[:client]).is_a? Adyen::Client
13
13
  end
14
14
 
15
- it "sets env to :mock" do
15
+ it 'sets env to :mock' do
16
16
  @shared_values[:client].env = :test
17
- expect(@shared_values[:client].env).
18
- to eq(:test)
17
+ expect(@shared_values[:client].env)
18
+ .to eq(:test)
19
19
  end
20
20
 
21
- it "sets the version number" do
21
+ it 'sets the version number' do
22
22
  @shared_values[:client].checkout.version = @shared_values[:version]
23
- expect(@shared_values[:client].checkout.version).
24
- to eq(@shared_values[:version])
23
+ expect(@shared_values[:client].checkout.version)
24
+ .to eq(@shared_values[:version])
25
25
  end
26
26
 
27
- it "fails payments call without WS user and password" do
28
- expect{ @shared_values[:client].payments.authorise("{}") }.
29
- to raise_error(Adyen::AuthenticationError)
27
+ it 'fails payments call without WS user and password' do
28
+ expect { @shared_values[:client].payment.authorise('{}') }
29
+ .to raise_error(Adyen::AuthenticationError)
30
30
  @shared_values[:client].ws_user = @shared_values[:ws_user]
31
- expect{ @shared_values[:client].payments.authorise("{}") }.
32
- to raise_error(Adyen::AuthenticationError)
31
+ expect { @shared_values[:client].payment.authorise('{}') }
32
+ .to raise_error(Adyen::AuthenticationError)
33
33
  end
34
34
 
35
- it "fails a checkout call without api key" do
36
- expect{ @shared_values[:client].checkout.payment_methods("{}") }.
35
+ it "fails a checkout call without oauth token" do
36
+ expect{ @shared_values[:client].checkout.payments_api.payment_methods("{}") }.
37
37
  to raise_error(Adyen::AuthenticationError)
38
- @shared_values[:client].api_key = "api_key"
39
38
  end
40
39
 
41
- it "uses the specified mock service URL" do
42
- client = Adyen::Client.new(env: :mock, mock_service_url_base: "https://mock.test")
43
- expect(client.service_url_base("Account")).
44
- to eq("https://mock.test")
40
+ it 'fails a checkout call without api key' do
41
+ expect { @shared_values[:client].checkout.payments_api.payment_methods('{}') }
42
+ .to raise_error(Adyen::AuthenticationError)
43
+ @shared_values[:client].api_key = 'api_key'
45
44
  end
46
45
 
47
- it "generates localhost service URL when a mock port is specified" do
46
+ it 'uses the specified mock service URL' do
47
+ client = Adyen::Client.new(env: :mock, mock_service_url_base: 'https://mock.test')
48
+ expect(client.service_url_base('Account'))
49
+ .to eq('https://mock.test')
50
+ end
51
+
52
+ it 'generates localhost service URL when a mock port is specified' do
48
53
  client = Adyen::Client.new(env: :mock, mock_port: 3005)
49
- expect(client.service_url_base("Account")).
50
- to eq("http://localhost:3005")
54
+ expect(client.service_url_base('Account'))
55
+ .to eq('http://localhost:3005')
51
56
  end
52
57
 
53
- it "prefers the mock service URL when both mock service URL and port are specified" do
54
- client = Adyen::Client.new(env: :mock, mock_port: 3005, mock_service_url_base: "https://this-url-wins.test")
55
- expect(client.service_url_base("Account")).
56
- to eq("https://this-url-wins.test")
58
+ it 'prefers the mock service URL when both mock service URL and port are specified' do
59
+ client = Adyen::Client.new(env: :mock, mock_port: 3005, mock_service_url_base: 'https://this-url-wins.test')
60
+ expect(client.service_url_base('Account'))
61
+ .to eq('https://this-url-wins.test')
57
62
  end
58
63
 
59
- it "generates the correct service URL base for CAL TEST" do
64
+ it 'generates the correct service URL base for CAL TEST' do
60
65
  client = Adyen::Client.new(env: :test)
61
- client.live_url_prefix = "abcdef1234567890-TestCompany"
62
- expect(client.service_url_base("Account")).
63
- to eq("https://cal-test.adyen.com/cal/services")
66
+ client.live_url_prefix = 'abcdef1234567890-TestCompany'
67
+ expect(client.service_url_base('Account'))
68
+ .to eq('https://cal-test.adyen.com/cal/services/Account')
64
69
  end
65
70
 
66
- it "generates the correct service URL base for CAL LIVE" do
71
+ it 'generates the correct service URL base for CAL LIVE' do
67
72
  client = Adyen::Client.new(env: :live)
68
- client.live_url_prefix = "abcdef1234567890-TestCompany"
69
- expect(client.service_url_base("Account")).
70
- to eq("https://cal-live.adyen.com/cal/services")
73
+ client.live_url_prefix = 'abcdef1234567890-TestCompany'
74
+ expect(client.service_url_base('Account'))
75
+ .to eq('https://cal-live.adyen.com/cal/services/Account')
71
76
  end
72
77
 
73
- it "generates the correct service URL base for PAL TEST" do
78
+ it 'generates the correct service URL base for PAL TEST' do
74
79
  client = Adyen::Client.new(env: :test)
75
- client.live_url_prefix = "abcdef1234567890-TestCompany"
76
- expect(client.service_url_base("Payment")).
77
- to eq("https://pal-test.adyen.com/pal/servlet")
80
+ client.live_url_prefix = 'abcdef1234567890-TestCompany'
81
+ expect(client.service_url_base('Payment'))
82
+ .to eq('https://pal-test.adyen.com/pal/servlet/Payment')
78
83
  end
79
84
 
80
- it "generates the correct service URL base for PAL LIVE" do
85
+ it 'generates the correct service URL base for PAL LIVE' do
81
86
  client = Adyen::Client.new(env: :live)
82
- client.live_url_prefix = "abcdef1234567890-TestCompany"
83
- expect(client.service_url_base("Payment")).
84
- to eq("https://abcdef1234567890-TestCompany-pal-live.adyenpayments.com/pal/servlet")
87
+ client.live_url_prefix = 'abcdef1234567890-TestCompany'
88
+ expect(client.service_url_base('Payment'))
89
+ .to eq('https://abcdef1234567890-TestCompany-pal-live.adyenpayments.com/pal/servlet/Payment')
90
+ end
91
+
92
+ it 'generates the correct service URL PAL authorise TEST' do
93
+ client = Adyen::Client.new(env: :test)
94
+ expect(client.service_url('Payment', 'authorise', '68'))
95
+ .to eq('https://pal-test.adyen.com/pal/servlet/Payment/v68/authorise')
96
+ end
97
+
98
+ it 'generates the correct service URL base for PAL LIVE' do
99
+ client = Adyen::Client.new(env: :live)
100
+ client.live_url_prefix = 'abcdef1234567890-TestCompany'
101
+ expect(client.service_url('Payment', 'authorise', '68'))
102
+ .to eq('https://abcdef1234567890-TestCompany-pal-live.adyenpayments.com/pal/servlet/Payment/v68/authorise')
103
+ end
104
+
105
+ it 'generates a new set of ConnectionOptions when none are provided' do
106
+ expect(Faraday::ConnectionOptions).to receive(:new).and_call_original
107
+ Adyen::Client.new(env: :test)
108
+ end
109
+
110
+ it 'uses the ConnectionOptions provided' do
111
+ connection_options = Faraday::ConnectionOptions.new
112
+ expect(Faraday::ConnectionOptions).not_to receive(:new)
113
+ Adyen::Client.new(env: :test, connection_options: connection_options)
114
+ end
115
+
116
+ it 'initiates a Faraday connection with the provided options' do
117
+ connection_options = Faraday::ConnectionOptions.new
118
+ expect(Faraday::ConnectionOptions).not_to receive(:new)
119
+ client = Adyen::Client.new(api_key: 'api_key', env: :mock, connection_options: connection_options)
120
+
121
+ mock_faraday_connection = double(Faraday::Connection)
122
+ client.service_url(@shared_values[:service], 'payments/details', client.checkout.version)
123
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/payment-details.json'))
124
+ mock_response = Faraday::Response.new(status: 200)
125
+
126
+ expect(Adyen::AdyenResult).to receive(:new)
127
+ expect(Faraday).to receive(:new).with('http://localhost:3001/v71/payments/details',
128
+ connection_options).and_return(mock_faraday_connection)
129
+ expect(mock_faraday_connection).to receive(:post).and_return(mock_response)
130
+ client.checkout.payments_api.payments_details(request_body)
131
+ end
132
+
133
+ it "checks the creation of checkout url" do
134
+ client = Adyen::Client.new(api_key: "api_key", env: :test)
135
+ expect(client.service_url("Checkout", "paymentMethods", "71")).
136
+ to eq("https://checkout-test.adyen.com/v71/paymentMethods")
137
+ end
138
+
139
+ it "checks the creation of checkout url" do
140
+ client = Adyen::Client.new(api_key: "api_key", env: :live, live_url_prefix: "YourLiveUrlPrefix")
141
+ expect(client.service_url("Checkout", "paymentMethods", "71")).
142
+ to eq("https://YourLiveUrlPrefix-checkout-live.adyenpayments.com/checkout/v71/paymentMethods")
143
+ end
144
+ it "checks the creation of lem url" do
145
+ client = Adyen::Client.new(api_key: "api_key", env: :live)
146
+ expect(client.service_url("LegalEntityManagement", "businessLines", "3")).
147
+ to eq("https://kyc-live.adyen.com/lem/v3/businessLines")
148
+ end
149
+
150
+ it "checks the creation of balancePlatform url" do
151
+ client = Adyen::Client.new(api_key: "api_key", env: :live)
152
+ expect(client.service_url("BalancePlatform", "legalEntities", "1")).
153
+ to eq("https://balanceplatform-api-live.adyen.com/bcl/v1/legalEntities")
154
+ end
155
+
156
+ it "checks the creation of balancePlatform url" do
157
+ client = Adyen::Client.new(api_key: "api_key", env: :test)
158
+ expect(client.service_url("BalancePlatform", "legalEntities", "1")).
159
+ to eq("https://balanceplatform-api-test.adyen.com/bcl/v1/legalEntities")
160
+ end
161
+
162
+ it "checks the creation of transfers url" do
163
+ client = Adyen::Client.new(api_key: "api_key", env: :test)
164
+ expect(client.service_url("Transfers", "transactions", "1")).
165
+ to eq("https://balanceplatform-api-test.adyen.com/btl/v1/transactions")
166
+ end
167
+
168
+ it "checks the creation of management url" do
169
+ client = Adyen::Client.new(api_key: "api_key", env: :test)
170
+ expect(client.service_url("Management", "companies", "1")).
171
+ to eq("https://management-test.adyen.com/v1/companies")
172
+ end
173
+
174
+ it "checks the creation of binLookup url" do
175
+ client = Adyen::Client.new(api_key: "api_key", env: :test)
176
+ expect(client.service_url("BinLookup", "getCostEstimate", "54")).
177
+ to eq("https://pal-test.adyen.com/pal/servlet/BinLookup/v54/getCostEstimate")
178
+ end
179
+
180
+ it "check the creation of storedValue url" do
181
+ client = Adyen::Client.new(api_key: "api_key", env: :test)
182
+ expect(client.service_url("StoredValue", "issue", "46")).
183
+ to eq("https://pal-test.adyen.com/pal/servlet/StoredValue/v46/issue")
184
+ end
185
+
186
+ it 'checks the creation of checkout url' do
187
+ client = Adyen::Client.new(api_key: 'api_key', env: :live, live_url_prefix: 'YourLiveUrlPrefix')
188
+ expect(client.service_url('Checkout', 'paymentMethods', '70'))
189
+ .to eq('https://YourLiveUrlPrefix-checkout-live.adyenpayments.com/checkout/v70/paymentMethods')
190
+ end
191
+ it 'checks the creation of lem url' do
192
+ client = Adyen::Client.new(api_key: 'api_key', env: :live)
193
+ expect(client.service_url('LegalEntityManagement', 'businessLines', '3'))
194
+ .to eq('https://kyc-live.adyen.com/lem/v3/businessLines')
195
+ end
196
+
197
+ it 'checks the creation of balancePlatform url' do
198
+ client = Adyen::Client.new(api_key: 'api_key', env: :live)
199
+ expect(client.service_url('BalancePlatform', 'legalEntities', '1'))
200
+ .to eq('https://balanceplatform-api-live.adyen.com/bcl/v1/legalEntities')
201
+ end
202
+
203
+ it 'checks the creation of balancePlatform url' do
204
+ client = Adyen::Client.new(api_key: 'api_key', env: :test)
205
+ expect(client.service_url('BalancePlatform', 'legalEntities', '1'))
206
+ .to eq('https://balanceplatform-api-test.adyen.com/bcl/v1/legalEntities')
207
+ end
208
+
209
+ it 'checks the creation of transfers url' do
210
+ client = Adyen::Client.new(api_key: 'api_key', env: :test)
211
+ expect(client.service_url('Transfers', 'transactions', '1'))
212
+ .to eq('https://balanceplatform-api-test.adyen.com/btl/v1/transactions')
213
+ end
214
+
215
+ it 'checks the creation of management url' do
216
+ client = Adyen::Client.new(api_key: 'api_key', env: :test)
217
+ expect(client.service_url('Management', 'companies', '1'))
218
+ .to eq('https://management-test.adyen.com/v1/companies')
219
+ end
220
+
221
+ it 'checks the creation of binLookup url' do
222
+ client = Adyen::Client.new(api_key: 'api_key', env: :test)
223
+ expect(client.service_url('BinLookup', 'getCostEstimate', '54'))
224
+ .to eq('https://pal-test.adyen.com/pal/servlet/BinLookup/v54/getCostEstimate')
225
+ end
226
+
227
+ it 'check the creation of storedValue url' do
228
+ client = Adyen::Client.new(api_key: 'api_key', env: :test)
229
+ expect(client.service_url('StoredValue', 'issue', '46'))
230
+ .to eq('https://pal-test.adyen.com/pal/servlet/StoredValue/v46/issue')
231
+ end
232
+
233
+ it 'check the creation of payout url' do
234
+ client = Adyen::Client.new(api_key: 'api_key', env: :test)
235
+ expect(client.service_url('Payout', 'declineThirdParty', '68'))
236
+ .to eq('https://pal-test.adyen.com/pal/servlet/Payout/v68/declineThirdParty')
237
+ end
238
+
239
+ it 'checks the creation of PosTerminalManagement url' do
240
+ client = Adyen::Client.new(api_key: 'api_key', env: :test)
241
+ expect(client.service_url('PosTerminalManagement', 'assignTerminals', '1'))
242
+ .to eq('https://postfmapi-test.adyen.com/postfmapi/terminal/v1/assignTerminals')
243
+ end
244
+
245
+ it 'checks the creation of TerminalCloudAPI sync url' do
246
+ client = Adyen::Client.new(api_key: 'api_key', env: :test)
247
+ expect(client.service_url('TerminalCloudAPI', 'sync', nil))
248
+ .to eq('https://terminal-api-test.adyen.com/sync')
249
+ end
250
+
251
+ it 'checks the creation of TerminalCloudAPI async url' do
252
+ client = Adyen::Client.new(api_key: 'api_key', env: :test)
253
+ expect(client.service_url('TerminalCloudAPI', 'async', nil))
254
+ .to eq('https://terminal-api-test.adyen.com/async')
255
+ end
256
+
257
+ it 'checks the creation of TerminalCloudAPI connectedTerminals url' do
258
+ client = Adyen::Client.new(api_key: 'api_key', env: :test)
259
+ expect(client.service_url('TerminalCloudAPI', 'connectedTerminals', nil))
260
+ .to eq('https://terminal-api-test.adyen.com/connectedTerminals')
261
+
262
+ end
263
+
264
+ it 'checks the initialization of the terminal region' do
265
+ client = Adyen::Client.new(api_key: 'api_key', env: :test, terminal_region: 'eu')
266
+ expect(client.service_url('TerminalCloudAPI', 'connectedTerminals', nil))
267
+ .to eq('https://terminal-api-test-eu.adyen.com/connectedTerminals')
268
+ end
269
+
270
+ it 'checks the initialization of the terminal region set to nil per default' do
271
+ client = Adyen::Client.new(api_key: 'api_key', env: :test)
272
+ expect(client.service_url('TerminalCloudAPI', 'connectedTerminals', nil))
273
+ .to eq('https://terminal-api-test.adyen.com/connectedTerminals')
274
+ end
275
+
276
+ it 'checks the creation of PosMobile sessions url' do
277
+ client = Adyen::Client.new(api_key: 'api_key', env: :test)
278
+ expect(client.service_url('PosMobile', 'sessions', nil))
279
+ .to eq('https://checkout-test.adyen.com/checkout/possdk/sessions')
85
280
  end
86
281
  end
@@ -1,14 +1,14 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
- RSpec.describe Adyen::DataProtection, service: "Data Protection Service" do
3
+ RSpec.describe Adyen::DataProtection, service: 'Data Protection Service' do
4
4
  # client instance to be used in dynamically generated tests
5
5
  client = create_client(:basic)
6
6
 
7
7
  # methods / values to test for
8
8
  # format is defined in spec_helper
9
9
  test_sets = [
10
- ["request_subject_erasure", "result", "SUCCESS"],
10
+ %w[request_subject_erasure result SUCCESS]
11
11
  ]
12
12
 
13
- generate_tests(client, "DataProtectionService", test_sets, client.data_protection)
13
+ generate_tests(client, 'DataProtectionService', test_sets, client.data_protection)
14
14
  end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Adyen::Disputes, service: 'disputes service' do
4
+ before(:all) do
5
+ @shared_values = {
6
+ client: create_client(:api_key),
7
+ service: 'Disputes'
8
+ }
9
+ end
10
+
11
+ # methods / values to test for
12
+ # format is defined in spec_helper
13
+ it 'makes a retrieve_applicable_defense_reasons call' do
14
+ request_body = JSON.parse(json_from_file('mocks/requests/DisputesService/retrieve_applicable_defense_reasons.json'))
15
+
16
+ response_body = json_from_file('mocks/responses/DisputesService/retrieve_applicable_defense_reasons.json')
17
+
18
+ url = @shared_values[:client].service_url(@shared_values[:service], 'retrieveApplicableDefenseReasons',
19
+ @shared_values[:client].disputes.version)
20
+ WebMock.stub_request(:post, url)
21
+ .with(
22
+ body: request_body,
23
+ headers: {
24
+ 'x-api-key' => @shared_values[:client].api_key
25
+ }
26
+ )
27
+ .to_return(
28
+ body: response_body
29
+ )
30
+
31
+ result = @shared_values[:client].disputes.retrieve_applicable_defense_reasons(request_body)
32
+ response_hash = result.response
33
+
34
+ expect(result.status)
35
+ .to eq(200)
36
+ expect(response_hash)
37
+ .to eq(JSON.parse(response_body))
38
+ expect(response_hash)
39
+ .to be_a Adyen::HashWithAccessors
40
+ expect(response_hash)
41
+ .to be_a_kind_of Hash
42
+ expect(response_hash['disputeServiceResult']['success'])
43
+ .to eq(true)
44
+ end
45
+ end
data/spec/errors_spec.rb CHANGED
@@ -7,41 +7,70 @@ RSpec.describe Adyen::AdyenError do
7
7
  @shared_values = {
8
8
  request: {
9
9
  amount: {
10
- currency: "USD",
10
+ currency: 'USD',
11
11
  value: 1000
12
12
  },
13
- reference: "Your order number",
13
+ reference: 'Your order number',
14
14
  paymentMethod: {
15
- type: "scheme",
16
- number: "4111111111111111",
17
- expiryMonth: "10",
18
- expiryYear: "2020",
19
- holderName: "John Smith",
20
- cvc: "737"
15
+ type: 'scheme',
16
+ number: '4111111111111111',
17
+ expiryMonth: '10',
18
+ expiryYear: '2020',
19
+ holderName: 'John Smith',
20
+ cvc: '737'
21
21
  },
22
- returnUrl: "https://your-company.com/",
23
- merchantAccount: "YOUR_MERCHANT_ACCOUNT"
22
+ returnUrl: 'https://your-company.com/',
23
+ merchantAccount: 'YOUR_MERCHANT_ACCOUNT'
24
24
  }
25
25
  }
26
26
  end
27
27
 
28
28
  describe '#to_s' do
29
29
  it 'describes using the error properties' do
30
- expect(Adyen::AdyenError.new(@shared_values[:request], 'response', 'message', 'code').to_s).to eq("Adyen::AdyenError code:code, msg:message, request:#{@shared_values[:request]}, response:response")
30
+ expect(Adyen::AdyenError.new(
31
+ @shared_values[:request],
32
+ 'response',
33
+ 'message',
34
+ 'code'
35
+ ).to_s).to eq("Adyen::AdyenError code:code, msg:message, request:#{@shared_values[:request]}, response:response")
31
36
  end
32
37
  it 'skips the null properties' do
33
- expect(Adyen::AdyenError.new(@shared_values[:request], nil, nil, 'code').to_s).to eq("Adyen::AdyenError code:code, request:#{@shared_values[:request]}")
38
+ expect(Adyen::AdyenError.new(
39
+ @shared_values[:request],
40
+ nil,
41
+ nil,
42
+ 'code'
43
+ ).to_s).to eq("Adyen::AdyenError code:code, request:#{@shared_values[:request]}")
34
44
  end
35
45
  it 'uses the proper error class name' do
36
- expect(Adyen::PermissionError.new('message', @shared_values[:request]).to_s).to eq("Adyen::PermissionError code:403, msg:message, request:#{@shared_values[:request]}")
46
+ expect(Adyen::PermissionError.new(
47
+ 'message',
48
+ @shared_values[:request],
49
+ 'response'
50
+ ).to_s).to eq(
51
+ "Adyen::PermissionError code:403, msg:message, request:#{@shared_values[:request]}, response:response"
52
+ )
37
53
  end
38
54
  end
39
55
  describe '#masking' do
40
56
  it 'masks card number when logging request in errors' do
41
- expect(Adyen::AdyenError.new(@shared_values[:request], 'response', 'message', 'code').request[:paymentMethod][:number]).to eq('411111******1111')
57
+ expect(Adyen::AdyenError.new(@shared_values[:request], 'response', 'message',
58
+ 'code').request[:paymentMethod][:number]).to eq('411111******1111')
42
59
  end
43
60
  it 'masks CVC when logging request in errors' do
44
- expect(Adyen::AdyenError.new(@shared_values[:request], 'response', 'message', 'code').request[:paymentMethod][:cvc]).to eq('***')
61
+ expect(Adyen::AdyenError.new(@shared_values[:request], 'response', 'message',
62
+ 'code').request[:paymentMethod][:cvc]).to eq('***')
63
+ end
64
+
65
+ context 'when request is string' do
66
+ it 'masks card number when logging request in errors' do
67
+ expect(Adyen::AdyenError.new(JSON.generate(@shared_values[:request]), 'response', 'message',
68
+ 'code').request[:paymentMethod][:number]).to eq('411111******1111')
69
+ end
70
+ it 'masks CVC when logging request in errors' do
71
+ expect(Adyen::AdyenError.new(JSON.generate(@shared_values[:request]), 'response', 'message',
72
+ 'code').request[:paymentMethod][:cvc]).to eq('***')
73
+ end
45
74
  end
46
75
  end
47
76
  end
data/spec/fund_spec.rb CHANGED
@@ -1,20 +1,20 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
- RSpec.describe Adyen::Payments, service: "marketpay fund service" do
3
+ RSpec.describe Adyen::Payment, service: 'marketpay fund service' do
4
4
  # client instance to be used in dynamically generated tests
5
5
  client = create_client(:basic)
6
6
 
7
7
  # methods / values to test for
8
8
  # format is defined in spec_helper
9
9
  test_sets = [
10
- ["payout_account_holder", "pspReference", "9915090894325643"],
11
- ["account_holder_balance", "pspReference", "9914719436100053"],
12
- ["account_holder_transaction_list", "pspReference", "9914721175530029"],
13
- ["refund_not_paid_out_transfers", "pspReference", "9915090894215323"],
14
- ["setup_beneficiary", "pspReference", "9914860354282596"],
15
- ["transfer_funds", "pspReference", "9915090893984580"],
16
- ["refund_funds_transfer", "pspReference", "9915090893984580"]
10
+ %w[payout_account_holder pspReference 9915090894325643],
11
+ %w[account_holder_balance pspReference 9914719436100053],
12
+ %w[account_holder_transaction_list pspReference 9914721175530029],
13
+ %w[refund_not_paid_out_transfers pspReference 9915090894215323],
14
+ %w[setup_beneficiary pspReference 9914860354282596],
15
+ %w[transfer_funds pspReference 9915090893984580],
16
+ %w[refund_funds_transfer pspReference 9915090893984580]
17
17
  ]
18
18
 
19
- generate_tests(client, "Fund", test_sets, client.marketpay.fund)
19
+ generate_tests(client, 'Fund', test_sets, client.marketpay.fund)
20
20
  end
@@ -1,3 +1,5 @@
1
+ # rubocop:disable Lint/ConstantDefinitionInBlock
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  RSpec.describe Adyen::HashWithAccessors do
@@ -19,15 +21,24 @@ RSpec.describe Adyen::HashWithAccessors do
19
21
  end
20
22
 
21
23
  it 'complains if there are arguments for the accessor' do
22
- expect { subject.arbitrary_accessor(1) }.to raise_error(ArgumentError, 'wrong number of arguments (given 1, expected 0)')
23
- expect { subject.arbitrary_accessor(1, 2) }.to raise_error(ArgumentError, 'wrong number of arguments (given 2, expected 0)')
24
+ expect do
25
+ subject.arbitrary_accessor(1)
26
+ end.to raise_error(ArgumentError, 'wrong number of arguments (given 1, expected 0)')
27
+ expect do
28
+ subject.arbitrary_accessor(1, 2)
29
+ end.to raise_error(ArgumentError, 'wrong number of arguments (given 2, expected 0)')
24
30
  end
25
31
 
26
32
  it 'complains if there are arguments for the accessor =' do
27
33
  # using send because i'm not sure how to do this wrong with normal ruby setter calling.
28
34
  # just here for completeness
29
- expect { subject.send(:arbitrary_accessor=) }.to raise_error(ArgumentError, 'wrong number of arguments (given 0, expected 1)')
30
- expect { subject.send(:arbitrary_accessor=, 1, 2) }.to raise_error(ArgumentError, 'wrong number of arguments (given 2, expected 1)')
35
+ expect do
36
+ subject.send(:arbitrary_accessor=)
37
+ end.to raise_error(ArgumentError, 'wrong number of arguments (given 0, expected 1)')
38
+ expect do
39
+ subject.send(:arbitrary_accessor=, 1,
40
+ 2)
41
+ end.to raise_error(ArgumentError, 'wrong number of arguments (given 2, expected 1)')
31
42
  end
32
43
 
33
44
  it 'responds to the accessor' do
@@ -84,8 +95,7 @@ RSpec.describe Adyen::HashWithAccessors do
84
95
 
85
96
  before(:all) do
86
97
  class Hash
87
- def called_super(*args)
88
- end
98
+ def called_super(*args); end
89
99
 
90
100
  def method_missing(*args)
91
101
  called_super(:method_missing, *args)
@@ -118,10 +128,10 @@ RSpec.describe Adyen::HashWithAccessors do
118
128
  expect(subject).to receive(:called_super).with(:method_missing, :something_else)
119
129
  expect { subject.something_else }.to raise_error(NoMethodError)
120
130
  end
121
-
122
131
  end
123
132
 
124
133
  it "doesn't modify all hashes" do
125
- expect { {a: 1}.a }.to raise_error(NoMethodError)
134
+ expect { { a: 1 }.a }.to raise_error(NoMethodError)
126
135
  end
127
136
  end
137
+ # rubocop:enable Lint/ConstantDefinitionInBlock
data/spec/hop_spec.rb CHANGED
@@ -1,14 +1,14 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
- RSpec.describe Adyen::Payments, service: "marketpay hop service" do
3
+ RSpec.describe Adyen::Payment, service: 'marketpay hop service' do
4
4
  # client instance to be used in dynamically generated tests
5
5
  client = create_client(:basic)
6
6
 
7
7
  # methods / values to test for
8
8
  # format is defined in spec_helper
9
9
  test_sets = [
10
- ["get_onboarding_url", "pspReference", "8815850625171183"]
10
+ %w[get_onboarding_url pspReference 8815850625171183]
11
11
  ]
12
12
 
13
- generate_tests(client, "Hop", test_sets, client.marketpay.hop)
13
+ generate_tests(client, 'Hop', test_sets, client.marketpay.hop)
14
14
  end
data/spec/lem_spec.rb ADDED
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+ require 'json'
3
+
4
+ RSpec.describe Adyen::LegalEntityManagement, service: 'LegalEntityManagement' do
5
+ before(:all) do
6
+ @shared_values = {
7
+ client: create_client(:api_key),
8
+ service: 'LegalEntityManagement'
9
+ }
10
+ end
11
+
12
+ # must be created manually because every field in the response is an array
13
+ it 'makes a business_lines POST call' do
14
+ request_body = JSON.parse(json_from_file('mocks/requests/LegalEntityManagement/create_business_line.json'))
15
+
16
+ response_body = json_from_file('mocks/responses/LegalEntityManagement/create_business_line.json')
17
+
18
+ url = @shared_values[:client].service_url(@shared_values[:service], 'businessLines',
19
+ @shared_values[:client].legal_entity_management.version)
20
+ WebMock.stub_request(:post, url)
21
+ .with(
22
+ body: request_body,
23
+ headers: {
24
+ 'x-api-key' => @shared_values[:client].api_key
25
+ }
26
+ )
27
+ .to_return(
28
+ body: response_body
29
+ )
30
+
31
+ result = @shared_values[:client].legal_entity_management.business_lines_api.create_business_line(request_body)
32
+ response_hash = result.response
33
+
34
+ expect(result.status)
35
+ .to eq(200)
36
+ expect(response_hash)
37
+ .to eq(JSON.parse(response_body))
38
+ expect(response_hash)
39
+ .to be_a Adyen::HashWithAccessors
40
+ expect(response_hash)
41
+ .to be_a_kind_of Hash
42
+ end
43
+
44
+ it 'makes a documents DELETE call' do
45
+ url = @shared_values[:client].service_url(@shared_values[:service], 'documents/123',
46
+ @shared_values[:client].legal_entity_management.version)
47
+ WebMock.stub_request(:delete, url)
48
+ .with(
49
+ headers: {
50
+ 'x-api-key' => @shared_values[:client].api_key
51
+ }
52
+ )
53
+ .to_return(
54
+ body: '{}'
55
+ )
56
+
57
+ result = @shared_values[:client].legal_entity_management.documents_api.delete_document('123')
58
+ result.response
59
+
60
+ expect(result.status)
61
+ .to eq(200)
62
+ end
63
+ end