stripe 4.9.0 → 5.1.0

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 (224) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +10 -0
  3. data/.rubocop.yml +28 -4
  4. data/.rubocop_todo.yml +11 -22
  5. data/.travis.yml +3 -6
  6. data/.vscode/extensions.json +7 -0
  7. data/.vscode/settings.json +8 -0
  8. data/CHANGELOG.md +102 -2
  9. data/Gemfile +2 -10
  10. data/README.md +96 -40
  11. data/Rakefile +8 -7
  12. data/VERSION +1 -1
  13. data/lib/stripe.rb +64 -85
  14. data/lib/stripe/api_operations/delete.rb +23 -1
  15. data/lib/stripe/api_operations/list.rb +0 -6
  16. data/lib/stripe/api_operations/nested_resource.rb +14 -7
  17. data/lib/stripe/api_operations/request.rb +3 -7
  18. data/lib/stripe/api_operations/save.rb +1 -3
  19. data/lib/stripe/api_resource.rb +50 -2
  20. data/lib/stripe/connection_manager.rb +141 -0
  21. data/lib/stripe/error_object.rb +94 -0
  22. data/lib/stripe/errors.rb +22 -9
  23. data/lib/stripe/list_object.rb +11 -5
  24. data/lib/stripe/multipart_encoder.rb +131 -0
  25. data/lib/stripe/object_types.rb +94 -0
  26. data/lib/stripe/resources.rb +77 -0
  27. data/lib/stripe/{account.rb → resources/account.rb} +49 -27
  28. data/lib/stripe/{account_link.rb → resources/account_link.rb} +1 -1
  29. data/lib/stripe/resources/alipay_account.rb +34 -0
  30. data/lib/stripe/{apple_pay_domain.rb → resources/apple_pay_domain.rb} +1 -1
  31. data/lib/stripe/resources/application_fee.rb +13 -0
  32. data/lib/stripe/resources/application_fee_refund.rb +30 -0
  33. data/lib/stripe/{balance.rb → resources/balance.rb} +1 -1
  34. data/lib/stripe/{balance_transaction.rb → resources/balance_transaction.rb} +1 -5
  35. data/lib/stripe/{bank_account.rb → resources/bank_account.rb} +14 -4
  36. data/lib/stripe/{bitcoin_receiver.rb → resources/bitcoin_receiver.rb} +3 -3
  37. data/lib/stripe/{bitcoin_transaction.rb → resources/bitcoin_transaction.rb} +1 -1
  38. data/lib/stripe/resources/capability.rb +33 -0
  39. data/lib/stripe/{card.rb → resources/card.rb} +12 -4
  40. data/lib/stripe/resources/charge.rb +22 -0
  41. data/lib/stripe/{checkout → resources/checkout}/session.rb +2 -2
  42. data/lib/stripe/{country_spec.rb → resources/country_spec.rb} +1 -1
  43. data/lib/stripe/{coupon.rb → resources/coupon.rb} +2 -2
  44. data/lib/stripe/resources/credit_note.rb +22 -0
  45. data/lib/stripe/resources/customer.rb +35 -0
  46. data/lib/stripe/resources/customer_balance_transaction.rb +30 -0
  47. data/lib/stripe/resources/discount.rb +7 -0
  48. data/lib/stripe/{dispute.rb → resources/dispute.rb} +9 -7
  49. data/lib/stripe/{ephemeral_key.rb → resources/ephemeral_key.rb} +5 -2
  50. data/lib/stripe/{event.rb → resources/event.rb} +1 -1
  51. data/lib/stripe/{exchange_rate.rb → resources/exchange_rate.rb} +1 -1
  52. data/lib/stripe/{file.rb → resources/file.rb} +8 -11
  53. data/lib/stripe/{file_link.rb → resources/file_link.rb} +2 -2
  54. data/lib/stripe/resources/invoice.rb +73 -0
  55. data/lib/stripe/{invoice_item.rb → resources/invoice_item.rb} +2 -2
  56. data/lib/stripe/{invoice_line_item.rb → resources/invoice_line_item.rb} +1 -1
  57. data/lib/stripe/resources/issuing/authorization.rb +33 -0
  58. data/lib/stripe/resources/issuing/card.rb +24 -0
  59. data/lib/stripe/{issuing → resources/issuing}/card_details.rb +1 -1
  60. data/lib/stripe/{issuing → resources/issuing}/cardholder.rb +2 -2
  61. data/lib/stripe/{issuing → resources/issuing}/dispute.rb +2 -2
  62. data/lib/stripe/{issuing → resources/issuing}/transaction.rb +2 -2
  63. data/lib/stripe/resources/login_link.rb +14 -0
  64. data/lib/stripe/resources/order.rb +32 -0
  65. data/lib/stripe/{order_return.rb → resources/order_return.rb} +1 -1
  66. data/lib/stripe/resources/payment_intent.rb +42 -0
  67. data/lib/stripe/resources/payment_method.rb +32 -0
  68. data/lib/stripe/resources/payout.rb +22 -0
  69. data/lib/stripe/{person.rb → resources/person.rb} +8 -3
  70. data/lib/stripe/{plan.rb → resources/plan.rb} +1 -1
  71. data/lib/stripe/{product.rb → resources/product.rb} +3 -3
  72. data/lib/stripe/resources/radar/early_fraud_warning.rb +11 -0
  73. data/lib/stripe/{radar → resources/radar}/value_list.rb +2 -2
  74. data/lib/stripe/{radar → resources/radar}/value_list_item.rb +2 -2
  75. data/lib/stripe/{recipient.rb → resources/recipient.rb} +2 -6
  76. data/lib/stripe/{recipient_transfer.rb → resources/recipient_transfer.rb} +1 -1
  77. data/lib/stripe/{refund.rb → resources/refund.rb} +1 -1
  78. data/lib/stripe/{reporting → resources/reporting}/report_run.rb +2 -2
  79. data/lib/stripe/{reporting → resources/reporting}/report_type.rb +2 -2
  80. data/lib/stripe/resources/reversal.rb +29 -0
  81. data/lib/stripe/resources/review.rb +20 -0
  82. data/lib/stripe/resources/setup_intent.rb +32 -0
  83. data/lib/stripe/{sigma → resources/sigma}/scheduled_query_run.rb +2 -2
  84. data/lib/stripe/{sku.rb → resources/sku.rb} +3 -3
  85. data/lib/stripe/{source.rb → resources/source.rb} +17 -15
  86. data/lib/stripe/{source_transaction.rb → resources/source_transaction.rb} +1 -1
  87. data/lib/stripe/resources/subscription.rb +25 -0
  88. data/lib/stripe/{subscription_item.rb → resources/subscription_item.rb} +5 -2
  89. data/lib/stripe/resources/subscription_schedule.rb +32 -0
  90. data/lib/stripe/resources/tax_id.rb +26 -0
  91. data/lib/stripe/resources/tax_rate.rb +11 -0
  92. data/lib/stripe/{terminal → resources/terminal}/connection_token.rb +2 -2
  93. data/lib/stripe/{terminal → resources/terminal}/location.rb +3 -2
  94. data/lib/stripe/{terminal → resources/terminal}/reader.rb +3 -2
  95. data/lib/stripe/{three_d_secure.rb → resources/three_d_secure.rb} +1 -1
  96. data/lib/stripe/{token.rb → resources/token.rb} +1 -1
  97. data/lib/stripe/resources/topup.rb +22 -0
  98. data/lib/stripe/resources/transfer.rb +26 -0
  99. data/lib/stripe/resources/usage_record.rb +7 -0
  100. data/lib/stripe/{usage_record_summary.rb → resources/usage_record_summary.rb} +1 -1
  101. data/lib/stripe/{webhook_endpoint.rb → resources/webhook_endpoint.rb} +2 -2
  102. data/lib/stripe/singleton_api_resource.rb +3 -1
  103. data/lib/stripe/stripe_client.rb +347 -218
  104. data/lib/stripe/stripe_object.rb +72 -59
  105. data/lib/stripe/stripe_response.rb +53 -21
  106. data/lib/stripe/util.rb +54 -109
  107. data/lib/stripe/version.rb +1 -1
  108. data/lib/stripe/webhook.rb +5 -3
  109. data/stripe.gemspec +14 -5
  110. data/test/stripe/account_link_test.rb +1 -1
  111. data/test/stripe/account_test.rb +193 -32
  112. data/test/stripe/alipay_account_test.rb +1 -1
  113. data/test/stripe/api_operations_test.rb +3 -4
  114. data/test/stripe/api_resource_test.rb +119 -30
  115. data/test/stripe/apple_pay_domain_test.rb +18 -5
  116. data/test/stripe/application_fee_refund_test.rb +1 -1
  117. data/test/stripe/application_fee_test.rb +45 -1
  118. data/test/stripe/balance_test.rb +1 -1
  119. data/test/stripe/balance_transaction_test.rb +20 -0
  120. data/test/stripe/bank_account_test.rb +1 -1
  121. data/test/stripe/capability_test.rb +45 -0
  122. data/test/stripe/charge_test.rb +13 -8
  123. data/test/stripe/checkout/session_test.rb +7 -1
  124. data/test/stripe/connection_manager_test.rb +138 -0
  125. data/test/stripe/country_spec_test.rb +1 -1
  126. data/test/stripe/coupon_test.rb +16 -6
  127. data/test/stripe/credit_note_test.rb +61 -0
  128. data/test/stripe/customer_balance_transaction_test.rb +37 -0
  129. data/test/stripe/customer_card_test.rb +1 -1
  130. data/test/stripe/customer_test.rb +151 -40
  131. data/test/stripe/dispute_test.rb +10 -1
  132. data/test/stripe/ephemeral_key_test.rb +8 -1
  133. data/test/stripe/errors_test.rb +30 -9
  134. data/test/stripe/exchange_rate_test.rb +1 -1
  135. data/test/stripe/file_link_test.rb +1 -1
  136. data/test/stripe/file_test.rb +19 -5
  137. data/test/stripe/invoice_item_test.rb +18 -7
  138. data/test/stripe/invoice_line_item_test.rb +1 -1
  139. data/test/stripe/invoice_test.rb +77 -9
  140. data/test/stripe/issuing/authorization_test.rb +33 -11
  141. data/test/stripe/issuing/card_test.rb +15 -6
  142. data/test/stripe/issuing/cardholder_test.rb +1 -1
  143. data/test/stripe/issuing/dispute_test.rb +1 -1
  144. data/test/stripe/issuing/transaction_test.rb +1 -1
  145. data/test/stripe/list_object_test.rb +1 -17
  146. data/test/stripe/login_link_test.rb +2 -2
  147. data/test/stripe/multipart_encoder_test.rb +130 -0
  148. data/test/stripe/oauth_test.rb +1 -1
  149. data/test/stripe/order_return_test.rb +1 -1
  150. data/test/stripe/order_test.rb +28 -3
  151. data/test/stripe/payment_intent_test.rb +31 -4
  152. data/test/stripe/payment_method_test.rb +84 -0
  153. data/test/stripe/payout_test.rb +8 -1
  154. data/test/stripe/person_test.rb +1 -1
  155. data/test/stripe/plan_test.rb +26 -20
  156. data/test/stripe/product_test.rb +16 -6
  157. data/test/stripe/radar/early_fraud_warning_test.rb +22 -0
  158. data/test/stripe/radar/value_list_item_test.rb +16 -6
  159. data/test/stripe/radar/value_list_test.rb +16 -6
  160. data/test/stripe/recipient_test.rb +18 -5
  161. data/test/stripe/refund_test.rb +1 -1
  162. data/test/stripe/reporting/report_run_test.rb +1 -1
  163. data/test/stripe/reporting/report_type_test.rb +1 -1
  164. data/test/stripe/reversal_test.rb +1 -1
  165. data/test/stripe/review_test.rb +1 -1
  166. data/test/stripe/setup_intent_test.rb +84 -0
  167. data/test/stripe/sigma/scheduled_query_run_test.rb +1 -1
  168. data/test/stripe/sku_test.rb +16 -6
  169. data/test/stripe/source_test.rb +14 -19
  170. data/test/stripe/source_transaction_test.rb +1 -1
  171. data/test/stripe/stripe_client_test.rb +242 -26
  172. data/test/stripe/stripe_object_test.rb +8 -36
  173. data/test/stripe/stripe_response_test.rb +71 -25
  174. data/test/stripe/subscription_item_test.rb +28 -6
  175. data/test/stripe/subscription_schedule_test.rb +19 -1
  176. data/test/stripe/subscription_test.rb +29 -9
  177. data/test/stripe/tax_id_test.rb +31 -0
  178. data/test/stripe/tax_rate_test.rb +43 -0
  179. data/test/stripe/terminal/connection_token_test.rb +1 -1
  180. data/test/stripe/terminal/location_test.rb +18 -1
  181. data/test/stripe/terminal/reader_test.rb +18 -1
  182. data/test/stripe/three_d_secure_test.rb +1 -1
  183. data/test/stripe/topup_test.rb +9 -1
  184. data/test/stripe/transfer_test.rb +46 -1
  185. data/test/stripe/usage_record_summary_test.rb +1 -1
  186. data/test/stripe/util_test.rb +1 -1
  187. data/test/stripe/webhook_endpoint_test.rb +18 -1
  188. data/test/stripe/webhook_test.rb +4 -4
  189. data/test/stripe_mock.rb +4 -3
  190. data/test/stripe_test.rb +1 -14
  191. data/test/test_helper.rb +14 -11
  192. metadata +117 -125
  193. data/lib/stripe/alipay_account.rb +0 -27
  194. data/lib/stripe/application_fee.rb +0 -23
  195. data/lib/stripe/application_fee_refund.rb +0 -22
  196. data/lib/stripe/charge.rb +0 -84
  197. data/lib/stripe/customer.rb +0 -90
  198. data/lib/stripe/invoice.rb +0 -48
  199. data/lib/stripe/issuer_fraud_record.rb +0 -9
  200. data/lib/stripe/issuing/authorization.rb +0 -22
  201. data/lib/stripe/issuing/card.rb +0 -18
  202. data/lib/stripe/login_link.rb +0 -11
  203. data/lib/stripe/order.rb +0 -31
  204. data/lib/stripe/payment_intent.rb +0 -26
  205. data/lib/stripe/payout.rb +0 -20
  206. data/lib/stripe/reversal.rb +0 -22
  207. data/lib/stripe/review.rb +0 -14
  208. data/lib/stripe/subscription.rb +0 -25
  209. data/lib/stripe/subscription_schedule.rb +0 -32
  210. data/lib/stripe/subscription_schedule_revision.rb +0 -25
  211. data/lib/stripe/topup.rb +0 -16
  212. data/lib/stripe/transfer.rb +0 -23
  213. data/lib/stripe/usage_record.rb +0 -14
  214. data/test/stripe/account_external_accounts_operations_test.rb +0 -69
  215. data/test/stripe/account_login_links_operations_test.rb +0 -21
  216. data/test/stripe/account_persons_operations_test.rb +0 -70
  217. data/test/stripe/application_fee_refunds_operations_test.rb +0 -56
  218. data/test/stripe/customer_sources_operations_test.rb +0 -64
  219. data/test/stripe/file_upload_test.rb +0 -76
  220. data/test/stripe/issuer_fraud_record_test.rb +0 -20
  221. data/test/stripe/subscription_schedule_revision_test.rb +0 -37
  222. data/test/stripe/subscription_schedule_revisions_operations_test.rb +0 -35
  223. data/test/stripe/transfer_reversals_operations_test.rb +0 -57
  224. data/test/stripe/usage_record_test.rb +0 -28
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require ::File.expand_path("../../test_helper", __FILE__)
3
+ require ::File.expand_path("../test_helper", __dir__)
4
4
 
