adyen-ruby-api-library 6.2.0 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -1
  3. data/.github/workflows/codeql.yml +41 -0
  4. data/.github/workflows/ruby.yml +1 -1
  5. data/.github/workflows/rubygems_release.yml +1 -1
  6. data/.gitignore +3 -0
  7. data/Makefile +72 -0
  8. data/README.md +20 -18
  9. data/lib/adyen/client.rb +82 -42
  10. data/lib/adyen/errors.rb +2 -2
  11. data/lib/adyen/services/balanceControlService.rb +28 -0
  12. data/lib/adyen/services/balancePlatform/account_holders_api.rb +63 -0
  13. data/lib/adyen/services/balancePlatform/balance_accounts_api.rb +123 -0
  14. data/lib/adyen/services/balancePlatform/bank_account_validation_api.rb +27 -0
  15. data/lib/adyen/services/balancePlatform/grant_accounts_api.rb +27 -0
  16. data/lib/adyen/services/balancePlatform/grant_offers_api.rb +39 -0
  17. data/lib/adyen/services/balancePlatform/payment_instrument_groups_api.rb +51 -0
  18. data/lib/adyen/services/balancePlatform/payment_instruments_api.rb +75 -0
  19. data/lib/adyen/services/balancePlatform/platform_api.rb +39 -0
  20. data/lib/adyen/services/balancePlatform/transaction_rules_api.rb +63 -0
  21. data/lib/adyen/services/balancePlatform.rb +61 -0
  22. data/lib/adyen/services/binLookup.rb +40 -0
  23. data/lib/adyen/services/checkout/classic_checkout_sdk_api.rb +39 -0
  24. data/lib/adyen/services/checkout/modifications_api.rb +87 -0
  25. data/lib/adyen/services/checkout/orders_api.rb +51 -0
  26. data/lib/adyen/services/checkout/payment_links_api.rb +51 -0
  27. data/lib/adyen/services/checkout/payments_api.rb +87 -0
  28. data/lib/adyen/services/checkout/recurring_api.rb +39 -0
  29. data/lib/adyen/services/checkout/utility_api.rb +39 -0
  30. data/lib/adyen/services/checkout.rb +39 -180
  31. data/lib/adyen/services/dataProtection.rb +28 -0
  32. data/lib/adyen/services/legalEntityManagement/business_lines_api.rb +63 -0
  33. data/lib/adyen/services/legalEntityManagement/documents_api.rb +63 -0
  34. data/lib/adyen/services/legalEntityManagement/hosted_onboarding_api.rb +51 -0
  35. data/lib/adyen/services/legalEntityManagement/legal_entities_api.rb +75 -0
  36. data/lib/adyen/services/legalEntityManagement/pci_questionnaires_api.rb +63 -0
  37. data/lib/adyen/services/legalEntityManagement/terms_of_service_api.rb +51 -0
  38. data/lib/adyen/services/legalEntityManagement/transfer_instruments_api.rb +63 -0
  39. data/lib/adyen/services/legalEntityManagement.rb +51 -0
  40. data/lib/adyen/services/management/account_company_level_api.rb +51 -0
  41. data/lib/adyen/services/management/account_merchant_level_api.rb +63 -0
  42. data/lib/adyen/services/management/account_store_level_api.rb +111 -0
  43. data/lib/adyen/services/management/allowed_origins_company_level_api.rb +63 -0
  44. data/lib/adyen/services/management/allowed_origins_merchant_level_api.rb +63 -0
  45. data/lib/adyen/services/management/api_credentials_company_level_api.rb +63 -0
  46. data/lib/adyen/services/management/api_credentials_merchant_level_api.rb +63 -0
  47. data/lib/adyen/services/management/api_key_company_level_api.rb +27 -0
  48. data/lib/adyen/services/management/api_key_merchant_level_api.rb +27 -0
  49. data/lib/adyen/services/management/client_key_company_level_api.rb +27 -0
  50. data/lib/adyen/services/management/client_key_merchant_level_api.rb +27 -0
  51. data/lib/adyen/services/management/my_api_credential_api.rb +75 -0
  52. data/lib/adyen/services/management/payment_methods_merchant_level_api.rb +87 -0
  53. data/lib/adyen/services/management/payout_settings_merchant_level_api.rb +75 -0
  54. data/lib/adyen/services/management/terminal_actions_company_level_api.rb +63 -0
  55. data/lib/adyen/services/management/terminal_actions_terminal_level_api.rb +27 -0
  56. data/lib/adyen/services/management/terminal_orders_company_level_api.rb +135 -0
  57. data/lib/adyen/services/management/terminal_orders_merchant_level_api.rb +135 -0
  58. data/lib/adyen/services/management/terminal_settings_company_level_api.rb +63 -0
  59. data/lib/adyen/services/management/terminal_settings_merchant_level_api.rb +63 -0
  60. data/lib/adyen/services/management/terminal_settings_store_level_api.rb +111 -0
  61. data/lib/adyen/services/management/terminal_settings_terminal_level_api.rb +63 -0
  62. data/lib/adyen/services/management/terminals_terminal_level_api.rb +27 -0
  63. data/lib/adyen/services/management/users_company_level_api.rb +63 -0
  64. data/lib/adyen/services/management/users_merchant_level_api.rb +63 -0
  65. data/lib/adyen/services/management/webhooks_company_level_api.rb +99 -0
  66. data/lib/adyen/services/management/webhooks_merchant_level_api.rb +99 -0
  67. data/lib/adyen/services/management.rb +151 -0
  68. data/lib/adyen/services/payment.rb +172 -0
  69. data/lib/adyen/services/payout/initialization_api.rb +51 -0
  70. data/lib/adyen/services/payout/instant_payouts_api.rb +27 -0
  71. data/lib/adyen/services/payout/reviewing_api.rb +39 -0
  72. data/lib/adyen/services/payout.rb +31 -0
  73. data/lib/adyen/services/posTerminalManagement.rb +76 -0
  74. data/lib/adyen/services/recurring.rb +81 -13
  75. data/lib/adyen/services/service.rb +6 -1
  76. data/lib/adyen/services/storedValue.rb +88 -0
  77. data/lib/adyen/services/transfers/transactions_api.rb +39 -0
  78. data/lib/adyen/services/transfers/transfers_api.rb +27 -0
  79. data/lib/adyen/services/transfers.rb +26 -0
  80. data/lib/adyen/utils/hmac_validator.rb +2 -3
  81. data/lib/adyen/version.rb +2 -2
  82. data/lib/adyen-ruby-api-library.rb +11 -5
  83. data/spec/account_spec.rb +1 -1
  84. data/spec/balance_control_spec.rb +44 -0
  85. data/spec/balance_platform_spec.rb +123 -0
  86. data/spec/bin_lookup_spec.rb +68 -10
  87. data/spec/checkout_spec.rb +85 -62
  88. data/spec/client_spec.rb +89 -10
  89. data/spec/errors_spec.rb +1 -1
  90. data/spec/fund_spec.rb +1 -1
  91. data/spec/hop_spec.rb +1 -1
  92. data/spec/lem_spec.rb +68 -0
  93. data/spec/management_spec.rb +68 -0
  94. data/spec/mocks/requests/BalanceControl/balance_transfer.json +10 -0
  95. data/spec/mocks/requests/BalancePlatform/create_account_holder.json +5 -0
  96. data/spec/mocks/requests/BalancePlatform/update_account_holder.json +10 -0
  97. data/spec/mocks/requests/LegalEntityManagement/create_business_line.json +15 -0
  98. data/spec/mocks/requests/Management/create_store.json +15 -0
  99. data/spec/mocks/requests/Recurring/create_permit.json +6 -0
  100. data/spec/mocks/requests/StoredValue/issue_giftcard.json +12 -0
  101. data/spec/mocks/requests/Transfers/get_transactions.json +82 -0
  102. data/spec/mocks/requests/Transfers/make_transfer.json +32 -0
  103. data/spec/mocks/responses/BalanceControl/balance_transfer.json +14 -0
  104. data/spec/mocks/responses/BalancePlatform/create_account_holder.json +41 -0
  105. data/spec/mocks/responses/BalancePlatform/get_balance_account.json +15 -0
  106. data/spec/mocks/responses/BalancePlatform/update_account_holder.json +16 -0
  107. data/spec/mocks/responses/Checkout/stored_payment_methods.json +1 -0
  108. data/spec/mocks/responses/LegalEntityManagement/create_business_line.json +17 -0
  109. data/spec/mocks/responses/Management/create_store.json +23 -0
  110. data/spec/mocks/responses/Management/get_companies.json +42 -0
  111. data/spec/mocks/responses/Recurring/create_permit.json +4 -0
  112. data/spec/mocks/responses/StoredValue/issue_giftcard.json +13 -0
  113. data/spec/mocks/responses/Transfers/get_transactions.json +82 -0
  114. data/spec/mocks/responses/Transfers/make_transfer.json +36 -0
  115. data/spec/mocks/responses/Webhooks/backslash_notification.json +41 -0
  116. data/spec/mocks/responses/Webhooks/colon_notification.json +41 -0
  117. data/spec/mocks/responses/Webhooks/forwardslash_notification.json +41 -0
  118. data/spec/mocks/responses/Webhooks/mixed_notification.json +41 -0
  119. data/spec/notification_spec.rb +1 -1
  120. data/spec/payments_spec.rb +41 -23
  121. data/spec/payouts_spec.rb +43 -16
  122. data/spec/pos_terminal_management_spec.rb +46 -0
  123. data/spec/recurring_spec.rb +2 -2
  124. data/spec/spec_helper.rb +0 -10
  125. data/spec/stored_value_spec.rb +43 -0
  126. data/spec/transfers_spec.rb +63 -0
  127. data/spec/utils/hmac_validator_spec.rb +20 -6
  128. data/templates/api-single.mustache +29 -0
  129. data/templates/api-small.mustache +37 -0
  130. data/templates/api.mustache +36 -0
  131. data/templates/config.yaml +10 -0
  132. metadata +107 -11
  133. data/lib/adyen/services/bin_lookup.rb +0 -18
  134. data/lib/adyen/services/data_protection.rb +0 -17
  135. data/lib/adyen/services/payments.rb +0 -34
  136. data/lib/adyen/services/payouts.rb +0 -22
  137. data/lib/adyen/services/postfmapi.rb +0 -19
  138. data/spec/mocks/requests/Recurring/store_token.json +0 -15
  139. data/spec/mocks/responses/Recurring/store_token.json +0 -7
  140. data/spec/postfmapi_spec.rb +0 -16
