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
@@ -1,390 +1,667 @@
1
- require "spec_helper"
2
- require "json"
1
+ require 'spec_helper'
2
+ require 'json'
3
3
 
4
- # rubocop:disable Metrics/BlockLength
5
-
6
- RSpec.describe Adyen::Checkout, service: "checkout" do
4
+ RSpec.describe Adyen::Checkout, service: 'checkout' do
7
5
  before(:all) do
8
6
  @shared_values = {
9
7
  client: create_client(:api_key),
10
- service: "Checkout",
8
+ service: 'Checkout'
11
9
  }
12
10
  end
13
11
 
14
12
  # must be created manually because every field in the response is an array
15
- it "makes a payment_methods call" do
16
- request_body = JSON.parse(json_from_file("mocks/requests/Checkout/payment_methods.json"))
17
-
18
- response_body = json_from_file("mocks/responses/Checkout/payment_methods.json")
19
-
20
- url = @shared_values[:client].service_url(@shared_values[:service], "paymentMethods", @shared_values[:client].checkout.version)
21
- WebMock.stub_request(:post, url).
22
- with(
23
- body: request_body,
24
- headers: {
25
- "x-api-key" => @shared_values[:client].api_key
26
- }
27
- ).
28
- to_return(
29
- body: response_body
30
- )
31
-
32
- result = @shared_values[:client].checkout.payment_methods(request_body)
13
+ it 'makes a payment_methods call' do
14
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/payment_methods.json'))
15
+
16
+ response_body = json_from_file('mocks/responses/Checkout/payment_methods.json')
17
+
18
+ url = @shared_values[:client].service_url(@shared_values[:service], 'paymentMethods',
19
+ @shared_values[:client].checkout.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].checkout.payments_api.payment_methods(request_body)
33
32
  response_hash = result.response
34
33
 
35
- expect(result.status).
36
- to eq(200)
37
- expect(response_hash).
38
- to eq(JSON.parse(response_body))
39
- expect(response_hash).
40
- to be_a Adyen::HashWithAccessors
41
- expect(response_hash).
42
- to be_a_kind_of Hash
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
43
42
  end
44
43
 
45
- it "makes a paymentMethods/balance call" do
46
- request_body = JSON.parse(json_from_file("mocks/requests/Checkout/payment_methods_balance.json"))
47
- request_body[:applicationInfo] = {}
48
- request_body[:applicationInfo][:adyenPaymentSource] = {
49
- :name => "adyen-test",
50
- :version => "1.0.0",
51
- }
44
+ it 'makes a paymentMethods/balance call' do
45
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/payment_methods_balance.json'))
46
+
47
+ response_body = json_from_file('mocks/responses/Checkout/payment_methods_balance.json')
48
+
49
+ url = @shared_values[:client].service_url(@shared_values[:service], 'paymentMethods/balance',
50
+ @shared_values[:client].checkout.version)
51
+ WebMock.stub_request(:post, url)
52
+ .with(
53
+ body: request_body,
54
+ headers: {
55
+ 'x-api-key' => @shared_values[:client].api_key
56
+ }
57
+ )
58
+ .to_return(
59
+ body: response_body
60
+ )
61
+
62
+ result = @shared_values[:client].checkout.orders_api.get_balance_of_gift_card(request_body)
63
+ # result.response is already a Ruby hash (rather than an unparsed JSON string)
64
+ response_hash = result.response
52
65
 
53
- @shared_values[:client].add_application_info(request_body)
66
+ expect(result.status)
67
+ .to eq(200)
68
+ expect(response_hash)
69
+ .to eq(JSON.parse(response_body))
70
+ expect(response_hash)
71
+ .to be_a Adyen::HashWithAccessors
72
+ expect(response_hash)
73
+ .to be_a_kind_of Hash
74
+ expect(response_hash['balance'])
75
+ .to eq('100')
76
+ end
54
77
 
55
- response_body = json_from_file("mocks/responses/Checkout/payment_methods_balance.json")
78
+ # must be created manually due to payments/details format
79
+ it 'makes a payments/details call' do
80
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/payment-details.json'))
81
+
82
+ response_body = json_from_file('mocks/responses/Checkout/payment-details.json')
83
+
84
+ url = @shared_values[:client].service_url(@shared_values[:service], 'payments/details',
85
+ @shared_values[:client].checkout.version)
86
+ WebMock.stub_request(:post, url)
87
+ .with(
88
+ body: request_body,
89
+ headers: {
90
+ 'x-api-key' => @shared_values[:client].api_key
91
+ }
92
+ )
93
+ .to_return(
94
+ body: response_body
95
+ )
96
+
97
+ result = @shared_values[:client].checkout.payments_api.payments_details(request_body)
98
+ # result.response is already a Ruby hash (rather than an unparsed JSON string)
99
+ response_hash = result.response
56
100
 