5
5
  module Stripe
6
6
  class ApplePayDomainTest < Test::Unit::TestCase
@@ -24,10 +24,23 @@ module Stripe
24
24
  end
25
25
 
26
26
  should "be deletable" do
27
- domain = Stripe::ApplePayDomain.retrieve("apwc_123")
28
- domain = domain.delete
29
- assert_requested :delete, "#{Stripe.api_base}/v1/apple_pay/domains/#{domain.id}"
30
- assert domain.is_a?(Stripe::ApplePayDomain)
27
+ end
28
+
29
+ context "#delete" do
30
+ should "be deletable" do
31
+ domain = Stripe::ApplePayDomain.retrieve("apwc_123")
32
+ domain = domain.delete
33
+ assert_requested :delete, "#{Stripe.api_base}/v1/apple_pay/domains/#{domain.id}"
34
+ assert domain.is_a?(Stripe::ApplePayDomain)
35
+ end
36
+ end
37
+
38
+ context ".delete" do
39
+ should "be deletable" do
40
+ domain = Stripe::ApplePayDomain.delete("apwc_123")
41
+ assert_requested :delete, "#{Stripe.api_base}/v1/apple_pay/domains/apwc_123"
42
+ assert domain.is_a?(Stripe::ApplePayDomain)
43
+ end
31
44
  end