@@ -1,15 +1,73 @@
1
1
  require "spec_helper"
2
+ require "json"
2
3
 
3
- RSpec.describe Adyen::BinLookup, service: "BIN lookup service" do
4
- # client instance to be used in dynamically generated tests
5
- client = create_client(:basic)
4
+ # rubocop:disable Metrics/BlockLength
6
5
 
7
- # methods / values to test for
8
- # format is defined in spec_helper
9
- test_sets = [
10
- ["get_3ds_availability", "threeDS2supported", false],
11
- ["get_cost_estimate", "resultCode", "Success"]
12
- ]
6
+ RSpec.describe Adyen::BinLookup, service: "BinLookup" do
7
+ before(:all) do
8
+ @shared_values = {
9
+ client: create_client(:api_key),
10
+ service: "BinLookup",
11
+ }
12
+ end
13
13
 
14
- generate_tests(client, "BinLookup", test_sets, client.bin_lookup)
14
+ # must be created manually because every field in the response is an array
15
+ it "makes a get_cost_estimate POST call" do
16
+ request_body = JSON.parse(json_from_file("mocks/requests/BinLookup/get_cost_estimate.json"))
17
+
18
+ response_body = json_from_file("mocks/responses/BinLookup/get_cost_estimate.json")
19
+
20
+ url = @shared_values[:client].service_url(@shared_values[:service], "getCostEstimate", @shared_values[:client].bin_lookup.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].bin_lookup.get_cost_estimate(request_body)
33
+ response_hash = result.response
34
+
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
43
+ end
44
+ it "makes a get3ds_availability POST call" do
45
+ request_body = JSON.parse(json_from_file("mocks/requests/BinLookup/get_3ds_availability.json"))
46
+
47
+ response_body = json_from_file("mocks/responses/BinLookup/get_3ds_availability.json")
48
+
49
+ url = @shared_values[:client].service_url(@shared_values[:service], "get3dsAvailability", @shared_values[:client].bin_lookup.version)
50
+ WebMock.stub_request(:post, url).
51
+ with(
52
+ body: request_body,
53
+ headers: {
54
+ "x-api-key" => @shared_values[:client].api_key
55
+ }
56
+ ).
57
+ to_return(
58
+ body: response_body
59
+ )
60
+
61
+ result = @shared_values[:client].bin_lookup.get3ds_availability(request_body)
62
+ response_hash = result.response
63
+
64
+ expect(result.status).
65
+ to eq(200)
66
+ expect(response_hash).
67
+ to eq(JSON.parse(response_body))
68
+ expect(response_hash).
69
+ to be_a Adyen::HashWithAccessors
70
+ expect(response_hash).
71
+ to be_a_kind_of Hash
72
+ end
15
73
  end
