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
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require ::File.expand_path("../../test_helper", __FILE__)
4
+
5
+ module Stripe
6
+ class CustomerBalanceTransactionTest < Test::Unit::TestCase
7
+ context "#resource_url" do
8
+ should "return a resource URL" do
9
+ transaction = Stripe::CustomerBalanceTransaction.construct_from(
10
+ id: "cbtxn_123",
11
+ customer: "cus_123"
12
+ )
13
+ assert_equal "/v1/customers/cus_123/balance_transactions/cbtxn_123",
14
+ transaction.resource_url
15
+ end
16
+
17
+ should "raise without a customer" do
18
+ transaction = Stripe::CustomerBalanceTransaction.construct_from(id: "cbtxn_123")
19
+ assert_raises NotImplementedError do
20
+ transaction.resource_url
21
+ end
22
+ end
23
+ end
24
+
25
+ should "raise on #retrieve" do
26
+ assert_raises NotImplementedError do
27
+ Stripe::CustomerBalanceTransaction.retrieve("cbtxn_123")
28
+ end
29
+ end
30
+
31
+ should "raise on #update" do
32
+ assert_raises NotImplementedError do
33
+ Stripe::CustomerBalanceTransaction.update("cbtxn_123")
34
+ end
35
+ end
36
+ end
37
+ 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 CustomerCardTest < 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 CustomerTest < Test::Unit::TestCase
@@ -36,63 +36,89 @@ module Stripe
36
36
  assert customer.is_a?(Stripe::Customer)
37
37
  end
38
38
 
39
- should "be deletable" do
40
- customer = Stripe::Customer.retrieve("cus_123")
41
- customer = customer.delete
42
- assert_requested :delete, "#{Stripe.api_base}/v1/customers/#{customer.id}"
43
- assert customer.is_a?(Stripe::Customer)
39
+ context "#delete" do
40
+ should "be deletable" do
41
+ customer = Stripe::Customer.retrieve("cus_123")
42
+ customer = customer.delete
43
+ assert_requested :delete, "#{Stripe.api_base}/v1/customers/#{customer.id}"
44
+ assert customer.is_a?(Stripe::Customer)
45
+ end
44
46
  end
45
47
 
46
- context "#create_subscription" do
47
- should "create a new subscription" do
48
- customer = Stripe::Customer.retrieve("cus_123")
49
- subscription = customer.create_subscription(items: [{ plan: "silver" }])
50
- assert subscription.is_a?(Stripe::Subscription)
48
+ context ".delete" do
49
+ should "be deletable" do
50
+ customer = Stripe::Customer.delete("cus_123")
51
+ assert_requested :delete, "#{Stripe.api_base}/v1/customers/cus_123"
52
+ assert customer.is_a?(Stripe::Customer)
51
53
  end
52
54
  end
53
55
 
54
- context "#create_upcoming_invoice" do
55
- should "create a new invoice" do
56
+ context "#delete_discount" do
57
+ should "delete a discount" do
56
58
  customer = Stripe::Customer.retrieve("cus_123")
57
- invoice = customer.create_upcoming_invoice
58
- assert invoice.is_a?(Stripe::Invoice)
59
+ customer = customer.delete_discount
60
+ assert_requested :delete, "#{Stripe.api_base}/v1/customers/#{customer.id}/discount"
61
+ assert customer.is_a?(Stripe::Customer)
59
62
  end
60
63
  end
61
64
 
62
- context "#update_subscription" do
63
- should "update a subscription" do
64
- customer = Stripe::Customer.retrieve("cus_123")
65
+ context ".delete_discount" do
66
+ should "delete a discount" do
67
+ discount = Stripe::Customer.delete_discount("cus_123")
68
+ assert_requested :delete, "#{Stripe.api_base}/v1/customers/cus_123/discount"
69
+ assert discount.is_a?(Stripe::Discount)
70
+ end
71
+ end
65
72
 
66
- # deprecated API and not in schema
67
- stub_request(:post, "#{Stripe.api_base}/v1/customers/#{customer.id}/subscription")
68
- .with(body: { plan: "silver" })
69
- .to_return(body: JSON.generate(object: "subscription"))
70
- subscription = customer.update_subscription(plan: "silver")
71
- assert subscription.is_a?(Stripe::Subscription)
73
+ context "#create_source" do
74
+ should "create a source" do
75
+ Stripe::Customer.create_source(
76
+ "cus_123",
77
+ source: "tok_123"
78
+ )
79
+ assert_requested :post, "#{Stripe.api_base}/v1/customers/cus_123/sources"
72
80
  end