32
45
  end
33
46
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require ::File.expand_path("../../test_helper", __FILE__)
3
+ require ::File.expand_path("../test_helper", __dir__)
4
4
 
5
5
  module Stripe
6
6
  class ApplicationFeeRefundTest < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require ::File.expand_path("../../test_helper", __FILE__)
3
+ require ::File.expand_path("../test_helper", __dir__)
4
4
 
5
5
  module Stripe
6
6
  class ApplicationFeeTest < Test::Unit::TestCase
@@ -10,5 +10,49 @@ module Stripe
10
10
  assert fees.data.is_a?(Array)
11
11
  assert fees.data[0].is_a?(Stripe::ApplicationFee)
12
12
  end
13
+
14
+ context "#create_refund" do
15
+ should "create a refund" do
16
+ refund = Stripe::ApplicationFee.create_refund(
17
+ "fee_123"
18
+ )
19
+ assert_requested :post, "#{Stripe.api_base}/v1/application_fees/fee_123/refunds"
20
+ assert refund.is_a?(Stripe::ApplicationFeeRefund)
21
+ end
22
+ end
23
+
24
+ context "#retrieve_refund" do
25
+ should "retrieve a refund" do
26
+ refund = Stripe::ApplicationFee.retrieve_refund(
27
+ "fee_123",
28
+ "fr_123"
29
+ )
30
+ assert_requested :get, "#{Stripe.api_base}/v1/application_fees/fee_123/refunds/fr_123"
31
+ assert refund.is_a?(Stripe::ApplicationFeeRefund)
32
+ end
33
+ end
34
+
35
+ context "#update_refund" do
36
+ should "update a refund" do
37
+ refund = Stripe::ApplicationFee.update_refund(
38
+ "fee_123",
39
+ "fr_123",
40
+ metadata: { foo: "bar" }
41
+ )
42
+ assert_requested :post, "#{Stripe.api_base}/v1/application_fees/fee_123/refunds/fr_123"
43
+ assert refund.is_a?(Stripe::ApplicationFeeRefund)
44
+ end
45
+ end
46
+
47
+ context "#list_refunds" do
48
+ should "list the application fee's refuns" do
49
+ refunds = Stripe::ApplicationFee.list_refunds(
50
+ "fee_123"
51
+ )
52
+ assert_requested :get, "#{Stripe.api_base}/v1/application_fees/fee_123/refunds"
53
+ assert refunds.is_a?(Stripe::ListObject)
54
+ assert refunds.data.is_a?(Array)
55
+ end
56
+ end
13
57
  end