@@ -29,7 +29,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
29
29
  body: response_body
30
30
  )
31
31
 
32
- result = @shared_values[:client].checkout.payment_methods(request_body)
32
+ result = @shared_values[:client].checkout.payments_api.payment_methods(request_body)
33
33
  response_hash = result.response
34
34
 
35
35
  expect(result.status).
@@ -44,13 +44,6 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
44
44
 
45
45
  it "makes a paymentMethods/balance call" do
46
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
- }
52
-
53
- @shared_values[:client].add_application_info(request_body)
54
47
 
55
48
  response_body = json_from_file("mocks/responses/Checkout/payment_methods_balance.json")
56
49
 
@@ -66,16 +59,10 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
66
59
  body: response_body
67
60
  )
68
61
 
69
- result = @shared_values[:client].checkout.payment_methods.balance(request_body)
62
+ result = @shared_values[:client].checkout.orders_api.get_balance_of_gift_card(request_body)
70
63
  # result.response is already a Ruby hash (rather than an unparsed JSON string)
71
64
  response_hash = result.response
72
65
 
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
66
  expect(result.status).
80
67
  to eq(200)
81
68
  expect(response_hash).
@@ -91,13 +78,6 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
91
78
  # must be created manually due to payments/details format
92
79
  it "makes a payments/details call" do