57
- url = @shared_values[:client].service_url(@shared_values[:service], "paymentMethods/balance", @shared_values[:client].checkout.version)
58
- WebMock.stub_request(:post, url).
59
- with(
60
- body: request_body,
61
- headers: {
62
- "x-api-key" => @shared_values[:client].api_key
63
- }
64
- ).
65
- to_return(
66
- body: response_body
67
- )
101
+ expect(result.status)
102
+ .to eq(200)
103
+ expect(response_hash)
104
+ .to eq(JSON.parse(response_body))
105
+ expect(response_hash)
106
+ .to be_a Adyen::HashWithAccessors
107
+ expect(response_hash)
108
+ .to be_a_kind_of Hash
109
+ expect(response_hash['resultCode'])
110
+ .to eq('RedirectShopper')
111
+ expect(response_hash.resultCode)
112
+ .to eq('RedirectShopper')
113
+ end
68
114
 
69
- result = @shared_values[:client].checkout.payment_methods.balance(request_body)
70
- # result.response is already a Ruby hash (rather than an unparsed JSON string)
115
+ # must be created manually due to paymentsLinks format
116
+ it 'makes a paymentLinks call' do
117
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/payment_links.json'))
118
+
119
+ response_body = json_from_file('mocks/responses/Checkout/payment_links.json')
120
+
121
+ url = @shared_values[:client].service_url(@shared_values[:service], 'paymentLinks',
122
+ @shared_values[:client].checkout.version)
123
+ WebMock.stub_request(:post, url)
124
+ .with(
125
+ body: request_body,
126
+ headers: {
127
+ 'x-api-key' => @shared_values[:client].api_key
128
+ }
129
+ )
130
+ .to_return(
131
+ body: response_body
132
+ )
133
+
134
+ result = @shared_values[:client].checkout.payment_links_api.payment_links(request_body)
71
135
  response_hash = result.response
72
136
 
73
- expect(request_body[:applicationInfo][:adyenLibrary][:name]).
74
- to eq(Adyen::NAME)
75
- expect(request_body[:applicationInfo][:adyenLibrary][:version]).
76
- to eq(Adyen::VERSION)
77
- expect(request_body[:applicationInfo][:adyenPaymentSource][:name]).
78
- to eq("adyen-test")
79
- expect(result.status).
80
- to eq(200)
81
- expect(response_hash).
82
- to eq(JSON.parse(response_body))
83
- expect(response_hash).
84
- to be_a Adyen::HashWithAccessors
85
- expect(response_hash).
86
- to be_a_kind_of Hash
87
- expect(response_hash["balance"]).
88
- to eq("100")
137
+ expect(result.status)
138
+ .to eq(200)
139
+ expect(response_hash)
140
+ .to eq(JSON.parse(response_body))
141
+ expect(response_hash)
142
+ .to be_a Adyen::HashWithAccessors
143
+ expect(response_hash)
144
+ .to be_a_kind_of Hash
89
145
  end
90
146
 