14
58
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require ::File.expand_path("../../test_helper", __FILE__)
3
+ require ::File.expand_path("../test_helper", __dir__)
4
4
 
5
5
  module Stripe
6
6
  class BalanceTest < Test::Unit::TestCase
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require ::File.expand_path("../test_helper", __dir__)
4
+
5
+ module Stripe
6
+ class BalanceTransactionTest < Test::Unit::TestCase
7
+ should "be listable" do
8
+ balance_transactions = Stripe::BalanceTransaction.list
9
+ assert_requested :get, "#{Stripe.api_base}/v1/balance_transactions"
10
+ assert balance_transactions.data.is_a?(Array)
11
+ assert balance_transactions.first.is_a?(Stripe::BalanceTransaction)
12
+ end
13
+
14
+ should "be retrievable" do
15
+ balance_transaction = Stripe::BalanceTransaction.retrieve("txn_123")
16
+ assert_requested :get, "#{Stripe.api_base}/v1/balance_transactions/txn_123"
17
+ assert balance_transaction.is_a?(Stripe::BalanceTransaction)
18
+ end
19
+ end
20
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require ::File.expand_path("../../test_helper", __FILE__)
3
+ require ::File.expand_path("../test_helper", __dir__)
4
4
 
5
5
  module Stripe