93
80
  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",
98
- }
99
-
100
- @shared_values[:client].add_application_info(request_body)
101
81
 
102
82
  response_body = json_from_file("mocks/responses/Checkout/payment-details.json")
103
83
 
@@ -113,16 +93,10 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
113
93
  body: response_body
114
94
  )
115
95
 
116
- result = @shared_values[:client].checkout.payments.details(request_body)
96
+ result = @shared_values[:client].checkout.payments_api.payments_details(request_body)
117
97
  # result.response is already a Ruby hash (rather than an unparsed JSON string)
118
98
  response_hash = result.response
119
99
 
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
100
  expect(result.status).
127
101
  to eq(200)
128
102
  expect(response_hash).
@@ -140,7 +114,6 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
140
114
  # must be created manually due to payments/result format
141
115
  it "makes a payments/result call" do
142
116
  request_body = JSON.parse(json_from_file("mocks/requests/Checkout/payment-result.json"))
143
- @shared_values[:client].add_application_info(request_body)
144
117
 
145
118
  response_body = json_from_file("mocks/responses/Checkout/payment-result.json")
146
119
 
@@ -156,7 +129,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
156
129
  body: response_body
157
130
  )
158
131
 
159
- result = @shared_values[:client].checkout.payments.result(request_body)
132
+ result = @shared_values[:client].checkout.classic_checkout_sdk_api.verify_payment_result(request_body)
160
133
  response_hash = result.response
161
134
 
162
135
  expect(result.status).
@@ -176,13 +149,6 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
176
149
  # must be created manually due to paymentsLinks format
177
150
  it "makes a paymentLinks call" do
178
151
  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
- }
184
-
185
- @shared_values[:client].add_application_info(request_body)
186
152
 
187
153
  response_body = json_from_file("mocks/responses/Checkout/payment_links.json")
188
154
 
@@ -198,7 +164,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
198
164
  body: response_body
199
165
  )
200
166
 
201
- result = @shared_values[:client].checkout.payment_links(request_body)
167
+ result = @shared_values[:client].checkout.payment_links_api.payment_links(request_body)
202
168
  response_hash = result.response
203
169
 
204
170
  expect(result.status).
@@ -226,7 +192,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
226
192
  body: response_body
227
193
  )
228
194
 
229
- result = @shared_values[:client].checkout.payment_links.get("1")
195
+ result = @shared_values[:client].checkout.payment_links_api.get_payment_link("1")
230
196
  response_hash = result.response
231
197
 
232
198
  expect(result.status).
@@ -249,7 +215,6 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
249
215
  :status => "expired",
250
216
  }
251
217
 
252
- @shared_values[:client].add_application_info(request_body)
253
218
  response_body = json_from_file("mocks/responses/Checkout/update-payment-link.json")
254
219
 
255
220
  url = @shared_values[:client].service_url(@shared_values[:service], "paymentLinks/1", @shared_values[:client].checkout.version)
@@ -264,7 +229,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
264
229
  body: response_body
265
230
  )
266
231
 
267
- result = @shared_values[:client].checkout.payment_links.update("1", request_body)
232
+ result = @shared_values[:client].checkout.payment_links_api.update_payment_link(request_body, "1")
268
233
  response_hash = result.response
269
234
 
270
235
  expect(result.status).
@@ -298,7 +263,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
298
263
  body: response_body
299
264
  )
300
265
 
301
- result = @shared_values[:client].checkout.orders(request_body)
266
+ result = @shared_values[:client].checkout.orders_api.orders(request_body)
302
267
  response_hash = result.response
303
268
 
304
269
  expect(result.status).
@@ -330,7 +295,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
330
295
  body: response_body
331
296
  )
332
297
 