73
81
  end
74
82
 
75
- context "#cancel_subscription" do
76
- should "cancel a subscription" do
77
- customer = Stripe::Customer.retrieve("cus_123")
83
+ context "#retrieve_source" do
84
+ should "retrieve a source" do
85
+ Stripe::Customer.retrieve_source(
86
+ "cus_123",
87
+ "ba_123"
88
+ )
89
+ assert_requested :get, "#{Stripe.api_base}/v1/customers/cus_123/sources/ba_123"
90
+ end
91
+ end
78
92
 
79
- # deprecated API and not in schema
80
- stub_request(:delete, "#{Stripe.api_base}/v1/customers/#{customer.id}/subscription")
81
- .with(query: { at_period_end: "true" })
82
- .to_return(body: JSON.generate(object: "subscription"))
83
- subscription = customer.cancel_subscription(at_period_end: "true")
84
- assert subscription.is_a?(Stripe::Subscription)
93
+ context "#update_source" do
94
+ should "update a source" do
95
+ Stripe::Customer.update_source(
96
+ "cus_123",
97
+ "ba_123",
98
+ metadata: { foo: "bar" }
99
+ )
100
+ assert_requested :post, "#{Stripe.api_base}/v1/customers/cus_123/sources/ba_123"
85
101
  end
86
102
  end
87
103
 
88
- context "#delete_discount" do
89
- should "delete a discount" do
90
- customer = Stripe::Customer.retrieve("cus_123")
104
+ context "#delete_source" do
105
+ should "delete a source" do
106
+ Stripe::Customer.delete_source(
107
+ "cus_123",
108
+ "ba_123"
109
+ )
110
+ assert_requested :delete, "#{Stripe.api_base}/v1/customers/cus_123/sources/ba_123"
111
+ end
112
+ end
91
113
 
92
- stub_request(:delete, "#{Stripe.api_base}/v1/customers/#{customer.id}/discount")
93
- .to_return(body: JSON.generate(object: "customer"))
94
- discount = customer.delete_discount
95
- assert discount.is_a?(Stripe::Customer)
114
+ context "#list_sources" do
115
+ should "list the customer's sources" do
116
+ sources = Stripe::Customer.list_sources(
117
+ "cus_123"
118
+ )
119
+ assert_requested :get, "#{Stripe.api_base}/v1/customers/cus_123/sources"
120
+ assert sources.is_a?(Stripe::ListObject)
121
+ assert sources.data.is_a?(Array)
96
122
  end
97
123
  end
98
124
 
@@ -111,5 +137,90 @@ module Stripe
111
137
  assert_equal true, c.source.save_with_parent
112
138
  end
113
139
  end