6
6
  class BankAccountTest < Test::Unit::TestCase
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require ::File.expand_path("../test_helper", __dir__)
4
+
5
+ module Stripe
6
+ class CapabilityTest < Test::Unit::TestCase
7
+ context "#resource_url" do
8
+ should "return a resource URL" do
9
+ capability = Stripe::Capability.construct_from(
10
+ id: "acap_123",
11
+ account: "acct_123"
12
+ )
13
+ assert_equal "/v1/accounts/acct_123/capabilities/acap_123",
14
+ capability.resource_url
15
+ end
16
+
17
+ should "raise without an account" do
18
+ capability = Stripe::Capability.construct_from(id: "acap_123")
19
+ assert_raises NotImplementedError do
20
+ capability.resource_url
21
+ end
22
+ end
23
+ end
24
+
25
+ should "raise on #retrieve" do
26
+ assert_raises NotImplementedError do
27
+ Stripe::Capability.retrieve("acap_123")
28
+ end
29
+ end
30
+
31
+ should "raise on #update" do
32
+ assert_raises NotImplementedError do
33
+ Stripe::Capability.update("acap_123", {})
34
+ end
35
+ end
36
+
37
+ should "be saveable" do
38
+ capability = Stripe::Account.retrieve_capability("acct_123", "acap_123")
39
+ capability.requested = true
40
+ capability.save
41
+ assert_requested :post,
42
+ "#{Stripe.api_base}/v1/accounts/#{capability.account}/capabilities/#{capability.id}"
43
+ end
44
+ end
45
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require ::File.expand_path("../../test_helper", __FILE__)
3
+ require ::File.expand_path("../test_helper", __dir__)
4
4
 