91
- # must be created manually due to payments/details format
92
- it "makes a payments/details call" do
93
- request_body = JSON.parse(json_from_file("mocks/requests/Checkout/payment-details.json"))
94
- request_body[:applicationInfo] = {}
95
- request_body[:applicationInfo][:adyenPaymentSource] = {
96
- :name => "adyen-test",
97
- :version => "1.0.0",
147
+ # must be created manually due to paymentsLinks/{linkId} format
148
+ it 'makes a get paymentLinks/{linkId} call' do
149
+ response_body = json_from_file('mocks/responses/Checkout/get-payment-link.json')
150
+
151
+ url = @shared_values[:client].service_url(@shared_values[:service], 'paymentLinks/1',
152
+ @shared_values[:client].checkout.version)
153
+ WebMock.stub_request(:get, url)
154
+ .with(
155
+ headers: {
156
+ 'x-api-key' => @shared_values[:client].api_key
157
+ }
158
+ )
159
+ .to_return(
160
+ body: response_body
161
+ )
162
+
163
+ result = @shared_values[:client].checkout.payment_links_api.get_payment_link('1')
164
+ response_hash = result.response
165
+
166
+ expect(result.status)
167
+ .to eq(200)
168
+ expect(response_hash)
169
+ .to eq(JSON.parse(response_body))
170
+ expect(response_hash)
171
+ .to be_a Adyen::HashWithAccessors
172
+ expect(response_hash)
173
+ .to be_a_kind_of Hash
174
+ expect(response_hash['status'])
175
+ .to eq('active')
176
+ expect(response_hash.id)
177
+ .to eq('MockId')
178
+ end
179
+
180
+ # must be created manually due to paymentsLinks/{linkId} format
181
+ it 'makes a patch paymentLinks/{linkId} call' do
182
+ request_body = {
183
+ status: 'expired'
98
184
  }
99
185
 
100
- @shared_values[:client].add_application_info(request_body)
186
+ response_body = json_from_file('mocks/responses/Checkout/update-payment-link.json')
187
+
188
+ url = @shared_values[:client].service_url(@shared_values[:service], 'paymentLinks/1',
189
+ @shared_values[:client].checkout.version)
190
+ WebMock.stub_request(:patch, url)
191
+ .with(
192
+ body: request_body,
193
+ headers: {
194
+ 'x-api-key' => @shared_values[:client].api_key
195
+ }
196
+ )
197
+ .to_return(
198
+ body: response_body
199
+ )
200
+
201
+ result = @shared_values[:client].checkout.payment_links_api.update_payment_link(request_body, '1')
202
+ response_hash = result.response
203
+
204
+ expect(result.status)
205
+ .to eq(200)
206
+ expect(response_hash)
207
+ .to eq(JSON.parse(response_body))
208
+ expect(response_hash)
209
+ .to be_a Adyen::HashWithAccessors
210
+ expect(response_hash)
211
+ .to be_a_kind_of Hash
212
+ expect(response_hash['status'])
213
+ .to eq('expired')
214
+ expect(response_hash.id)
215
+ .to eq('MockId')
216
+ end
101
217
 
102
- response_body = json_from_file("mocks/responses/Checkout/payment-details.json")
218
+ it 'makes an orders call' do
219
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/orders.json'))
220
+
221
+ response_body = json_from_file('mocks/responses/Checkout/orders.json')
222
+
223
+ url = @shared_values[:client].service_url(@shared_values[:service], 'orders',
224
+ @shared_values[:client].checkout.version)
225
+ WebMock.stub_request(:post, url)
226
+ .with(
227
+ body: request_body,
228
+ headers: {
229
+ 'x-api-key' => @shared_values[:client].api_key
230
+ }
231
+ )
232
+ .to_return(
233
+ body: response_body
234
+ )
235
+
236
+ result = @shared_values[:client].checkout.orders_api.orders(request_body)
237
+ response_hash = result.response
103
238
 
104
- url = @shared_values[:client].service_url(@shared_values[:service], "payments/details", @shared_values[:client].checkout.version)
105
- WebMock.stub_request(:post, url).
106
- with(
107
- body: request_body,
108
- headers: {
109
- "x-api-key" => @shared_values[:client].api_key
110
- }
111
- ).
112
- to_return(
113
- body: response_body
114
- )
239
+ expect(result.status)
240
+ .to eq(200)
241
+ expect(response_hash)
242
+ .to eq(JSON.parse(response_body))
243
+ expect(response_hash)
244
+ .to be_a Adyen::HashWithAccessors
245
+ expect(response_hash)
246
+ .to be_a_kind_of Hash
247
+ expect(response_hash['remainingAmount']['value'])
248
+ .to eq(100)
249
+ end
115
250
 
116
- result = @shared_values[:client].checkout.payments.details(request_body)
117
- # result.response is already a Ruby hash (rather than an unparsed JSON string)
251
+ it 'makes an orders/cancel call' do
252
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/orders_cancel.json'))
253
+
254
+ response_body = json_from_file('mocks/responses/Checkout/orders_cancel.json')
255
+
256
+ url = @shared_values[:client].service_url(@shared_values[:service], 'orders/cancel',
257
+ @shared_values[:client].checkout.version)
258
+ WebMock.stub_request(:post, url)
259
+ .with(
260
+ body: request_body,
261
+ headers: {
262
+ 'x-api-key' => @shared_values[:client].api_key
263
+ }
264
+ )
265
+ .to_return(
266
+ body: response_body
267
+ )
268
+
269
+ result = @shared_values[:client].checkout.orders_api.cancel_order(request_body)
118
270
  response_hash = result.response
119
271
 
120
- expect(request_body[:applicationInfo][:adyenLibrary][:name]).
121
- to eq(Adyen::NAME)
122
- expect(request_body[:applicationInfo][:adyenLibrary][:version]).
123
- to eq(Adyen::VERSION)
124
- expect(request_body[:applicationInfo][:adyenPaymentSource][:name]).
125
- to eq("adyen-test")
126
- expect(result.status).
127
- to eq(200)
128
- expect(response_hash).
129
- to eq(JSON.parse(response_body))
130
- expect(response_hash).
131
- to be_a Adyen::HashWithAccessors
132
- expect(response_hash).
133
- to be_a_kind_of Hash
134
- expect(response_hash["resultCode"]).
135
- to eq("RedirectShopper")
136
- expect(response_hash.resultCode).
137
- to eq("RedirectShopper")
272
+ expect(result.status)
273
+ .to eq(200)
274
+ expect(response_hash)
275
+ .to eq(JSON.parse(response_body))
276
+ expect(response_hash)
277
+ .to be_a Adyen::HashWithAccessors
278
+ expect(response_hash)
279
+ .to be_a_kind_of Hash
280
+ expect(response_hash['resultCode'])
281
+ .to eq('cancelled')
138
282
  end
139
283
 
140
- # must be created manually due to payments/result format
141
- it "makes a payments/result call" do
142
- request_body = JSON.parse(json_from_file("mocks/requests/Checkout/payment-result.json"))
143
- @shared_values[:client].add_application_info(request_body)
144
-
145
- response_body = json_from_file("mocks/responses/Checkout/payment-result.json")
146
-
147
- url = @shared_values[:client].service_url(@shared_values[:service], "payments/result", @shared_values[:client].checkout.version)
148
- WebMock.stub_request(:post, url).
149
- with(
150
- body: request_body,
151
- headers: {
152
- "x-api-key" => @shared_values[:client].api_key
153
- }
154
- ).
155
- to_return(
156
- body: response_body
157
- )
158
-
159
- result = @shared_values[:client].checkout.payments.result(request_body)
284
+ it 'makes an applePay/sessions call' do
285
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/apple_pay_sessions.json'))
286
+
287
+ response_body = json_from_file('mocks/responses/Checkout/apple_pay_sessions.json')
288
+
289
+ url = @shared_values[:client].service_url(@shared_values[:service], 'applePay/sessions',
290
+ @shared_values[:client].checkout.version)
291
+ WebMock.stub_request(:post, url)
292
+ .with(
293
+ body: request_body,
294
+ headers: {
295
+ 'x-api-key' => @shared_values[:client].api_key
296
+ }
297
+ )
298
+ .to_return(
299
+ body: response_body
300
+ )
301
+
302
+ result = @shared_values[:client].checkout.utility_api.get_apple_pay_session(request_body)
160
303
  response_hash = result.response
161
304
 
162
- expect(result.status).
163
- to eq(200)
164
- expect(response_hash).
165
- to eq(JSON.parse(response_body))
166
- expect(response_hash).
167
- to be_a Adyen::HashWithAccessors
168
- expect(response_hash).
169
- to be_a_kind_of Hash
170
- expect(response_hash["resultCode"]).
171
- to eq("Authorised")
172
- expect(response_hash.resultCode).
173
- to eq("Authorised")
305
+ expect(result.status)
306
+ .to eq(200)
307
+ expect(response_hash)
308
+ .to eq(JSON.parse(response_body))
309
+ expect(response_hash)
310
+ .to be_a Adyen::HashWithAccessors
311
+ expect(response_hash)
312
+ .to be_a_kind_of Hash
313
+ expect(response_hash['data'])
314
+ .to eq('LARGE_BLOB_HERE')
174
315
  end
175
316
 
176
- # must be created manually due to paymentsLinks format
177
- it "makes a paymentLinks call" do
178
- request_body = JSON.parse(json_from_file("mocks/requests/Checkout/payment_links.json"))
179
- request_body[:applicationInfo] = {}
180
- request_body[:applicationInfo][:adyenPaymentSource] = {
181
- :name => "adyen-test",
182
- :version => "1.0.0",
183
- }
317
+ it 'makes a sessions call' do
318
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/sessions.json'))
319
+
320
+ response_body = json_from_file('mocks/responses/Checkout/sessions-success.json')
321
+
322
+ url = @shared_values[:client].service_url(@shared_values[:service], 'sessions',
323
+ @shared_values[:client].checkout.version)
324
+ WebMock.stub_request(:post, url)
325
+ .with(
326
+ body: request_body,
327
+ headers: {
328
+ 'x-api-key' => @shared_values[:client].api_key
329
+ }
330
+ )
331
+ .to_return(body: response_body, status: 201)
184
332
 
185
- @shared_values[:client].add_application_info(request_body)
333
+ result = @shared_values[:client].checkout.payments_api.sessions(request_body)
334
+ response_hash = result.response
335
+
336
+ expect(result.status)
337
+ .to eq(201)
338
+ expect(response_hash)
339
+ .to eq(JSON.parse(response_body))
340
+ expect(response_hash)
341
+ .to be_a Adyen::HashWithAccessors
342
+ expect(response_hash)
343
+ .to be_a_kind_of Hash
344
+ end
186
345
 
187
- response_body = json_from_file("mocks/responses/Checkout/payment_links.json")
346
+ it 'makes a capture call' do
347
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/capture.json'))
188
348
 
189
- url = @shared_values[:client].service_url(@shared_values[:service], "paymentLinks", @shared_values[:client].checkout.version)
190
- WebMock.stub_request(:post, url).
191
- with(
192
- body: request_body,
193
- headers: {
194
- "x-api-key" => @shared_values[:client].api_key
195
- }
196
- ).
197
- to_return(
198
- body: response_body
199
- )
349
+ response_body = json_from_file('mocks/responses/Checkout/capture.json')
200
350
 
201
- result = @shared_values[:client].checkout.payment_links(request_body)
351
+ url = @shared_values[:client].service_url(@shared_values[:service], 'payments/12345/captures',
352
+ @shared_values[:client].checkout.version)
353
+ WebMock.stub_request(:post, url)
354
+ .with(
355
+ body: request_body,
356
+ headers: {
357
+ 'x-api-key' => @shared_values[:client].api_key
358
+ }
359
+ )
360
+ .to_return(body: response_body, status: 201)
361
+
362
+ result = @shared_values[:client].checkout.modifications_api.capture_authorised_payment(request_body, '12345')
202
363
  response_hash = result.response
203
364
 
204
- expect(result.status).
205
- to eq(200)
206
- expect(response_hash).
207
- to eq(JSON.parse(response_body))
208
- expect(response_hash).
209
- to be_a Adyen::HashWithAccessors
210
- expect(response_hash).
211
- to be_a_kind_of Hash
365
+ expect(result.status)
366
+ .to eq(201)
367
+ expect(response_hash)
368
+ .to eq(JSON.parse(response_body))
369
+ expect(response_hash)
370
+ .to be_a Adyen::HashWithAccessors
371
+ expect(response_hash)
372
+ .to be_a_kind_of Hash
373
+ expect(response_hash.reference)
374
+ .to eq('123456789')
375
+ expect(response_hash.pspReference)
376
+ .to eq('12345')
212
377
  end
213
378
 
214
- # must be created manually due to paymentsLinks/{linkId} format
215
- it "makes a get paymentLinks/{linkId} call" do
216
- response_body = json_from_file("mocks/responses/Checkout/get-payment-link.json")
217
-
218
- url = @shared_values[:client].service_url(@shared_values[:service], "paymentLinks/1", @shared_values[:client].checkout.version)
219
- WebMock.stub_request(:get, url).
220
- with(
221
- headers: {
222
- "x-api-key" => @shared_values[:client].api_key
223
- }
224
- ).
225
- to_return(
226
- body: response_body
227
- )
228
-
229
- result = @shared_values[:client].checkout.payment_links.get("1")
379
+ it 'makes a psp specific cancel call' do
380
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/psp_cancel.json'))
381
+
382
+ response_body = json_from_file('mocks/responses/Checkout/psp_cancel.json')
383
+
384
+ url = @shared_values[:client].service_url(@shared_values[:service], 'payments/12345/cancels',
385
+ @shared_values[:client].checkout.version)
386
+ WebMock.stub_request(:post, url)
387
+ .with(
388
+ body: request_body,
389
+ headers: {
390
+ 'x-api-key' => @shared_values[:client].api_key
391
+ }
392
+ )
393
+ .to_return(body: response_body, status: 201)
394
+
395
+ result = @shared_values[:client].checkout.modifications_api.cancel_authorised_payment_by_psp_reference(
396
+ request_body, '12345'
397
+ )
230
398
  response_hash = result.response
231
399
 
232
- expect(result.status).
233
- to eq(200)
234
- expect(response_hash).
235
- to eq(JSON.parse(response_body))
236
- expect(response_hash).
237
- to be_a Adyen::HashWithAccessors
238
- expect(response_hash).
239
- to be_a_kind_of Hash
240
- expect(response_hash["status"]).
241
- to eq("active")
242
- expect(response_hash.id).
243
- to eq("MockId")
400
+ expect(result.status)
401
+ .to eq(201)
402
+ expect(response_hash)
403
+ .to eq(JSON.parse(response_body))
404
+ expect(response_hash)
405
+ .to be_a Adyen::HashWithAccessors
406
+ expect(response_hash)
407
+ .to be_a_kind_of Hash
408
+ expect(response_hash.reference)
409
+ .to eq('123456789')
410
+ expect(response_hash.pspReference)
411
+ .to eq('12345')
244
412
  end
245
413
 
246
- # must be created manually due to paymentsLinks/{linkId} format
247
- it "makes a patch paymentLinks/{linkId} call" do
248
- request_body = {
249
- :status => "expired",
250
- }
414
+ it 'makes a psp specific refunds call' do
415
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/refund.json'))
416
+
417
+ response_body = json_from_file('mocks/responses/Checkout/refund.json')
251
418
 
252
- @shared_values[:client].add_application_info(request_body)
253
- response_body = json_from_file("mocks/responses/Checkout/update-payment-link.json")
254
-
255
- url = @shared_values[:client].service_url(@shared_values[:service], "paymentLinks/1", @shared_values[:client].checkout.version)
256
- WebMock.stub_request(:patch, url).
257
- with(
258
- body: request_body,
259
- headers: {
260
- "x-api-key" => @shared_values[:client].api_key
261
- }
262
- ).
263
- to_return(
264
- body: response_body
265
- )
266
-
267
- result = @shared_values[:client].checkout.payment_links.update("1", request_body)
419
+ url = @shared_values[:client].service_url(@shared_values[:service], 'payments/12345/refunds',
420
+ @shared_values[:client].checkout.version)
421
+ WebMock.stub_request(:post, url)
422
+ .with(
423
+ body: request_body,
424
+ headers: {
425
+ 'x-api-key' => @shared_values[:client].api_key
426
+ }
427
+ )
428
+ .to_return(body: response_body, status: 201)
429
+
430
+ result = @shared_values[:client].checkout.modifications_api.refund_captured_payment(request_body, '12345')
268
431
  response_hash = result.response
269
432
 
270
- expect(result.status).
271
- to eq(200)
272
- expect(response_hash).
273
- to eq(JSON.parse(response_body))
274
- expect(response_hash).
275
- to be_a Adyen::HashWithAccessors
276
- expect(response_hash).
277
- to be_a_kind_of Hash
278
- expect(response_hash["status"]).
279
- to eq("expired")
280
- expect(response_hash.id).
281
- to eq("MockId")
433
+ expect(result.status)
434
+ .to eq(201)
435
+ expect(response_hash)
436
+ .to eq(JSON.parse(response_body))
437
+ expect(response_hash)
438
+ .to be_a Adyen::HashWithAccessors
439
+ expect(response_hash)
440
+ .to be_a_kind_of Hash
441
+ expect(response_hash.reference)
442
+ .to eq('123456789')
443
+ expect(response_hash.pspReference)
444
+ .to eq('12345')
282
445
  end
283
446
 
284
- it "makes an orders call" do
285
- request_body = JSON.parse(json_from_file("mocks/requests/Checkout/orders.json"))
447
+ it 'makes a psp specific reversals call' do
448
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/psp_cancel.json'))
286
449
 
287
- response_body = json_from_file("mocks/responses/Checkout/orders.json")
450
+ response_body = json_from_file('mocks/responses/Checkout/psp_cancel.json')
288
451
 
289
- url = @shared_values[:client].service_url(@shared_values[:service], "orders", @shared_values[:client].checkout.version)
290
- WebMock.stub_request(:post, url).
291
- with(
292
- body: request_body,
293
- headers: {
294
- "x-api-key" => @shared_values[:client].api_key
295
- }
296
- ).
297
- to_return(
298
- body: response_body
299
- )
452
+ url = @shared_values[:client].service_url(@shared_values[:service], 'payments/12345/reversals',
453
+ @shared_values[:client].checkout.version)
454
+ WebMock.stub_request(:post, url)
455
+ .with(
456
+ body: request_body,
457
+ headers: {
458
+ 'x-api-key' => @shared_values[:client].api_key
459
+ }
460
+ )
461
+ .to_return(body: response_body, status: 201)
300
462
 
301
- result = @shared_values[:client].checkout.orders(request_body)
463
+ result = @shared_values[:client].checkout.modifications_api.refund_or_cancel_payment(request_body, '12345')
302
464
  response_hash = result.response
303
465
 
304
- expect(result.status).
305
- to eq(200)
306
- expect(response_hash).
307
- to eq(JSON.parse(response_body))
308
- expect(response_hash).
309
- to be_a Adyen::HashWithAccessors
310
- expect(response_hash).
311
- to be_a_kind_of Hash
312
- expect(response_hash["remainingAmount"]["value"]).
313
- to eq(100)
466
+ expect(result.status)
467
+ .to eq(201)
468
+ expect(response_hash)
469
+ .to eq(JSON.parse(response_body))
470
+ expect(response_hash)
471
+ .to be_a Adyen::HashWithAccessors
472
+ expect(response_hash)
473
+ .to be_a_kind_of Hash
474
+ expect(response_hash.reference)
475
+ .to eq('123456789')
476
+ expect(response_hash.pspReference)
477
+ .to eq('12345')
314
478
  end
315
479
 
316
- it "makes an orders/cancel call" do
317
- request_body = JSON.parse(json_from_file("mocks/requests/Checkout/orders_cancel.json"))
480
+ it 'makes a psp specific amountUpdates call' do
481
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/amount_updates.json'))
318
482
 
319
- response_body = json_from_file("mocks/responses/Checkout/orders_cancel.json")
483
+ response_body = json_from_file('mocks/responses/Checkout/amount_updates.json')
320
484
 
321
- url = @shared_values[:client].service_url(@shared_values[:service], "orders/cancel", @shared_values[:client].checkout.version)
322
- WebMock.stub_request(:post, url).
323
- with(
324
- body: request_body,
325
- headers: {
326
- "x-api-key" => @shared_values[:client].api_key
327
- }
328
- ).
329
- to_return(
330
- body: response_body
331
- )
485
+ url = @shared_values[:client].service_url(@shared_values[:service], 'payments/12345/amountUpdates',
486
+ @shared_values[:client].checkout.version)
487
+ WebMock.stub_request(:post, url)
488
+ .with(
489
+ body: request_body,
490
+ headers: {
491
+ 'x-api-key' => @shared_values[:client].api_key
492
+ }
493
+ )
494
+ .to_return(body: response_body, status: 201)
332
495
 
333
- result = @shared_values[:client].checkout.orders.cancel(request_body)
496
+ result = @shared_values[:client].checkout.modifications_api.update_authorised_amount(request_body, '12345')
334
497
  response_hash = result.response
335
498
 
336
- expect(result.status).
337
- to eq(200)
338
- expect(response_hash).
339
- to eq(JSON.parse(response_body))
340
- expect(response_hash).
341
- to be_a Adyen::HashWithAccessors
342
- expect(response_hash).
343
- to be_a_kind_of Hash
344
- expect(response_hash["resultCode"]).
345
- to eq("cancelled")
499
+ expect(result.status)
500
+ .to eq(201)
501
+ expect(response_hash)
502
+ .to eq(JSON.parse(response_body))
503
+ expect(response_hash)
504
+ .to be_a Adyen::HashWithAccessors
505
+ expect(response_hash)
506
+ .to be_a_kind_of Hash
507
+ expect(response_hash.reference)
508
+ .to eq('123456789')
509
+ expect(response_hash.pspReference)
510
+ .to eq('12345')
346
511
  end
347
512
 
348
- it "makes a sessions call" do
349
- request_body = JSON.parse(json_from_file("mocks/requests/Checkout/sessions.json"))
513
+ it 'makes a generic cancel call' do
514
+ request_body = JSON.parse(json_from_file('mocks/requests/Checkout/generic_cancel.json'))
515
+
516
+ response_body = json_from_file('mocks/responses/Checkout/generic_cancel.json')
517
+
518
+ url = @shared_values[:client].service_url(@shared_values[:service], 'cancels',
519
+ @shared_values[:client].checkout.version)
520
+ WebMock.stub_request(:post, url)
521
+ .with(
522
+ body: request_body,
523
+ headers: {
524
+ 'x-api-key' => @shared_values[:client].api_key
525
+ }
526
+ )
527
+ .to_return(body: response_body, status: 201)
350
528
 
351
- response_body = json_from_file("mocks/responses/Checkout/sessions-success.json")
529
+ result = @shared_values[:client].checkout.modifications_api.cancel_authorised_payment(request_body)
530
+ response_hash = result.response
352
531
 
353
- url = @shared_values[:client].service_url(@shared_values[:service], "sessions", @shared_values[:client].checkout.version)
354
- WebMock.stub_request(:post, url).
355
- with(
356
- body: request_body,
357
- headers: {
358
- "x-api-key" => @shared_values[:client].api_key
359
- }
360
- )
361
- .to_return(body: response_body, status: 201)
532
+ expect(result.status)
533
+ .to eq(201)
534
+ expect(response_hash)
535
+ .to eq(JSON.parse(response_body))
536
+ expect(response_hash)
537
+ .to be_a Adyen::HashWithAccessors
538
+ expect(response_hash)
539
+ .to be_a_kind_of Hash
540
+ expect(response_hash.reference)
541
+ .to eq('123456789')
542
+ expect(response_hash.pspReference)
543
+ .to eq('12345')
544
+ end
362
545
 
363
- result = @shared_values[:client].checkout.sessions(request_body)
546
+ it 'makes a get storedPaymentMethods call' do
547
+ response_body = json_from_file('mocks/responses/Checkout/stored_payment_methods.json')
548
+
549
+ url = @shared_values[:client].service_url(
550
+ @shared_values[:service],
551
+ 'storedPaymentMethods?merchantAccount=TestMerchantAccount&shopperReference=test-1234',
552
+ @shared_values[:client].checkout.version
553
+ )
554
+ WebMock.stub_request(:get, url)
555
+ .with(
556
+ headers: {
557
+ 'x-api-key' => @shared_values[:client].api_key
558
+ }
559
+ )
560
+ .to_return(
561
+ body: response_body
562
+ )
563
+
564
+ result = @shared_values[:client].checkout.recurring_api.get_tokens_for_stored_payment_details(
565
+ query_params: {
566
+ 'merchantAccount' => 'TestMerchantAccount',
567
+ 'shopperReference' => 'test-1234'
568
+ }
569
+ )
364
570
  response_hash = result.response
365
571
 
366
- expect(result.status).
367
- to eq(201)
368
- expect(response_hash).
369
- to eq(JSON.parse(response_body))
370
- expect(response_hash).
371
- to be_a Adyen::HashWithAccessors
372
- expect(response_hash).
373
- to be_a_kind_of Hash
572
+ expect(result.status)
573
+ .to eq(200)
574
+ expect(response_hash)
575
+ .to eq(JSON.parse(response_body))
576
+ expect(response_hash)
577
+ .to be_a Adyen::HashWithAccessors
578
+ expect(response_hash)
579
+ .to be_a_kind_of Hash
580
+ expect(response_hash['shopperReference'])
581
+ .to eq('test-1234')
582
+ end
583
+
584
+ it 'makes a delete storedPaymentMethods call' do
585
+ url = @shared_values[:client].service_url(
586
+ @shared_values[:service],
587
+ 'storedPaymentMethods/RL8FW7WZM6KXWD82?merchantAccount=TestMerchantAccount&shopperReference=test-1234',
588
+ @shared_values[:client].checkout.version
589
+ )
590
+ WebMock.stub_request(:delete, url)
591
+ .with(
592
+ headers: {
593
+ 'x-api-key' => @shared_values[:client].api_key
594
+ }
595
+ )
596
+ .to_return(
597
+ body: '{}'
598
+ )
599
+
600
+ result = @shared_values[:client].checkout.recurring_api.delete_token_for_stored_payment_details(
601
+ 'RL8FW7WZM6KXWD82',
602
+ query_params: {
603
+ 'merchantAccount' => 'TestMerchantAccount',
604
+ 'shopperReference' => 'test-1234'
605
+ }
606
+ )
607
+ result.response
608
+
609
+ expect(result.status)
610
+ .to eq(200)
611
+ end
612
+
613
+ it 'tests sending the application headers' do
614
+ response_body = json_from_file('mocks/responses/Checkout/stored_payment_methods.json')
615
+
616
+ url = @shared_values[:client].service_url(
617
+ @shared_values[:service],
618
+ 'storedPaymentMethods?merchantAccount=TestMerchantAccount&shopperReference=test-1234',
619
+ @shared_values[:client].checkout.version
620
+ )
621
+ WebMock.stub_request(:get, url)
622
+ .with(
623
+ headers: {
624
+ 'x-api-key' => @shared_values[:client].api_key
625
+ }
626
+ )
627
+ .to_return(
628
+ body: response_body
629
+ )
630
+
631
+ @shared_values[:client].checkout.recurring_api.get_tokens_for_stored_payment_details(query_params:
632
+ {
633
+ 'merchantAccount' => 'TestMerchantAccount',
634
+ 'shopperReference' => 'test-1234'
635
+ })
636
+ expect(
637
+ a_request(:get, 'http://localhost:3001/v71/storedPaymentMethods?merchantAccount=TestMerchantAccount&shopperReference=test-1234')
638
+ .with(headers: {
639
+ 'Accept' => '*/*',
640
+ 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
641
+ 'Adyen-Library-Name' => 'adyen-ruby-api-library',
642
+ 'Adyen-Library-Version' => Adyen::VERSION,
643
+ 'Content-Type' => 'application/json',
644
+ 'User-Agent' => 'adyen-ruby-api-library/' + Adyen::VERSION,
645
+ 'X-Api-Key' => 'api_key'
646
+ })
647
+ ).to have_been_made.once
374
648
  end
375
649
 
376
- # create client for automated tests
377
- client = create_client(:api_key)
650
+ # must be created manually because every field in the response is an array
651
+ it 'makes a LIVE paymentMethods call' do
652
+ JSON.parse(json_from_file('mocks/requests/Checkout/payment_methods.json'))
653
+
654
+ json_from_file('mocks/responses/Checkout/payment_methods.json')
378
655
 
379
- # methods / fields to test on
380
- # format is defined in spec_helper
381
- test_sets = [
382
- ["payment_session", "publicKeyToken", "8115054323780109"],
383
- ["payments", "resultCode", "Authorised"],
384
- ["origin_keys", "originKeys", { "https://adyen.com" => "mocked_origin_key" }]
385
- ]
656
+ adyen = Adyen::Client.new
657
+ adyen.api_key = 'AF5XXXXXXXXXXXXXXXXXXXX'
658
+ adyen.env = :live
659
+ adyen.live_url_prefix = 'prefix'
660
+ url = adyen.service_url('Checkout', 'paymentMethods', @shared_values[:client].checkout.version)
386
661
 
387
- generate_tests(client, "Checkout", test_sets, client.checkout)
662
+ expect(url)
663
+ .to eq('https://prefix-checkout-live.adyenpayments.com/checkout/v71/paymentMethods')
664
+ end
388
665
  end
389
666
 
390
667
  # rubocop:enable Metrics/BlockLength