333
- result = @shared_values[:client].checkout.orders.cancel(request_body)
298
+ result = @shared_values[:client].checkout.orders_api.cancel_order(request_body)
334
299
  response_hash = result.response
335
300
 
336
301
  expect(result.status).
@@ -362,7 +327,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
362
327
  body: response_body
363
328
  )
364
329
 
365
- result = @shared_values[:client].checkout.apple_pay.sessions(request_body)
330
+ result = @shared_values[:client].checkout.utility_api.get_apple_pay_session(request_body)
366
331
  response_hash = result.response
367
332
 
368
333
  expect(result.status).
@@ -392,7 +357,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
392
357
  )
393
358
  .to_return(body: response_body, status: 201)
394
359
 
395
- result = @shared_values[:client].checkout.sessions(request_body)
360
+ result = @shared_values[:client].checkout.payments_api.sessions(request_body)
396
361
  response_hash = result.response
397
362
 
398
363
  expect(result.status).
@@ -420,7 +385,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
420
385
  )
421
386
  .to_return(body: response_body, status: 201)
422
387
 
423
- result = @shared_values[:client].checkout.modifications.capture("12345", request_body)
388
+ result = @shared_values[:client].checkout.modifications_api.capture_authorised_payment(request_body, "12345")
424
389
  response_hash = result.response
425
390
 
426
391
  expect(result.status).
@@ -452,7 +417,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
452
417
  )
453
418
  .to_return(body: response_body, status: 201)
454
419
 
455
- result = @shared_values[:client].checkout.modifications.cancel("12345", request_body)
420
+ result = @shared_values[:client].checkout.modifications_api.cancel_authorised_payment_by_psp_reference(request_body, "12345")
456
421
  response_hash = result.response
457
422
 
458
423
  expect(result.status).
@@ -484,7 +449,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
484
449
  )
485
450
  .to_return(body: response_body, status: 201)
486
451
 
487
- result = @shared_values[:client].checkout.modifications.refund("12345", request_body)
452
+ result = @shared_values[:client].checkout.modifications_api.refund_captured_payment(request_body, "12345")
488
453
  response_hash = result.response
489
454
 
490
455
  expect(result.status).
@@ -516,7 +481,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
516
481
  )
517
482
  .to_return(body: response_body, status: 201)
518
483
 
519
- result = @shared_values[:client].checkout.modifications.reversal("12345", request_body)
484
+ result = @shared_values[:client].checkout.modifications_api.refund_or_cancel_payment(request_body, "12345")
520
485
  response_hash = result.response
521
486
 
522
487
  expect(result.status).
@@ -548,7 +513,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
548
513
  )
549
514
  .to_return(body: response_body, status: 201)
550
515
 
551
- result = @shared_values[:client].checkout.modifications.amountUpdate("12345", request_body)
516
+ result = @shared_values[:client].checkout.modifications_api.update_authorised_amount(request_body, "12345")
552
517
  response_hash = result.response
553
518
 
554
519
  expect(result.status).
@@ -580,7 +545,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
580
545
  )
581
546
  .to_return(body: response_body, status: 201)
582
547
 
583
- result = @shared_values[:client].checkout.modifications.genericCancel(request_body)
548
+ result = @shared_values[:client].checkout.modifications_api.cancel_authorised_payment(request_body)
584
549
  response_hash = result.response
585
550
 
586
551
  expect(result.status).
@@ -597,18 +562,76 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
597
562
  to eq("12345")
598
563
  end
599
564
 
600
- # create client for automated tests
601
- client = create_client(:api_key)
565
+ it "makes a get storedPaymentMethods call" do
566
+ response_body = json_from_file("mocks/responses/Checkout/stored_payment_methods.json")
567
+
568
+ url = @shared_values[:client].service_url(@shared_values[:service], "storedPaymentMethods?merchantAccount=TestMerchantAccount&shopperReference=test-1234", @shared_values[:client].checkout.version)
569
+ WebMock.stub_request(:get, url).
570
+ with(
571
+ headers: {
572
+ "x-api-key" => @shared_values[:client].api_key
573
+ }
574
+ ).
575
+ to_return(
576
+ body: response_body
577
+ )
578
+
579
+ result = @shared_values[:client].checkout.recurring_api.get_tokens_for_stored_payment_details(queryParams:{"merchantAccount" => "TestMerchantAccount", "shopperReference" => "test-1234"})
580
+ response_hash = result.response
581
+
582
+ expect(result.status).
583
+ to eq(200)
584
+ expect(response_hash).
585
+ to eq(JSON.parse(response_body))
586
+ expect(response_hash).
587
+ to be_a Adyen::HashWithAccessors
588
+ expect(response_hash).
589
+ to be_a_kind_of Hash
590
+ expect(response_hash["shopperReference"]).
591
+ to eq("test-1234")
592
+ end
602
593
 