5
5
  module Stripe
6
6
  class ChargeTest < Test::Unit::TestCase
@@ -40,18 +40,23 @@ module Stripe
40
40
  assert charge.is_a?(Stripe::Charge)
41
41
  end
42
42
 
43
- context "#mark_as_fraudulent" do
44
- should "charges should be able to be marked as fraudulent" do
43
+ context "#capture" do
44
+ should "capture the charge" do
45
45
  charge = Stripe::Charge.retrieve("ch_123")
46
- charge = charge.mark_as_fraudulent
46
+ charge = charge.capture(amount: 100)
47
+ assert_requested :post,
48
+ "#{Stripe.api_base}/v1/charges/ch_123/capture",
49
+ body: { amount: 100 }
47
50
  assert charge.is_a?(Stripe::Charge)
48
51
  end
49
52
  end
50
53
 
51
- context "#mark_as_safe" do
52
- should "charges should be able to be marked as safe" do
53
- charge = Stripe::Charge.retrieve("ch_123")
54
- charge = charge.mark_as_safe
54
+ context ".capture" do
55
+ should "capture the charge" do
56
+ charge = Stripe::Charge.capture("ch_123", amount: 100)
57
+ assert_requested :post,
58
+ "#{Stripe.api_base}/v1/charges/ch_123/capture",
59
+ body: { amount: 100 }
55
60
  assert charge.is_a?(Stripe::Charge)
56
61
  end
57
62
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require ::File.expand_path("../../../test_helper", __FILE__)
3
+ require ::File.expand_path("../../test_helper", __dir__)
4
4
 
5
5
  module Stripe
6
6
  module Checkout
@@ -30,6 +30,12 @@ module Stripe
30
30
  assert_requested :post, "#{Stripe.api_base}/v1/checkout/sessions"
31
31
  assert session.is_a?(Stripe::Checkout::Session)
32
32
  end
33
+
34
+ should "be retrievable" do
35
+ charge = Stripe::Checkout::Session.retrieve("cs_123")
36
+ assert_requested :get, "#{Stripe.api_base}/v1/checkout/sessions/cs_123"
37
+ assert charge.is_a?(Stripe::Checkout::Session)
38
+ end
33
39
  end
34
40
  end
35
41
  end
