stripe-ruby-mock 2.5.6 → 3.1.0.rc2
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.
- checksums.yaml +5 -5
- data/.gitignore +1 -1
- data/.travis.yml +6 -9
- data/CHANGELOG.md +35 -0
- data/Gemfile +1 -0
- data/README.md +17 -11
- data/lib/stripe_mock.rb +11 -0
- data/lib/stripe_mock/api/client.rb +1 -1
- data/lib/stripe_mock/api/errors.rb +34 -28
- data/lib/stripe_mock/api/instance.rb +1 -1
- data/lib/stripe_mock/api/webhooks.rb +7 -0
- data/lib/stripe_mock/client.rb +2 -1
- data/lib/stripe_mock/data.rb +323 -13
- data/lib/stripe_mock/data/list.rb +42 -9
- data/lib/stripe_mock/instance.rb +52 -5
- data/lib/stripe_mock/request_handlers/account_links.rb +15 -0
- data/lib/stripe_mock/request_handlers/balance_transactions.rb +2 -2
- data/lib/stripe_mock/request_handlers/charges.rb +13 -12
- data/lib/stripe_mock/request_handlers/checkout.rb +15 -0
- data/lib/stripe_mock/request_handlers/checkout_session.rb +16 -0
- data/lib/stripe_mock/request_handlers/customers.rb +35 -18
- data/lib/stripe_mock/request_handlers/ephemeral_key.rb +1 -1
- data/lib/stripe_mock/request_handlers/express_login_links.rb +15 -0
- data/lib/stripe_mock/request_handlers/helpers/coupon_helpers.rb +14 -10
- data/lib/stripe_mock/request_handlers/helpers/subscription_helpers.rb +22 -7
- data/lib/stripe_mock/request_handlers/helpers/token_helpers.rb +1 -1
- data/lib/stripe_mock/request_handlers/invoices.rb +11 -5
- data/lib/stripe_mock/request_handlers/payment_intents.rb +182 -0
- data/lib/stripe_mock/request_handlers/payment_methods.rb +120 -0
- data/lib/stripe_mock/request_handlers/plans.rb +1 -1
- data/lib/stripe_mock/request_handlers/prices.rb +44 -0
- data/lib/stripe_mock/request_handlers/products.rb +44 -0
- data/lib/stripe_mock/request_handlers/refunds.rb +6 -3
- data/lib/stripe_mock/request_handlers/setup_intents.rb +93 -0
- data/lib/stripe_mock/request_handlers/sources.rb +12 -6
- data/lib/stripe_mock/request_handlers/subscription_items.rb +36 -0
- data/lib/stripe_mock/request_handlers/subscriptions.rb +82 -41
- data/lib/stripe_mock/request_handlers/tax_rates.rb +36 -0
- data/lib/stripe_mock/request_handlers/tokens.rb +8 -6
- data/lib/stripe_mock/request_handlers/validators/param_validators.rb +130 -9
- data/lib/stripe_mock/test_strategies/base.rb +68 -8
- data/lib/stripe_mock/test_strategies/live.rb +23 -12
- data/lib/stripe_mock/test_strategies/mock.rb +6 -2
- data/lib/stripe_mock/version.rb +1 -1
- data/lib/stripe_mock/webhook_fixtures/balance.available.json +6 -0
- data/lib/stripe_mock/webhook_fixtures/charge.dispute.funds_reinstated.json +88 -0
- data/lib/stripe_mock/webhook_fixtures/charge.dispute.funds_withdrawn.json +88 -0
- data/lib/stripe_mock/webhook_fixtures/charge.failed.json +166 -38
- data/lib/stripe_mock/webhook_fixtures/customer.created.json +1 -0
- data/lib/stripe_mock/webhook_fixtures/customer.updated.json +1 -0
- data/lib/stripe_mock/webhook_fixtures/invoice.created.json +2 -1
- data/lib/stripe_mock/webhook_fixtures/invoice.payment_succeeded.json +1 -1
- data/lib/stripe_mock/webhook_fixtures/invoice.updated.json +2 -1
- data/lib/stripe_mock/webhook_fixtures/payment_intent.payment_failed.json +186 -0
- data/lib/stripe_mock/webhook_fixtures/payment_intent.succeeded.json +164 -0
- data/lib/stripe_mock/webhook_fixtures/product.created.json +34 -0
- data/lib/stripe_mock/webhook_fixtures/product.deleted.json +34 -0
- data/lib/stripe_mock/webhook_fixtures/product.updated.json +38 -0
- data/spec/instance_spec.rb +10 -12
- data/spec/list_spec.rb +38 -0
- data/spec/server_spec.rb +6 -3
- data/spec/shared_stripe_examples/account_examples.rb +1 -1
- data/spec/shared_stripe_examples/account_link_examples.rb +16 -0
- data/spec/shared_stripe_examples/balance_examples.rb +6 -0
- data/spec/shared_stripe_examples/balance_transaction_examples.rb +3 -3
- data/spec/shared_stripe_examples/bank_examples.rb +3 -3
- data/spec/shared_stripe_examples/card_examples.rb +4 -4
- data/spec/shared_stripe_examples/card_token_examples.rb +17 -21
- data/spec/shared_stripe_examples/charge_examples.rb +32 -36
- data/spec/shared_stripe_examples/checkout_examples.rb +38 -0
- data/spec/shared_stripe_examples/coupon_examples.rb +1 -1
- data/spec/shared_stripe_examples/customer_examples.rb +103 -53
- data/spec/shared_stripe_examples/dispute_examples.rb +2 -2
- data/spec/shared_stripe_examples/error_mock_examples.rb +8 -7
- data/spec/shared_stripe_examples/express_login_link_examples.rb +12 -0
- data/spec/shared_stripe_examples/external_account_examples.rb +3 -3
- data/spec/shared_stripe_examples/invoice_examples.rb +43 -41
- data/spec/shared_stripe_examples/invoice_item_examples.rb +1 -1
- data/spec/shared_stripe_examples/payment_intent_examples.rb +147 -0
- data/spec/shared_stripe_examples/payment_method_examples.rb +449 -0
- data/spec/shared_stripe_examples/payout_examples.rb +2 -2
- data/spec/shared_stripe_examples/plan_examples.rb +135 -77
- data/spec/shared_stripe_examples/price_examples.rb +183 -0
- data/spec/shared_stripe_examples/product_examples.rb +155 -0
- data/spec/shared_stripe_examples/refund_examples.rb +41 -31
- data/spec/shared_stripe_examples/setup_intent_examples.rb +68 -0
- data/spec/shared_stripe_examples/subscription_examples.rb +546 -295
- data/spec/shared_stripe_examples/subscription_items_examples.rb +76 -0
- data/spec/shared_stripe_examples/tax_rate_examples.rb +42 -0
- data/spec/shared_stripe_examples/transfer_examples.rb +9 -9
- data/spec/shared_stripe_examples/webhook_event_examples.rb +11 -11
- data/spec/spec_helper.rb +7 -4
- data/spec/stripe_mock_spec.rb +4 -4
- data/spec/support/shared_contexts/stripe_validator_spec.rb +8 -0
- data/spec/support/stripe_examples.rb +12 -2
- data/stripe-ruby-mock.gemspec +8 -3
- metadata +81 -32
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
shared_examples 'Checkout API' do
|
4
|
+
|
5
|
+
it "creates a stripe checkout session" do
|
6
|
+
session = Stripe::Checkout::Session.create({
|
7
|
+
payment_method_types: ['card'],
|
8
|
+
line_items: [{
|
9
|
+
name: 'T-shirt',
|
10
|
+
quantity: 1,
|
11
|
+
amount: 500,
|
12
|
+
currency: 'usd',
|
13
|
+
}],
|
14
|
+
})
|
15
|
+
expect(session.id).to match(/^test_cs/)
|
16
|
+
expect(session.line_items.count).to eq(1)
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'retrieve a checkout session' do
|
20
|
+
let(:checkout_session1) { stripe_helper.create_checkout_session }
|
21
|
+
|
22
|
+
it 'ca be retrieved by id' do
|
23
|
+
checkout_session1
|
24
|
+
|
25
|
+
checkout_session = Stripe::Checkout::Session.retrieve(checkout_session1.id)
|
26
|
+
|
27
|
+
expect(checkout_session.id).to eq(checkout_session1.id)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "cannot retrieve a checkout session that doesn't exist" do
|
31
|
+
expect { Stripe::Checkout::Session.retrieve('nope') }.to raise_error {|e|
|
32
|
+
expect(e).to be_a Stripe::InvalidRequestError
|
33
|
+
expect(e.param).to eq('checkout_session')
|
34
|
+
expect(e.http_status).to eq(404)
|
35
|
+
}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
shared_examples 'Customer API' do
|
4
|
+
let(:product_params) { {id: "prod_CCC", name: "My Product", type: "service"} }
|
5
|
+
let(:product) { stripe_helper.create_product(product_params) }
|
4
6
|
|
5
7
|
def gen_card_tk
|
6
8
|
stripe_helper.generate_card_token
|
@@ -15,6 +17,7 @@ shared_examples 'Customer API' do
|
|
15
17
|
expect(customer.id).to match(/^test_cus/)
|
16
18
|
expect(customer.email).to eq('johnny@appleseed.com')
|
17
19
|
expect(customer.description).to eq('a description')
|
20
|
+
expect(customer.preferred_locales).to eq([])
|
18
21
|
|
19
22
|
expect(customer.sources.count).to eq(1)
|
20
23
|
expect(customer.sources.data.length).to eq(1)
|
@@ -24,6 +27,17 @@ shared_examples 'Customer API' do
|
|
24
27
|
expect { customer.source }.to raise_error
|
25
28
|
end
|
26
29
|
|
30
|
+
it "creates a stripe customer with a default payment method" do
|
31
|
+
customer = Stripe::Customer.create({
|
32
|
+
email: 'johnny@appleseed.com',
|
33
|
+
invoice_settings: {
|
34
|
+
default_payment_method: "pm_1ExEuFL2DI6wht39WNJgbybl"
|
35
|
+
},
|
36
|
+
description: "a description"
|
37
|
+
})
|
38
|
+
expect(customer.invoice_settings.default_payment_method).to eq("pm_1ExEuFL2DI6wht39WNJgbybl")
|
39
|
+
end
|
40
|
+
|
27
41
|
it "creates a stripe customer with multiple cards and updates the default card" do
|
28
42
|
card_a = gen_card_tk
|
29
43
|
card_b = gen_card_tk
|
@@ -78,8 +92,17 @@ shared_examples 'Customer API' do
|
|
78
92
|
expect(customer.sources.data.first.exp_year).to eq 2024
|
79
93
|
end
|
80
94
|
|
95
|
+
it 'creates a customer with name' do
|
96
|
+
customer = Stripe::Customer.create(
|
97
|
+
source: gen_card_tk,
|
98
|
+
name: 'John Appleseed'
|
99
|
+
)
|
100
|
+
expect(customer.id).to match(/^test_cus/)
|
101
|
+
expect(customer.name).to eq('John Appleseed')
|
102
|
+
end
|
103
|
+
|
81
104
|
it 'creates a customer with a plan' do
|
82
|
-
plan = stripe_helper.create_plan(id: 'silver')
|
105
|
+
plan = stripe_helper.create_plan(id: 'silver', product: product.id)
|
83
106
|
customer = Stripe::Customer.create(id: 'test_cus_plan', source: gen_card_tk, :plan => 'silver')
|
84
107
|
|
85
108
|
customer = Stripe::Customer.retrieve('test_cus_plan')
|
@@ -91,24 +114,29 @@ shared_examples 'Customer API' do
|
|
91
114
|
expect(customer.subscriptions.first.customer).to eq(customer.id)
|
92
115
|
end
|
93
116
|
|
94
|
-
it
|
95
|
-
|
96
|
-
customer = Stripe::Customer.create(id: 'test_cus_plan', source: gen_card_tk, :plan => :string_id)
|
97
|
-
|
98
|
-
customer = Stripe::Customer.retrieve('test_cus_plan')
|
99
|
-
expect(customer.subscriptions.first.plan.id).to eq('string_id')
|
117
|
+
it 'creates a customer with a plan (string/symbol agnostic)' do
|
118
|
+
stripe_helper.create_plan(id: 'silver', product: product.id)
|
100
119
|
|
101
|
-
|
102
|
-
customer = Stripe::Customer.
|
120
|
+
Stripe::Customer.create(id: 'cust_SLV1', source: gen_card_tk, :plan => 'silver')
|
121
|
+
customer = Stripe::Customer.retrieve('cust_SLV1')
|
122
|
+
expect(customer.subscriptions.count).to eq(1)
|
123
|
+
expect(customer.subscriptions.data.length).to eq(1)
|
124
|
+
expect(customer.subscriptions).to_not be_nil
|
125
|
+
expect(customer.subscriptions.first.plan.id).to eq('silver')
|
126
|
+
expect(customer.subscriptions.first.customer).to eq(customer.id)
|
103
127
|
|
104
|
-
|
105
|
-
|
128
|
+
Stripe::Customer.create(id: 'cust_SLV2', source: gen_card_tk, :plan => :silver)
|
129
|
+
customer = Stripe::Customer.retrieve('cust_SLV2')
|
130
|
+
expect(customer.subscriptions.count).to eq(1)
|
131
|
+
expect(customer.subscriptions.data.length).to eq(1)
|
132
|
+
expect(customer.subscriptions).to_not be_nil
|
133
|
+
expect(customer.subscriptions.first.plan.id).to eq('silver')
|
134
|
+
expect(customer.subscriptions.first.customer).to eq(customer.id)
|
106
135
|
end
|
107
136
|
|
108
137
|
context "create customer" do
|
109
|
-
|
110
138
|
it "with a trial when trial_end is set" do
|
111
|
-
plan = stripe_helper.create_plan(id: 'no_trial', amount: 999)
|
139
|
+
plan = stripe_helper.create_plan(id: 'no_trial', product: product.id, amount: 999)
|
112
140
|
trial_end = Time.now.utc.to_i + 3600
|
113
141
|
customer = Stripe::Customer.create(id: 'test_cus_trial_end', source: gen_card_tk, plan: 'no_trial', trial_end: trial_end)
|
114
142
|
|
@@ -124,7 +152,7 @@ shared_examples 'Customer API' do
|
|
124
152
|
end
|
125
153
|
|
126
154
|
it 'overrides trial period length when trial_end is set' do
|
127
|
-
plan = stripe_helper.create_plan(id: 'silver', amount: 999, trial_period_days: 14)
|
155
|
+
plan = stripe_helper.create_plan(id: 'silver', product: product.id, amount: 999, trial_period_days: 14)
|
128
156
|
trial_end = Time.now.utc.to_i + 3600
|
129
157
|
customer = Stripe::Customer.create(id: 'test_cus_trial_end', source: gen_card_tk, plan: 'silver', trial_end: trial_end)
|
130
158
|
|
@@ -139,7 +167,7 @@ shared_examples 'Customer API' do
|
|
139
167
|
end
|
140
168
|
|
141
169
|
it 'creates a customer when trial_end is set and no source', live: true do
|
142
|
-
plan = stripe_helper.create_plan(id: 'silver', amount: 999)
|
170
|
+
plan = stripe_helper.create_plan(id: 'silver', product: product.id, amount: 999)
|
143
171
|
trial_end = Time.now.utc.to_i + 3600
|
144
172
|
customer = Stripe::Customer.create(plan: 'silver', trial_end: trial_end)
|
145
173
|
expect(customer.subscriptions.count).to eq(1)
|
@@ -152,7 +180,7 @@ shared_examples 'Customer API' do
|
|
152
180
|
end
|
153
181
|
|
154
182
|
it "returns no trial when trial_end is set to 'now'" do
|
155
|
-
plan = stripe_helper.create_plan(id: 'silver', amount: 999, trial_period_days: 14)
|
183
|
+
plan = stripe_helper.create_plan(id: 'silver', product: product.id, amount: 999, trial_period_days: 14)
|
156
184
|
customer = Stripe::Customer.create(id: 'test_cus_trial_end', source: gen_card_tk, plan: 'silver', trial_end: "now")
|
157
185
|
|
158
186
|
customer = Stripe::Customer.retrieve('test_cus_trial_end')
|
@@ -166,8 +194,8 @@ shared_examples 'Customer API' do
|
|
166
194
|
expect(customer.subscriptions.first.trial_end).to be_nil
|
167
195
|
end
|
168
196
|
|
169
|
-
it
|
170
|
-
plan = stripe_helper.create_plan(id: 'silver', amount: 999)
|
197
|
+
it 'returns an error if trial_end is set to a past time' do
|
198
|
+
plan = stripe_helper.create_plan(id: 'silver', product: product.id, amount: 999)
|
171
199
|
expect {
|
172
200
|
Stripe::Customer.create(id: 'test_cus_trial_end', source: gen_card_tk, plan: 'silver', trial_end: Time.now.utc.to_i - 3600)
|
173
201
|
}.to raise_error {|e|
|
@@ -176,7 +204,7 @@ shared_examples 'Customer API' do
|
|
176
204
|
}
|
177
205
|
end
|
178
206
|
|
179
|
-
it
|
207
|
+
it 'returns an error if trial_end is set without a plan' do
|
180
208
|
expect {
|
181
209
|
Stripe::Customer.create(id: 'test_cus_trial_end', source: gen_card_tk, trial_end: "now")
|
182
210
|
}.to raise_error {|e|
|
@@ -189,7 +217,7 @@ shared_examples 'Customer API' do
|
|
189
217
|
|
190
218
|
it 'cannot create a customer with a plan that does not exist' do
|
191
219
|
expect {
|
192
|
-
|
220
|
+
Stripe::Customer.create(id: 'test_cus_no_plan', source: gen_card_tk, :plan => 'non-existant')
|
193
221
|
}.to raise_error {|e|
|
194
222
|
expect(e).to be_a(Stripe::InvalidRequestError)
|
195
223
|
expect(e.message).to eq('No such plan: non-existant')
|
@@ -197,9 +225,9 @@ shared_examples 'Customer API' do
|
|
197
225
|
end
|
198
226
|
|
199
227
|
it 'cannot create a customer with an existing plan, but no card token' do
|
200
|
-
plan = stripe_helper.create_plan(id: 'p')
|
228
|
+
plan = stripe_helper.create_plan(id: 'p', product: product.id)
|
201
229
|
expect {
|
202
|
-
|
230
|
+
Stripe::Customer.create(id: 'test_cus_no_plan', :plan => 'p')
|
203
231
|
}.to raise_error {|e|
|
204
232
|
expect(e).to be_a(Stripe::InvalidRequestError)
|
205
233
|
expect(e.message).to eq('You must supply a valid card')
|
@@ -207,10 +235,9 @@ shared_examples 'Customer API' do
|
|
207
235
|
end
|
208
236
|
|
209
237
|
it 'creates a customer with a coupon discount' do
|
210
|
-
coupon = Stripe::Coupon.create(id:
|
238
|
+
coupon = Stripe::Coupon.create(id: '10PERCENT', duration: 'once')
|
211
239
|
|
212
|
-
|
213
|
-
Stripe::Customer.create(id: 'test_cus_coupon', coupon: '10PERCENT')
|
240
|
+
Stripe::Customer.create(id: 'test_cus_coupon', coupon: '10PERCENT')
|
214
241
|
|
215
242
|
customer = Stripe::Customer.retrieve('test_cus_coupon')
|
216
243
|
expect(customer.discount).to_not be_nil
|
@@ -222,40 +249,59 @@ shared_examples 'Customer API' do
|
|
222
249
|
describe 'repeating coupon with duration limit', live: true do
|
223
250
|
let!(:coupon) { stripe_helper.create_coupon(id: '10OFF', amount_off: 1000, currency: 'usd', duration: 'repeating', duration_in_months: 12) }
|
224
251
|
let!(:customer) { Stripe::Customer.create(coupon: coupon.id) }
|
252
|
+
|
225
253
|
it 'creates the discount with the end date', live: true do
|
226
254
|
discount = Stripe::Customer.retrieve(customer.id).discount
|
227
255
|
expect(discount).to_not be_nil
|
228
256
|
expect(discount.coupon).to_not be_nil
|
229
|
-
expect(discount.end).to be_within(
|
257
|
+
expect(discount.end).to be_within(10).of (DateTime.now >> 12).to_time.to_i
|
230
258
|
end
|
259
|
+
|
231
260
|
after { Stripe::Coupon.retrieve(coupon.id).delete }
|
232
261
|
after { Stripe::Customer.retrieve(customer.id).delete }
|
233
262
|
end
|
234
263
|
|
235
264
|
it 'cannot create a customer with a coupon that does not exist' do
|
236
265
|
expect{
|
237
|
-
|
266
|
+
Stripe::Customer.create(id: 'test_cus_no_coupon', coupon: '5OFF')
|
238
267
|
}.to raise_error {|e|
|
239
268
|
expect(e).to be_a(Stripe::InvalidRequestError)
|
240
269
|
expect(e.message).to eq('No such coupon: 5OFF')
|
241
270
|
}
|
242
271
|
end
|
243
272
|
|
273
|
+
context 'with coupon on customer' do
|
274
|
+
before do
|
275
|
+
Stripe::Coupon.create(id: '10PERCENT', duration: 'once')
|
276
|
+
Stripe::Customer.create(id: 'test_cus_coupon', coupon: '10PERCENT')
|
277
|
+
end
|
278
|
+
|
279
|
+
it 'remove the coupon from customer' do
|
280
|
+
customer = Stripe::Customer.retrieve('test_cus_coupon')
|
281
|
+
expect(customer.discount).to_not be_nil
|
282
|
+
expect(customer.discount.coupon).to_not be_nil
|
283
|
+
expect(customer.discount.customer).to eq customer.id
|
284
|
+
expect(customer.discount.start).to be_within(1).of Time.now.to_i
|
285
|
+
|
286
|
+
Stripe::Customer.update('test_cus_coupon', coupon: '')
|
287
|
+
customer = Stripe::Customer.retrieve('test_cus_coupon')
|
288
|
+
expect(customer.discount).to be_nil
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
244
292
|
it "stores a created stripe customer in memory" do
|
245
|
-
customer = Stripe::Customer.create(
|
246
|
-
|
247
|
-
source: gen_card_tk
|
248
|
-
})
|
249
|
-
customer2 = Stripe::Customer.create({
|
250
|
-
email: 'bob@bobbers.com',
|
251
|
-
source: gen_card_tk
|
252
|
-
})
|
293
|
+
customer = Stripe::Customer.create(email: 'johnny@appleseed.com')
|
294
|
+
customer2 = Stripe::Customer.create(email: 'bob@bobbers.com')
|
253
295
|
data = test_data_source(:customers)
|
254
|
-
|
255
|
-
|
296
|
+
list = data[data.keys.first]
|
297
|
+
|
298
|
+
customer_hash = list[customer.id.to_sym] || list[customer.id]
|
299
|
+
expect(customer_hash).to_not be_nil
|
300
|
+
expect(customer_hash[:email]).to eq('johnny@appleseed.com')
|
256
301
|
|
257
|
-
|
258
|
-
expect(
|
302
|
+
customer2_hash = list[customer2.id.to_sym] || list[customer2.id]
|
303
|
+
expect(customer2_hash).to_not be_nil
|
304
|
+
expect(customer2_hash[:email]).to eq('bob@bobbers.com')
|
259
305
|
end
|
260
306
|
|
261
307
|
it "retrieves a stripe customer" do
|
@@ -267,6 +313,7 @@ shared_examples 'Customer API' do
|
|
267
313
|
|
268
314
|
expect(customer.id).to eq(original.id)
|
269
315
|
expect(customer.email).to eq(original.email)
|
316
|
+
expect(customer.name).to eq(nil)
|
270
317
|
expect(customer.default_source).to eq(original.default_source)
|
271
318
|
expect(customer.default_source).not_to be_a(Stripe::Card)
|
272
319
|
expect(customer.subscriptions.count).to eq(0)
|
@@ -297,9 +344,9 @@ shared_examples 'Customer API' do
|
|
297
344
|
Stripe::Customer.create({ email: 'one@one.com' })
|
298
345
|
Stripe::Customer.create({ email: 'two@two.com' })
|
299
346
|
|
300
|
-
all = Stripe::Customer.
|
347
|
+
all = Stripe::Customer.list
|
301
348
|
expect(all.count).to eq(2)
|
302
|
-
expect(all.map &:email).to include('one@one.com', 'two@two.com')
|
349
|
+
expect(all.data.map &:email).to include('one@one.com', 'two@two.com')
|
303
350
|
end
|
304
351
|
|
305
352
|
it "updates a stripe customer" do
|
@@ -307,8 +354,9 @@ shared_examples 'Customer API' do
|
|
307
354
|
email = original.email
|
308
355
|
|
309
356
|
coupon = Stripe::Coupon.create(id: "10PERCENT", duration: 'once')
|
310
|
-
original.description
|
311
|
-
original.
|
357
|
+
original.description = 'new desc'
|
358
|
+
original.preferred_locales = %w(fr en)
|
359
|
+
original.coupon = coupon.id
|
312
360
|
original.save
|
313
361
|
|
314
362
|
expect(original.email).to eq(email)
|
@@ -318,9 +366,19 @@ shared_examples 'Customer API' do
|
|
318
366
|
customer = Stripe::Customer.retrieve("test_customer_update")
|
319
367
|
expect(customer.email).to eq(original.email)
|
320
368
|
expect(customer.description).to eq('new desc')
|
369
|
+
expect(customer.preferred_locales).to eq(%w(fr en))
|
321
370
|
expect(customer.discount.coupon).to be_a Stripe::Coupon
|
322
371
|
end
|
323
372
|
|
373
|
+
it "preserves stripe customer metadata" do
|
374
|
+
metadata = {user_id: "38"}
|
375
|
+
customer = Stripe::Customer.create(metadata: metadata)
|
376
|
+
expect(customer.metadata.to_h).to eq(metadata)
|
377
|
+
|
378
|
+
updated = Stripe::Customer.update(customer.id, metadata: {fruit: "apples"})
|
379
|
+
expect(updated.metadata.to_h).to eq(metadata.merge(fruit: "apples"))
|
380
|
+
end
|
381
|
+
|
324
382
|
it "retrieves the customer's default source after it was updated" do
|
325
383
|
customer = Stripe::Customer.create()
|
326
384
|
customer.source = gen_card_tk
|
@@ -381,7 +439,7 @@ shared_examples 'Customer API' do
|
|
381
439
|
end
|
382
440
|
|
383
441
|
it "still has subscriptions after save when subscriptions unchanged" do
|
384
|
-
plan = stripe_helper.create_plan(id: 'silver')
|
442
|
+
plan = stripe_helper.create_plan(id: 'silver', product: product.id)
|
385
443
|
original = Stripe::Customer.create(source: gen_card_tk, plan: 'silver')
|
386
444
|
subscription = original.subscriptions.data.first
|
387
445
|
subscription_id = subscription.id
|
@@ -394,7 +452,7 @@ shared_examples 'Customer API' do
|
|
394
452
|
end
|
395
453
|
|
396
454
|
it "should add a customer to a subscription" do
|
397
|
-
plan = stripe_helper.create_plan(id: 'silver')
|
455
|
+
plan = stripe_helper.create_plan(id: 'silver', product: product.id)
|
398
456
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
399
457
|
customer.subscriptions.create(plan: plan.id)
|
400
458
|
|
@@ -407,14 +465,6 @@ shared_examples 'Customer API' do
|
|
407
465
|
expect(customer.deleted).to eq(true)
|
408
466
|
end
|
409
467
|
|
410
|
-
it 'works with the update_subscription method' do
|
411
|
-
stripe_helper.create_plan(id: 'silver')
|
412
|
-
cus = Stripe::Customer.create(source: gen_card_tk)
|
413
|
-
expect {
|
414
|
-
cus.update_subscription(plan: 'silver')
|
415
|
-
}.not_to raise_error
|
416
|
-
end
|
417
|
-
|
418
468
|
it "deletes a stripe customer discount" do
|
419
469
|
original = Stripe::Customer.create(id: 'test_customer_update')
|
420
470
|
|
@@ -71,14 +71,14 @@ shared_examples 'Dispute API' do
|
|
71
71
|
describe "listing disputes" do
|
72
72
|
|
73
73
|
it "retrieves all disputes" do
|
74
|
-
disputes = Stripe::Dispute.
|
74
|
+
disputes = Stripe::Dispute.list
|
75
75
|
|
76
76
|
expect(disputes.count).to eq(10)
|
77
77
|
expect(disputes.map &:id).to include('dp_05RsQX2eZvKYlo2C0FRTGSSA','dp_15RsQX2eZvKYlo2C0ERTYUIA', 'dp_25RsQX2eZvKYlo2C0ZXCVBNM', 'dp_35RsQX2eZvKYlo2C0QAZXSWE', 'dp_45RsQX2eZvKYlo2C0EDCVFRT', 'dp_55RsQX2eZvKYlo2C0OIKLJUY', 'dp_65RsQX2eZvKYlo2C0ASDFGHJ', 'dp_75RsQX2eZvKYlo2C0EDCXSWQ', 'dp_85RsQX2eZvKYlo2C0UJMCDET', 'dp_95RsQX2eZvKYlo2C0EDFRYUI')
|
78
78
|
end
|
79
79
|
|
80
80
|
it "retrieves disputes with a limit(3)" do
|
81
|
-
disputes = Stripe::Dispute.
|
81
|
+
disputes = Stripe::Dispute.list(limit: 3)
|
82
82
|
|
83
83
|
expect(disputes.count).to eq(3)
|
84
84
|
expected = ['dp_95RsQX2eZvKYlo2C0EDFRYUI','dp_85RsQX2eZvKYlo2C0UJMCDET', 'dp_75RsQX2eZvKYlo2C0EDCXSWQ']
|
@@ -6,13 +6,14 @@ def expect_card_error(code, param)
|
|
6
6
|
expect(e.http_status).to eq(402)
|
7
7
|
expect(e.code).to eq(code)
|
8
8
|
expect(e.param).to eq(param)
|
9
|
+
expect(e.http_body).to eq(e.json_body.to_json)
|
9
10
|
}
|
10
11
|
end
|
11
12
|
|
12
13
|
shared_examples 'Stripe Error Mocking' do
|
13
14
|
|
14
15
|
it "mocks a manually given stripe card error" do
|
15
|
-
error = Stripe::CardError.new('Test Msg', 'param_name', 'bad_code', http_status: 444, http_body: 'body', json_body:
|
16
|
+
error = Stripe::CardError.new('Test Msg', 'param_name', code: 'bad_code', http_status: 444, http_body: 'body', json_body: {})
|
16
17
|
StripeMock.prepare_error(error)
|
17
18
|
|
18
19
|
expect { Stripe::Customer.create() }.to raise_error {|e|
|
@@ -23,14 +24,14 @@ shared_examples 'Stripe Error Mocking' do
|
|
23
24
|
|
24
25
|
expect(e.http_status).to eq(444)
|
25
26
|
expect(e.http_body).to eq('body')
|
26
|
-
expect(e.json_body).to eq(
|
27
|
+
expect(e.json_body).to eq({})
|
27
28
|
}
|
28
29
|
end
|
29
30
|
|
30
31
|
|
31
32
|
it "mocks a manually gives stripe invalid request error" do
|
32
33
|
|
33
|
-
error = Stripe::InvalidRequestError.new('Test Invalid', 'param', http_status: 987, http_body: 'ibody', json_body:
|
34
|
+
error = Stripe::InvalidRequestError.new('Test Invalid', 'param', http_status: 987, http_body: 'ibody', json_body: {})
|
34
35
|
StripeMock.prepare_error(error)
|
35
36
|
|
36
37
|
expect { Stripe::Charge.create(amount: 1, currency: 'usd') }.to raise_error {|e|
|
@@ -40,22 +41,22 @@ shared_examples 'Stripe Error Mocking' do
|
|
40
41
|
|
41
42
|
expect(e.http_status).to eq(987)
|
42
43
|
expect(e.http_body).to eq('ibody')
|
43
|
-
expect(e.json_body).to eq(
|
44
|
+
expect(e.json_body).to eq({})
|
44
45
|
}
|
45
46
|
end
|
46
47
|
|
47
48
|
|
48
49
|
it "mocks a manually gives stripe invalid auth error" do
|
49
|
-
error = Stripe::AuthenticationError.new('Bad Auth', http_status: 499, http_body: 'abody', json_body:
|
50
|
+
error = Stripe::AuthenticationError.new('Bad Auth', http_status: 499, http_body: 'abody', json_body: {})
|
50
51
|
StripeMock.prepare_error(error)
|
51
52
|
|
52
|
-
expect { stripe_helper.create_plan() }.to raise_error {|e|
|
53
|
+
expect { stripe_helper.create_plan(id: "test_plan") }.to raise_error {|e|
|
53
54
|
expect(e).to be_a(Stripe::AuthenticationError)
|
54
55
|
expect(e.message).to eq('Bad Auth')
|
55
56
|
|
56
57
|
expect(e.http_status).to eq(499)
|
57
58
|
expect(e.http_body).to eq('abody')
|
58
|
-
expect(e.json_body).to eq(
|
59
|
+
expect(e.json_body).to eq({})
|
59
60
|
}
|
60
61
|
end
|
61
62
|
|