603
- # methods / fields to test on
604
- # format is defined in spec_helper
605
- test_sets = [
606
- ["payment_session", "publicKeyToken", "8115054323780109"],
607
- ["payments", "resultCode", "Authorised"],
608
- ["origin_keys", "originKeys", { "https://adyen.com" => "mocked_origin_key" }]
609
- ]
594
+ it "makes a delete storedPaymentMethods call" do
595
+
596
+ url = @shared_values[:client].service_url(@shared_values[:service], "storedPaymentMethods/RL8FW7WZM6KXWD82?merchantAccount=TestMerchantAccount&shopperReference=test-1234", @shared_values[:client].checkout.version)
597
+ WebMock.stub_request(:delete, url).
598
+ with(
599
+ headers: {
600
+ "x-api-key" => @shared_values[:client].api_key
601
+ }
602
+ ).
603
+ to_return(
604
+ body: "{}"
605
+ )
606
+
607
+ result = @shared_values[:client].checkout.recurring_api.delete_token_for_stored_payment_details("RL8FW7WZM6KXWD82", queryParams:{"merchantAccount" => "TestMerchantAccount", "shopperReference" => "test-1234"})
608
+ response_hash = result.response
609
+
610
+ expect(result.status).
611
+ to eq(200)
612
+ end
613
+
614
+ it "tests sending the application headers" do
615
+ response_body = json_from_file("mocks/responses/Checkout/stored_payment_methods.json")
616
+
617
+ url = @shared_values[:client].service_url(@shared_values[:service], "storedPaymentMethods?merchantAccount=TestMerchantAccount&shopperReference=test-1234", @shared_values[:client].checkout.version)
618
+ WebMock.stub_request(:get, url).
619
+ with(
620
+ headers: {
621
+ "x-api-key" => @shared_values[:client].api_key
622
+ }
623
+ ).
624
+ to_return(
625
+ body: response_body
626
+ )
627
+
628
+ result = @shared_values[:client].checkout.recurring_api.get_tokens_for_stored_payment_details(queryParams:{"merchantAccount" => "TestMerchantAccount", "shopperReference" => "test-1234"})
629
+ expect(
630
+ a_request(:get, "http://localhost:3001/v70/storedPaymentMethods?merchantAccount=TestMerchantAccount&shopperReference=test-1234")
631
+ .with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Adyen-Library-Name'=>'adyen-ruby-api-library', 'Adyen-Library-Version'=>'7.0.0', 'Content-Type'=>'application/json', 'User-Agent'=>'adyen-ruby-api-library/7.0.0', 'X-Api-Key'=>'api_key'})
632
+ ).to have_been_made.once
633
+ end
610
634
 
611
- generate_tests(client, "Checkout", test_sets, client.checkout)
612
635
  end
613
636
 
614
637
  # rubocop:enable Metrics/BlockLength
data/spec/client_spec.rb CHANGED
@@ -25,15 +25,15 @@ RSpec.describe Adyen do
25
25
  end
26
26
 
27
27
  it "fails payments call without WS user and password" do
28
- expect{ @shared_values[:client].payments.authorise("{}") }.
28
+ expect{ @shared_values[:client].payment.authorise("{}") }.
29
29
  to raise_error(Adyen::AuthenticationError)
30
30
  @shared_values[:client].ws_user = @shared_values[:ws_user]
31
- expect{ @shared_values[:client].payments.authorise("{}") }.
31
+ expect{ @shared_values[:client].payment.authorise("{}") }.
32
32
  to raise_error(Adyen::AuthenticationError)
33
33
  end
34
34
 
35
35
  it "fails a checkout call without api key" do
36
- expect{ @shared_values[:client].checkout.payment_methods("{}") }.
36
+ expect{ @shared_values[:client].checkout.payments_api.payment_methods("{}") }.
37
37
  to raise_error(Adyen::AuthenticationError)
38
38
  @shared_values[:client].api_key = "api_key"
39
39
  end
@@ -60,28 +60,41 @@ RSpec.describe Adyen do
60
60
  client = Adyen::Client.new(env: :test)
61
61
  client.live_url_prefix = "abcdef1234567890-TestCompany"
62
62
  expect(client.service_url_base("Account")).
63
- to eq("https://cal-test.adyen.com/cal/services")
63
+ to eq("https://cal-test.adyen.com/cal/services/Account")
64
64
  end
65
65
 
66
66
  it "generates the correct service URL base for CAL LIVE" do
67
67
  client = Adyen::Client.new(env: :live)