@@ -0,0 +1,138 @@
1
+ # frozen_string_literal: true
2
+
3
+ require ::File.expand_path("../test_helper", __dir__)
4
+
5
+ module Stripe
6
+ class ConnectionManagerTest < Test::Unit::TestCase
7
+ setup do
8
+ @manager = Stripe::ConnectionManager.new
9
+ end
10
+
11
+ context "#clear" do
12
+ should "clear any active connections" do
13
+ stub_request(:post, "#{Stripe.api_base}/path")
14
+ .to_return(body: JSON.generate(object: "account"))
15
+
16
+ # Making a request lets us know that at least one connection is open.
17
+ @manager.execute_request(:post, "#{Stripe.api_base}/path")
18
+
19
+ # Now clear the manager.
20
+ @manager.clear
21
+
22
+ # This check isn't great, but it's otherwise difficult to tell that
23
+ # anything happened with just the public-facing API.
24
+ assert_equal({}, @manager.instance_variable_get(:@active_connections))
25
+ end
26
+ end
27
+
28
+ context "#connection_for" do
29
+ should "correctly initialize a connection" do
30
+ old_proxy = Stripe.proxy
31
+
32
+ old_open_timeout = Stripe.open_timeout
33
+ old_read_timeout = Stripe.read_timeout
34
+
35
+ begin
36
+ # Make sure any global initialization here is undone in the `ensure`
37
+ # block below.
38
+ Stripe.proxy = "http://user:pass@localhost:8080"
39
+
40
+ Stripe.open_timeout = 123
41
+ Stripe.read_timeout = 456
42
+
43
+ conn = @manager.connection_for("https://stripe.com")
44
+
45
+ # Host/port
46
+ assert_equal "stripe.com", conn.address
47
+ assert_equal 443, conn.port
48
+
49
+ # Proxy
50
+ assert_equal "localhost", conn.proxy_address
51
+ assert_equal 8080, conn.proxy_port
52
+ assert_equal "user", conn.proxy_user
53
+ assert_equal "pass", conn.proxy_pass
54
+
55
+ # Timeouts
56
+ assert_equal 123, conn.open_timeout
57
+ assert_equal 456, conn.read_timeout
58
+
59
+ assert_equal true, conn.use_ssl?
60
+ assert_equal OpenSSL::SSL::VERIFY_PEER, conn.verify_mode
61
+ assert_equal Stripe.ca_store, conn.cert_store
62
+ ensure
63
+ Stripe.proxy = old_proxy
64
+
65
+ Stripe.open_timeout = old_open_timeout
66
+ Stripe.read_timeout = old_read_timeout
67
+ end
68
+ end
69
+
70
+ should "produce the same connection multiple times" do
71
+ conn1 = @manager.connection_for("https://stripe.com")
72
+ conn2 = @manager.connection_for("https://stripe.com")
73
+
74
+ assert_equal conn1, conn2
75
+ end
76
+
77
+ should "produce different connections for different hosts" do
78
+ conn1 = @manager.connection_for("https://example.com")
79
+ conn2 = @manager.connection_for("https://stripe.com")
80
+
81
+ refute_equal conn1, conn2
82
+ end
83
+
84
+ should "produce different connections for different ports" do
85
+ conn1 = @manager.connection_for("https://stripe.com:80")
86
+ conn2 = @manager.connection_for("https://stripe.com:443")
87
+
88
+ refute_equal conn1, conn2
89
+ end
90
+ end
91
+
92
+ context "#execute_request" do
93
+ should "make a request" do
94
+ stub_request(:post, "#{Stripe.api_base}/path?query=bar")
95
+ .with(
96
+ body: "body=foo",
97
+ headers: { "Stripe-Account" => "bar" }
98
+ )
99
+ .to_return(body: JSON.generate(object: "account"))
100
+
101
+ @manager.execute_request(:post, "#{Stripe.api_base}/path",
102
+ body: "body=foo",
103
+ headers: { "Stripe-Account" => "bar" },
104
+ query: "query=bar")
105
+ end
106
+
107
+ should "perform basic argument validation" do
108
+ e = assert_raises ArgumentError do
109
+ @manager.execute_request("POST", "#{Stripe.api_base}/path")
110
+ end
111
+ assert_equal e.message, "method should be a symbol"
112
+
113
+ e = assert_raises ArgumentError do
114
+ @manager.execute_request(:post, :uri)
115
+ end
116
+ assert_equal e.message, "uri should be a string"
117
+
118
+ e = assert_raises ArgumentError do
119
+ @manager.execute_request(:post, "#{Stripe.api_base}/path",
120
+ body: {})
121
+ end
122
+ assert_equal e.message, "body should be a string"
123
+
124
+ e = assert_raises ArgumentError do
125
+ @manager.execute_request(:post, "#{Stripe.api_base}/path",
126
+ headers: "foo")
127
+ end
128
+ assert_equal e.message, "headers should be a hash"
129
+
130
+ e = assert_raises ArgumentError do
131
+ @manager.execute_request(:post, "#{Stripe.api_base}/path",
132
+ query: {})
133
+ end
134
+ assert_equal e.message, "query should be a string"
135
+ end
136
+ end
137
+ end
138
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require ::File.expand_path("../../test_helper", __FILE__)
3
+ require ::File.expand_path("../test_helper", __dir__)
4
4
 
