stripe-ruby-mock 2.5.6 → 3.1.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|