68
68
  client.live_url_prefix = "abcdef1234567890-TestCompany"
69
69
  expect(client.service_url_base("Account")).
70
- to eq("https://cal-live.adyen.com/cal/services")
70
+ to eq("https://cal-live.adyen.com/cal/services/Account")
71
71
  end
72
72
 
73
73
  it "generates the correct service URL base for PAL TEST" do
74
74
  client = Adyen::Client.new(env: :test)
75
75
  client.live_url_prefix = "abcdef1234567890-TestCompany"
76
76
  expect(client.service_url_base("Payment")).
77
- to eq("https://pal-test.adyen.com/pal/servlet")
77
+ to eq("https://pal-test.adyen.com/pal/servlet/Payment")
78
78
  end
79
79
 
80
80
  it "generates the correct service URL base for PAL LIVE" do
81
81
  client = Adyen::Client.new(env: :live)
82
82
  client.live_url_prefix = "abcdef1234567890-TestCompany"
83
83
  expect(client.service_url_base("Payment")).
84
- to eq("https://abcdef1234567890-TestCompany-pal-live.adyenpayments.com/pal/servlet")
84
+ to eq("https://abcdef1234567890-TestCompany-pal-live.adyenpayments.com/pal/servlet/Payment")
85
+ end
86
+
87
+ it "generates the correct service URL PAL authorise TEST" do
88
+ client = Adyen::Client.new(env: :test)
89
+ expect(client.service_url("Payment", "authorise", "68")).
90
+ to eq("https://pal-test.adyen.com/pal/servlet/Payment/v68/authorise")
91
+ end
92
+
93
+ it "generates the correct service URL base for PAL LIVE" do
94
+ client = Adyen::Client.new(env: :live)
95
+ client.live_url_prefix = "abcdef1234567890-TestCompany"
96
+ expect(client.service_url("Payment", "authorise", "68")).
97
+ to eq("https://abcdef1234567890-TestCompany-pal-live.adyenpayments.com/pal/servlet/Payment/v68/authorise")
85
98
  end
86
99
 
87
100
  it "generates a new set of ConnectionOptions when none are provided" do
@@ -106,8 +119,74 @@ RSpec.describe Adyen do
106
119
  mock_response = Faraday::Response.new(status: 200)
107
120
 
108
121
  expect(Adyen::AdyenResult).to receive(:new)
109
- expect(Faraday).to receive(:new).with("http://localhost:3001/v68/payments/details", connection_options).and_return(mock_faraday_connection)
122
+ expect(Faraday).to receive(:new).with("http://localhost:3001/v70/payments/details", connection_options).and_return(mock_faraday_connection)
110
123
  expect(mock_faraday_connection).to receive(:post).and_return(mock_response)