5
5
  module Stripe
6
6
  class CountrySpecTest < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require ::File.expand_path("../../test_helper", __FILE__)
3
+ require ::File.expand_path("../test_helper", __dir__)
4
4
 
5
5
  module Stripe
6
6
  class CouponTest < Test::Unit::TestCase
@@ -41,11 +41,21 @@ module Stripe
41
41
  assert coupon.is_a?(Stripe::Coupon)
42
42
  end
43
43
 
44
- should "be deletable" do
45
- coupon = Stripe::Coupon.retrieve("25OFF")
46
- coupon = coupon.delete
47
- assert_requested :delete, "#{Stripe.api_base}/v1/coupons/#{coupon.id}"
48
- assert coupon.is_a?(Stripe::Coupon)
44
+ context "#delete" do
45
+ should "be deletable" do
46
+ coupon = Stripe::Coupon.delete("25OFF")
47
+ assert_requested :delete, "#{Stripe.api_base}/v1/coupons/#{coupon.id}"
48
+ assert coupon.is_a?(Stripe::Coupon)
49
+ end
50
+ end
51
+
52
+ context ".delete" do
53
+ should "be deletable" do
54
+ coupon = Stripe::Coupon.retrieve("25OFF")
55
+ coupon = coupon.delete
56
+ assert_requested :delete, "#{Stripe.api_base}/v1/coupons/25OFF"
57
+ assert coupon.is_a?(Stripe::Coupon)
58
+ end
49
59
  end
50
60
  end
51
61
  end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require ::File.expand_path("../test_helper", __dir__)
4
+
5
+ module Stripe
6
+ class CreditNoteTest < Test::Unit::TestCase
7
+ should "be listable" do
8
+ credit_notes = Stripe::CreditNote.list
9
+ assert_requested :get, "#{Stripe.api_base}/v1/credit_notes"
10
+ assert credit_notes.data.is_a?(Array)
11
+ assert credit_notes.first.is_a?(Stripe::CreditNote)
12
+ end
13
+
14
+ should "be retrievable" do
15
+ credit_note = Stripe::CreditNote.retrieve("cn_123")
16
+ assert_requested :get, "#{Stripe.api_base}/v1/credit_notes/cn_123"
17
+ assert credit_note.is_a?(Stripe::CreditNote)
18
+ end
19
+
20
+ should "be creatable" do
21
+ credit_note = Stripe::CreditNote.create(
22
+ amount: 100,
23
+ invoice: "in_123",
24
+ reason: "duplicate"
25
+ )
26
+ assert_requested :post, "#{Stripe.api_base}/v1/credit_notes"
27
+ assert credit_note.is_a?(Stripe::CreditNote)
28
+ end
29
+
30
+ should "be saveable" do
31
+ credit_note = Stripe::CreditNote.retrieve("cn_123")
32
+ credit_note.metadata["key"] = "value"
33
+ credit_note.save
34
+ assert_requested :post, "#{Stripe.api_base}/v1/credit_notes/#{credit_note.id}"
35
+ end
36
+
37
+ should "be updateable" do
38
+ credit_note = Stripe::CreditNote.update("cn_123", metadata: { key: "value" })
39
+ assert_requested :post, "#{Stripe.api_base}/v1/credit_notes/cn_123"
40
+ assert credit_note.is_a?(Stripe::CreditNote)
41
+ end
42
+
43
+ context "#void_credit_note" do
44
+ should "void credit_note" do
45
+ credit_note = Stripe::CreditNote.retrieve("cn_123")
46
+ credit_note = credit_note.void_credit_note
47
+ assert_requested :post,
48
+ "#{Stripe.api_base}/v1/credit_notes/#{credit_note.id}/void"
49
+ assert credit_note.is_a?(Stripe::CreditNote)
50
+ end
51
+ end
52
+
53
+ context ".void_credit_note" do
54
+ should "void credit_note" do
55
+ credit_note = Stripe::CreditNote.void_credit_note("cn_123")
56
+ assert_requested :post, "#{Stripe.api_base}/v1/credit_notes/cn_123/void"
57
+ assert credit_note.is_a?(Stripe::CreditNote)
58
+ end
59
+ end
60
+ end
61
+ end