140
+
141
+ context "#create_tax_id" do
142
+ should "create a tax id" do
143
+ Stripe::Customer.create_tax_id(
144
+ "cus_123",
145
+ type: "eu_vat",
146
+ value: "11111"
147
+ )
148
+ assert_requested :post, "#{Stripe.api_base}/v1/customers/cus_123/tax_ids"
149
+ end
150
+ end
151
+
152
+ context "#retrieve_tax_id" do
153
+ should "retrieve a tax id" do
154
+ Stripe::Customer.retrieve_tax_id(
155
+ "cus_123",
156
+ "txi_123"
157
+ )
158
+ assert_requested :get, "#{Stripe.api_base}/v1/customers/cus_123/tax_ids/txi_123"
159
+ end
160
+ end
161
+
162
+ context "#delete_tax_id" do
163
+ should "delete a tax id" do
164
+ Stripe::Customer.delete_tax_id(
165
+ "cus_123",
166
+ "txi_123"
167
+ )
168
+ assert_requested :delete, "#{Stripe.api_base}/v1/customers/cus_123/tax_ids/txi_123"
169
+ end
170
+ end
171
+
172
+ context "#list_tax_ids" do
173
+ should "list the customer's tax ids" do
174
+ sources = Stripe::Customer.list_tax_ids(
175
+ "cus_123"
176
+ )
177
+ assert_requested :get, "#{Stripe.api_base}/v1/customers/cus_123/tax_ids"
178
+ assert sources.is_a?(Stripe::ListObject)
179
+ assert sources.data.is_a?(Array)
180
+ end
181
+ end
182
+
183
+ context "#create_balance_transaction" do
184
+ should "create a customer balance transaction" do
185
+ Stripe::Customer.create_balance_transaction(
186
+ "cus_123",
187
+ amount: 1234,
188
+ currency: "usd"
189
+ )
190
+ assert_requested :post, "#{Stripe.api_base}/v1/customers/cus_123/balance_transactions"
191
+ end
192
+ end
193
+
194
+ context "#retrieve_balance_transaction" do
195
+ should "retrieve a customer balance transaction" do
196
+ Stripe::Customer.retrieve_balance_transaction(
197
+ "cus_123",
198
+ "cbtxn_123"
199
+ )
200
+ assert_requested :get, "#{Stripe.api_base}/v1/customers/cus_123/balance_transactions/cbtxn_123"
201
+ end
202
+ end
203
+
204
+ context "#update_balance_transaction" do
205
+ should "update a customer balance transaction" do
206
+ Stripe::Customer.update_balance_transaction(
207
+ "cus_123",
208
+ "cbtxn_123",
209
+ description: "new"
210
+ )
211
+ assert_requested :post, "#{Stripe.api_base}/v1/customers/cus_123/balance_transactions/cbtxn_123"
212
+ end
213
+ end
214
+
215
+ context "#list_balance_transactions" do
216
+ should "list the customer balance transactions" do
217
+ sources = Stripe::Customer.list_balance_transactions(
218
+ "cus_123"
219
+ )
220
+ assert_requested :get, "#{Stripe.api_base}/v1/customers/cus_123/balance_transactions"
221
+ assert sources.is_a?(Stripe::ListObject)
222
+ assert sources.data.is_a?(Array)
223
+ end
224
+ end
114
225
  end
115
226
  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 DisputeTest < Test::Unit::TestCase
@@ -36,6 +36,15 @@ module Stripe
36
36
  dispute.close
37
37
  assert_requested :post,
38
38
  "#{Stripe.api_base}/v1/disputes/#{dispute.id}/close"
39
+ assert dispute.is_a?(Stripe::Dispute)
40
+ end
41
+ end
42
+
43
+ context ".close" do
44
+ should "close a dispute" do
45
+ dispute = Stripe::Dispute.close("dp_123")
46
+ assert_requested :post, "#{Stripe.api_base}/v1/disputes/dp_123/close"
47
+ assert dispute.is_a?(Stripe::Dispute)
39
48
  end
40
49
  end
41
50
  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 EphemeralKeyTest < Test::Unit::TestCase
@@ -82,5 +82,12 @@ module Stripe
82
82
  assert_requested :delete, "#{Stripe.api_base}/v1/ephemeral_keys/#{key.id}"
83
83
  end
84
84
  end
85
+
86
+ context ".delete" do
87
+ should "succeed" do
88
+ Stripe::EphemeralKey.delete("ephkey_123")
89
+ assert_requested :delete, "#{Stripe.api_base}/v1/ephemeral_keys/ephkey_123"
90
+ end
91
+ end
85
92
  end
86
93
  end
@@ -1,19 +1,40 @@
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 StripeErrorTest < Test::Unit::TestCase
7
- context "#to_s" do
8
- should "convert to string" do
9
- e = StripeError.new("message")
10
- assert_equal "message", e.to_s
7
+ context "StripeError" do
8
+ context "#initialize" do
9
+ should "initialize error if json_body is set" do
10
+ e = StripeError.new("message", json_body: { error: { code: "some_error" } })
11
+ assert_not_nil e.error
12
+ assert_equal "some_error", e.error.code
13
+ assert_nil e.error.charge
14
+ end
15
+ end
16
+
17
+ context "#to_s" do
18
+ should "convert to string" do
19
+ e = StripeError.new("message")
20
+ assert_equal "message", e.to_s
21
+
22
+ e = StripeError.new("message", http_status: 200)
23
+ assert_equal "(Status 200) message", e.to_s
11
24
 