111
- client.checkout.payments.details(request_body)
112
- end
124
+ client.checkout.payments_api.payments_details(request_body)
125
+ end
126
+
127
+ it "checks the creation of checkout url" do
128
+ client = Adyen::Client.new(api_key: "api_key", env: :test)
129
+ expect(client.service_url("Checkout", "paymentMethods", "70")).
130
+ to eq("https://checkout-test.adyen.com/v70/paymentMethods")
131
+ end
132
+
133
+ it "checks the creation of checkout url" do
134
+ client = Adyen::Client.new(api_key: "api_key", env: :live, live_url_prefix: "YourLiveUrlPrefix")
135
+ expect(client.service_url("Checkout", "paymentMethods", "70")).
136
+ to eq("https://YourLiveUrlPrefix-checkout-live.adyenpayments.com/v70/paymentMethods")
137
+ end
138
+ it "checks the creation of lem url" do
139
+ client = Adyen::Client.new(api_key: "api_key", env: :live)
140
+ expect(client.service_url("LegalEntityManagement", "businessLines", "3")).
141
+ to eq("https://kyc-live.adyen.com/lem/v3/businessLines")
142
+ end
143
+
144
+ it "checks the creation of balancePlatform url" do
145
+ client = Adyen::Client.new(api_key: "api_key", env: :live)
146
+ expect(client.service_url("BalancePlatform", "legalEntities", "1")).
147
+ to eq("https://balanceplatform-api-live.adyen.com/bcl/v1/legalEntities")
148
+ end
149
+
150
+ it "checks the creation of balancePlatform url" do
151
+ client = Adyen::Client.new(api_key: "api_key", env: :test)
152
+ expect(client.service_url("BalancePlatform", "legalEntities", "1")).
153
+ to eq("https://balanceplatform-api-test.adyen.com/bcl/v1/legalEntities")
154
+ end
155
+
156
+ it "checks the creation of transfers url" do
157
+ client = Adyen::Client.new(api_key: "api_key", env: :test)
158
+ expect(client.service_url("Transfers", "transactions", "1")).
159
+ to eq("https://balanceplatform-api-test.adyen.com/btl/v1/transactions")
160
+ end
161
+
162
+ it "checks the creation of management url" do
163
+ client = Adyen::Client.new(api_key: "api_key", env: :test)
164
+ expect(client.service_url("Management", "companies", "1")).
165
+ to eq("https://management-test.adyen.com/v1/companies")
166
+ end
167
+
168
+ it "checks the creation of binLookup url" do
169
+ client = Adyen::Client.new(api_key: "api_key", env: :test)
170
+ expect(client.service_url("BinLookup", "getCostEstimate", "54")).
171
+ to eq("https://pal-test.adyen.com/pal/servlet/BinLookup/v54/getCostEstimate")
172
+ end
173
+
174
+ it "check the creation of storedValue url" do
175
+ client = Adyen::Client.new(api_key: "api_key", env: :test)
176
+ expect(client.service_url("StoredValue", "issue", "46")).
177
+ to eq("https://pal-test.adyen.com/pal/servlet/StoredValue/v46/issue")
178
+ end
179
+
180
+ it "check the creation of payout url" do
181
+ client = Adyen::Client.new(api_key: "api_key", env: :test)
182
+ expect(client.service_url("Payout", "declineThirdParty", "68")).
183
+ to eq("https://pal-test.adyen.com/pal/servlet/Payout/v68/declineThirdParty")
184
+ end
185
+
186
+ it "checks the creation of PosTerminalManagement url" do
187
+ client = Adyen::Client.new(api_key: "api_key", env: :test)
188
+ expect(client.service_url("PosTerminalManagement", "assignTerminals", "1")).
189
+ to eq("https://postfmapi-test.adyen.com/postfmapi/terminal/v1/assignTerminals")
190
+ end
191
+
113
192
  end
data/spec/errors_spec.rb CHANGED
@@ -33,7 +33,7 @@ RSpec.describe Adyen::AdyenError do
33
33
  expect(Adyen::AdyenError.new(@shared_values[:request], nil, nil, 'code').to_s).to eq("Adyen::AdyenError code:code, request:#{@shared_values[:request]}")
34
34
  end
35
35
  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]}")
36
+ expect(Adyen::PermissionError.new('message', @shared_values[:request], 'response').to_s).to eq("Adyen::PermissionError code:403, msg:message, request:#{@shared_values[:request]}, response:response")
37
37
  end
38
38
  end
39
39
  describe '#masking' do
data/spec/fund_spec.rb CHANGED
@@ -1,6 +1,6 @@
1
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
 
data/spec/hop_spec.rb CHANGED
@@ -1,6 +1,6 @@
1
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
 
data/spec/lem_spec.rb ADDED
@@ -0,0 +1,68 @@
1
+ require "spec_helper"
2
+ require "json"
3
+
4
+ # rubocop:disable Metrics/BlockLength
5
+
6
+ RSpec.describe Adyen::LegalEntityManagement, service: "LegalEntityManagement" do
7
+ before(:all) do
8
+ @shared_values = {
9
+ client: create_client(:api_key),
10
+ service: "LegalEntityManagement",
11
+ }
12
+ end
13
+
14
+ # must be created manually because every field in the response is an array
15
+ it "makes a business_lines POST call" do
16
+ request_body = JSON.parse(json_from_file("mocks/requests/LegalEntityManagement/create_business_line.json"))
17
+
18
+ response_body = json_from_file("mocks/responses/LegalEntityManagement/create_business_line.json")
19
+
20
+ url = @shared_values[:client].service_url(@shared_values[:service], "businessLines", @shared_values[:client].legal_entity_management.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].legal_entity_management.business_lines_api.create_business_line(request_body)
33
+ response_hash = result.response
34
+
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
43
+ end
44
+
45
+ it "makes a documents DELETE call" do
46
+
47
+
48
+ url = @shared_values[:client].service_url(@shared_values[:service], "documents/123", @shared_values[:client].legal_entity_management.version)
49
+ WebMock.stub_request(:delete, url).
50
+ with(
51
+ headers: {
52
+ "x-api-key" => @shared_values[:client].api_key
53
+ }
54
+ ).
55
+ to_return(
56
+ body: "{}"
57
+ )
58
+
59
+ result = @shared_values[:client].legal_entity_management.documents_api.delete_document('123')
60
+ response_hash = result.response
61
+
62
+ expect(result.status).
63
+ to eq(200)
64
+ end
65
+
66
+
67
+ end
68
+