12
- e = StripeError.new("message", http_status: 200)
13
- assert_equal "(Status 200) message", e.to_s
25
+ e = StripeError.new("message", http_status: nil, http_body: nil, json_body: nil, http_headers: { request_id: "request-id" })
26
+ assert_equal "(Request request-id) message", e.to_s
27
+ end
28
+ end
29
+ end
14
30
 
15
- e = StripeError.new("message", http_status: nil, http_body: nil, json_body: nil, http_headers: { request_id: "request-id" })
16
- assert_equal "(Request request-id) message", e.to_s
31
+ context "OAuth::OAuthError" do
32
+ context "#initialize" do
33
+ should "initialize error if json_body is set" do
34
+ e = OAuth::OAuthError.new("message", "description", json_body: { error: "some_oauth_error" })
35
+ assert_not_nil e.error
36
+ assert_equal "some_oauth_error", e.error.error
37
+ end
17
38
  end
18
39
  end
19
40
  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 ExchangeRateTest < 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 FileLinkTest < 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 FileTest < Test::Unit::TestCase
@@ -31,7 +31,8 @@ module Stripe
31
31
  should "be creatable with a File" do
32
32
  file = Stripe::File.create(
33
33
  purpose: "dispute_evidence",
34
- file: ::File.new(__FILE__)
34
+ file: ::File.new(__FILE__),
35
+ file_link_data: { create: true }
35
36
  )
36
37
  assert_requested :post, "#{Stripe.uploads_base}/v1/files"
37
38
  assert file.is_a?(Stripe::File)
@@ -44,20 +45,33 @@ module Stripe
44
45
 
45
46
  file = Stripe::File.create(
46
47
  purpose: "dispute_evidence",
47
- file: tempfile
48
+ file: tempfile,
49
+ file_link_data: { create: true }
48
50
  )
49
51
  assert_requested :post, "#{Stripe.uploads_base}/v1/files"
50
52
  assert file.is_a?(Stripe::File)
51
53
  end
52
54
 
53
- should "be creatable with Faraday::UploadIO" do
55
+ should "be creatable with a string" do
54
56
  file = Stripe::File.create(
55
57
  purpose: "dispute_evidence",
56
- file: Faraday::UploadIO.new(::File.new(__FILE__), nil)
58
+ file: "my-file-contents",
59
+ file_link_data: { create: true }
57
60
  )
58
61
  assert_requested :post, "#{Stripe.uploads_base}/v1/files"
59
62
  assert file.is_a?(Stripe::File)
60
63
  end
64
+
65
+ should "raise given a file object that doesn't respond to #read" do
66
+ e = assert_raises(ArgumentError) do
67
+ Stripe::File.create(
68
+ purpose: "dispute_evidence",
69
+ file: Object.new,
70
+ file_link_data: { create: true }
71
+ )
72
+ end
73
+ assert_equal "file must respond to `#read`", e.message
74
+ end
61
75
  end
62
76
 
63
77
  should "be deserializable when `object=file`" do
@@ -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 InvoiceItemTest < Test::Unit::TestCase
@@ -44,12 +44,23 @@ module Stripe
44
44
  assert item.is_a?(Stripe::InvoiceItem)
45
45
  end
46
46
 
47
- should "be deletable" do
48
- item = Stripe::InvoiceItem.retrieve("ii_123")
49
- item = item.delete
50
- assert_requested :delete,
51
- "#{Stripe.api_base}/v1/invoiceitems/#{item.id}"
52
- assert item.is_a?(Stripe::InvoiceItem)
47
+ context "#delete" do
48
+ should "be deletable" do
49
+ item = Stripe::InvoiceItem.retrieve("ii_123")
50
+ item = item.delete
51
+ assert_requested :delete,
52
+ "#{Stripe.api_base}/v1/invoiceitems/#{item.id}"
53
+ assert item.is_a?(Stripe::InvoiceItem)
54
+ end
55
+ end
56
+
57
+ context ".delete" do
58
+ should "be deletable" do
59
+ item = Stripe::InvoiceItem.delete("ii_123")
60
+ assert_requested :delete,
61
+ "#{Stripe.api_base}/v1/invoiceitems/ii_123"
62
+ assert item.is_a?(Stripe::InvoiceItem)
63
+ end
53
64
  end
54
65
  end
55
66
  end