stripe-ruby-mock 2.5.8 → 3.1.0.rc3
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 +41 -0
- data/Gemfile +1 -0
- data/README.md +17 -11
- data/lib/stripe_mock.rb +8 -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 +5 -0
- data/lib/stripe_mock/client.rb +2 -1
- data/lib/stripe_mock/data.rb +285 -16
- data/lib/stripe_mock/data/list.rb +42 -9
- data/lib/stripe_mock/instance.rb +18 -4
- 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 +6 -4
- data/lib/stripe_mock/request_handlers/checkout.rb +15 -0
- data/lib/stripe_mock/request_handlers/checkout_session.rb +22 -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 +5 -0
- data/lib/stripe_mock/request_handlers/helpers/subscription_helpers.rb +12 -7
- data/lib/stripe_mock/request_handlers/helpers/token_helpers.rb +1 -1
- data/lib/stripe_mock/request_handlers/invoices.rb +10 -4
- 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 +1 -0
- 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/subscriptions.rb +45 -22
- data/lib/stripe_mock/request_handlers/tokens.rb +6 -4
- data/lib/stripe_mock/request_handlers/validators/param_validators.rb +123 -9
- data/lib/stripe_mock/server.rb +2 -2
- data/lib/stripe_mock/test_strategies/base.rb +67 -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.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/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 +9 -22
- data/spec/shared_stripe_examples/checkout_examples.rb +47 -0
- data/spec/shared_stripe_examples/coupon_examples.rb +1 -1
- data/spec/shared_stripe_examples/customer_examples.rb +93 -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 +41 -39
- 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 -92
- data/spec/shared_stripe_examples/price_examples.rb +183 -0
- data/spec/shared_stripe_examples/product_examples.rb +147 -0
- data/spec/shared_stripe_examples/refund_examples.rb +25 -21
- data/spec/shared_stripe_examples/setup_intent_examples.rb +68 -0
- data/spec/shared_stripe_examples/subscription_examples.rb +430 -318
- data/spec/shared_stripe_examples/subscription_items_examples.rb +3 -2
- data/spec/shared_stripe_examples/transfer_examples.rb +6 -6
- 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 +9 -1
- data/stripe-ruby-mock.gemspec +8 -3
- metadata +72 -34
- data/spec/shared_stripe_examples/product_example.rb +0 -65
@@ -77,7 +77,7 @@ shared_examples 'Bank API' do
|
|
77
77
|
let!(:bank) { customer.sources.create(source: bank_token) }
|
78
78
|
|
79
79
|
it "can retrieve all customer's banks" do
|
80
|
-
retrieved = customer.sources.
|
80
|
+
retrieved = customer.sources.list
|
81
81
|
expect(retrieved.count).to eq(1)
|
82
82
|
end
|
83
83
|
|
@@ -174,7 +174,7 @@ shared_examples 'Bank API' do
|
|
174
174
|
|
175
175
|
customer = Stripe::Customer.retrieve('test_customer_bank')
|
176
176
|
|
177
|
-
list = customer.sources.
|
177
|
+
list = customer.sources.list
|
178
178
|
|
179
179
|
expect(list.object).to eq("list")
|
180
180
|
expect(list.count).to eq(2)
|
@@ -191,7 +191,7 @@ shared_examples 'Bank API' do
|
|
191
191
|
Stripe::Customer.create(id: 'no_banks')
|
192
192
|
customer = Stripe::Customer.retrieve('no_banks')
|
193
193
|
|
194
|
-
list = customer.sources.
|
194
|
+
list = customer.sources.list
|
195
195
|
|
196
196
|
expect(list.object).to eq("list")
|
197
197
|
expect(list.count).to eq(0)
|
@@ -134,7 +134,7 @@ shared_examples 'Card API' do
|
|
134
134
|
let!(:card) { customer.sources.create(source: card_token) }
|
135
135
|
|
136
136
|
it "can retrieve all customer's cards" do
|
137
|
-
retrieved = customer.sources.
|
137
|
+
retrieved = customer.sources.list
|
138
138
|
expect(retrieved.count).to eq(1)
|
139
139
|
end
|
140
140
|
|
@@ -198,7 +198,7 @@ shared_examples 'Card API' do
|
|
198
198
|
let!(:card) { recipient.cards.create(card: card_token) }
|
199
199
|
|
200
200
|
it "can retrieve all recipient's cards" do
|
201
|
-
retrieved = recipient.cards.
|
201
|
+
retrieved = recipient.cards.list
|
202
202
|
expect(retrieved.count).to eq(1)
|
203
203
|
end
|
204
204
|
|
@@ -279,7 +279,7 @@ shared_examples 'Card API' do
|
|
279
279
|
|
280
280
|
customer = Stripe::Customer.retrieve('test_customer_card')
|
281
281
|
|
282
|
-
list = customer.sources.
|
282
|
+
list = customer.sources.list
|
283
283
|
|
284
284
|
expect(list.object).to eq("list")
|
285
285
|
expect(list.count).to eq(2)
|
@@ -296,7 +296,7 @@ shared_examples 'Card API' do
|
|
296
296
|
Stripe::Customer.create(id: 'no_cards')
|
297
297
|
customer = Stripe::Customer.retrieve('no_cards')
|
298
298
|
|
299
|
-
list = customer.sources.
|
299
|
+
list = customer.sources.list
|
300
300
|
|
301
301
|
expect(list.object).to eq("list")
|
302
302
|
expect(list.count).to eq(0)
|
@@ -145,34 +145,30 @@ shared_examples 'Card Token Mocking' do
|
|
145
145
|
end
|
146
146
|
|
147
147
|
it 'generates a card token from another card', oauth: true do
|
148
|
-
token =
|
149
|
-
card: {
|
150
|
-
exp_month: 10,
|
151
|
-
exp_year: 2016,
|
152
|
-
number: '4242424242424242'
|
153
|
-
}
|
154
|
-
)
|
148
|
+
token = StripeMock.generate_card_token(last4: "2244", exp_month: 33, exp_year: 2255)
|
155
149
|
|
156
|
-
cus1 = Stripe::Customer.create(
|
150
|
+
cus1 = Stripe::Customer.create()
|
151
|
+
cus1.source = token
|
152
|
+
cus1.save
|
157
153
|
|
158
154
|
card1 = cus1.sources.data.first
|
159
|
-
expect(card1.last4).to eq(
|
160
|
-
expect(card1.exp_month).to eq(
|
161
|
-
expect(card1.exp_year).to eq(
|
155
|
+
expect(card1.last4).to eq("2244")
|
156
|
+
expect(card1.exp_month).to eq(33)
|
157
|
+
expect(card1.exp_year).to eq(2255)
|
162
158
|
|
163
|
-
card_token = Stripe::Token.create(
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
},
|
168
|
-
ENV['STRIPE_TEST_OAUTH_ACCESS_TOKEN'])
|
159
|
+
card_token = Stripe::Token.create({
|
160
|
+
customer: cus1.id,
|
161
|
+
card: card1.id
|
162
|
+
})
|
169
163
|
|
170
|
-
cus2 = Stripe::Customer.create({
|
164
|
+
cus2 = Stripe::Customer.create({}, ENV['STRIPE_TEST_OAUTH_ACCESS_TOKEN'])
|
165
|
+
cus2.source = card_token.id
|
166
|
+
cus2.save
|
171
167
|
|
172
168
|
card2 = cus2.sources.data.first
|
173
|
-
expect(card2.last4).to eq(
|
174
|
-
expect(card2.exp_month).to eq(
|
175
|
-
expect(card2.exp_year).to eq(
|
169
|
+
expect(card2.last4).to eq("2244")
|
170
|
+
expect(card2.exp_month).to eq(33)
|
171
|
+
expect(card2.exp_year).to eq(2255)
|
176
172
|
end
|
177
173
|
|
178
174
|
it "throws an error if neither card nor customer are provided", :live => true do
|
@@ -278,20 +278,6 @@ shared_examples 'Charge API' do
|
|
278
278
|
}.not_to raise_error
|
279
279
|
end
|
280
280
|
|
281
|
-
it "marks a charge as safe" do
|
282
|
-
original = Stripe::Charge.create({
|
283
|
-
amount: 777,
|
284
|
-
currency: 'USD',
|
285
|
-
source: stripe_helper.generate_card_token
|
286
|
-
})
|
287
|
-
charge = Stripe::Charge.retrieve(original.id)
|
288
|
-
|
289
|
-
charge.mark_as_safe
|
290
|
-
|
291
|
-
updated = Stripe::Charge.retrieve(original.id)
|
292
|
-
expect(updated.fraud_details[:user_report]).to eq "safe"
|
293
|
-
end
|
294
|
-
|
295
281
|
it "does not lose data when updating a charge" do
|
296
282
|
original = Stripe::Charge.create({
|
297
283
|
amount: 777,
|
@@ -357,28 +343,29 @@ shared_examples 'Charge API' do
|
|
357
343
|
end
|
358
344
|
|
359
345
|
it "stores charges for a customer in memory" do
|
360
|
-
|
346
|
+
charges = Stripe::Charge.list(customer: @customer.id)
|
347
|
+
expect(charges.map(&:id)).to eq([@charge.id])
|
361
348
|
end
|
362
349
|
|
363
350
|
it "stores all charges in memory" do
|
364
|
-
expect(Stripe::Charge.
|
351
|
+
expect(Stripe::Charge.list.data.map(&:id).reverse).to eq([@charge.id, @charge2.id])
|
365
352
|
end
|
366
353
|
|
367
354
|
it "defaults count to 10 charges" do
|
368
355
|
11.times { Stripe::Charge.create(amount: 1, currency: 'usd', source: stripe_helper.generate_card_token) }
|
369
356
|
|
370
|
-
expect(Stripe::Charge.
|
357
|
+
expect(Stripe::Charge.list.data.count).to eq(10)
|
371
358
|
end
|
372
359
|
|
373
360
|
it "is marked as having more when more objects exist" do
|
374
361
|
11.times { Stripe::Charge.create(amount: 1, currency: 'usd', source: stripe_helper.generate_card_token) }
|
375
362
|
|
376
|
-
expect(Stripe::Charge.
|
363
|
+
expect(Stripe::Charge.list.has_more).to eq(true)
|
377
364
|
end
|
378
365
|
|
379
366
|
context "when passing limit" do
|
380
367
|
it "gets that many charges" do
|
381
|
-
expect(Stripe::Charge.
|
368
|
+
expect(Stripe::Charge.list(limit: 1).count).to eq(1)
|
382
369
|
end
|
383
370
|
end
|
384
371
|
end
|
@@ -398,13 +385,13 @@ shared_examples 'Charge API' do
|
|
398
385
|
Stripe::Charge.create(customer: cus.id, amount: 100, currency: "usd")
|
399
386
|
end
|
400
387
|
|
401
|
-
|
388
|
+
all_charges = Stripe::Charge.list
|
402
389
|
default_limit = 10
|
403
|
-
half = Stripe::Charge.
|
390
|
+
half = Stripe::Charge.list(starting_after: all_charges.data.at(1).id)
|
404
391
|
|
405
392
|
expect(half).to be_a(Stripe::ListObject)
|
406
393
|
expect(half.data.count).to eq(default_limit)
|
407
|
-
expect(half.data.first.id).to eq(
|
394
|
+
expect(half.data.first.id).to eq(all_charges.data.at(2).id)
|
408
395
|
end
|
409
396
|
|
410
397
|
|
@@ -0,0 +1,47 @@
|
|
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
|
+
|
38
|
+
it 'can expand setup_intent' do
|
39
|
+
setup_intent = Stripe::SetupIntent.create
|
40
|
+
initial_session = Stripe::Checkout::Session.create(setup_intent: setup_intent.id)
|
41
|
+
|
42
|
+
checkout_session = Stripe::Checkout::Session.retrieve(id: initial_session.id, expand: ['setup_intent'])
|
43
|
+
|
44
|
+
expect(checkout_session.setup_intent).to eq(setup_intent)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
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
|
@@ -88,7 +102,7 @@ shared_examples 'Customer API' do
|
|
88
102
|
end
|
89
103
|
|
90
104
|
it 'creates a customer with a plan' do
|
91
|
-
plan = stripe_helper.create_plan(id: 'silver')
|
105
|
+
plan = stripe_helper.create_plan(id: 'silver', product: product.id)
|
92
106
|
customer = Stripe::Customer.create(id: 'test_cus_plan', source: gen_card_tk, :plan => 'silver')
|
93
107
|
|
94
108
|
customer = Stripe::Customer.retrieve('test_cus_plan')
|
@@ -100,24 +114,29 @@ shared_examples 'Customer API' do
|
|
100
114
|
expect(customer.subscriptions.first.customer).to eq(customer.id)
|
101
115
|
end
|
102
116
|
|
103
|
-
it
|
104
|
-
|
105
|
-
customer = Stripe::Customer.create(id: 'test_cus_plan', source: gen_card_tk, :plan => :string_id)
|
117
|
+
it 'creates a customer with a plan (string/symbol agnostic)' do
|
118
|
+
stripe_helper.create_plan(id: 'silver', product: product.id)
|
106
119
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
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)
|
112
127
|
|
113
|
-
|
114
|
-
|
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)
|
115
135
|
end
|
116
136
|
|
117
137
|
context "create customer" do
|
118
|
-
|
119
138
|
it "with a trial when trial_end is set" do
|
120
|
-
plan = stripe_helper.create_plan(id: 'no_trial', amount: 999)
|
139
|
+
plan = stripe_helper.create_plan(id: 'no_trial', product: product.id, amount: 999)
|
121
140
|
trial_end = Time.now.utc.to_i + 3600
|
122
141
|
customer = Stripe::Customer.create(id: 'test_cus_trial_end', source: gen_card_tk, plan: 'no_trial', trial_end: trial_end)
|
123
142
|
|
@@ -133,7 +152,7 @@ shared_examples 'Customer API' do
|
|
133
152
|
end
|
134
153
|
|
135
154
|
it 'overrides trial period length when trial_end is set' do
|
136
|
-
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)
|
137
156
|
trial_end = Time.now.utc.to_i + 3600
|
138
157
|
customer = Stripe::Customer.create(id: 'test_cus_trial_end', source: gen_card_tk, plan: 'silver', trial_end: trial_end)
|
139
158
|
|
@@ -148,7 +167,7 @@ shared_examples 'Customer API' do
|
|
148
167
|
end
|
149
168
|
|
150
169
|
it 'creates a customer when trial_end is set and no source', live: true do
|
151
|
-
plan = stripe_helper.create_plan(id: 'silver', amount: 999)
|
170
|
+
plan = stripe_helper.create_plan(id: 'silver', product: product.id, amount: 999)
|
152
171
|
trial_end = Time.now.utc.to_i + 3600
|
153
172
|
customer = Stripe::Customer.create(plan: 'silver', trial_end: trial_end)
|
154
173
|
expect(customer.subscriptions.count).to eq(1)
|
@@ -161,7 +180,7 @@ shared_examples 'Customer API' do
|
|
161
180
|
end
|
162
181
|
|
163
182
|
it "returns no trial when trial_end is set to 'now'" do
|
164
|
-
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)
|
165
184
|
customer = Stripe::Customer.create(id: 'test_cus_trial_end', source: gen_card_tk, plan: 'silver', trial_end: "now")
|
166
185
|
|
167
186
|
customer = Stripe::Customer.retrieve('test_cus_trial_end')
|
@@ -175,8 +194,8 @@ shared_examples 'Customer API' do
|
|
175
194
|
expect(customer.subscriptions.first.trial_end).to be_nil
|
176
195
|
end
|
177
196
|
|
178
|
-
it
|
179
|
-
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)
|
180
199
|
expect {
|
181
200
|
Stripe::Customer.create(id: 'test_cus_trial_end', source: gen_card_tk, plan: 'silver', trial_end: Time.now.utc.to_i - 3600)
|
182
201
|
}.to raise_error {|e|
|
@@ -185,7 +204,7 @@ shared_examples 'Customer API' do
|
|
185
204
|
}
|
186
205
|
end
|
187
206
|
|
188
|
-
it
|
207
|
+
it 'returns an error if trial_end is set without a plan' do
|
189
208
|
expect {
|
190
209
|
Stripe::Customer.create(id: 'test_cus_trial_end', source: gen_card_tk, trial_end: "now")
|
191
210
|
}.to raise_error {|e|
|
@@ -198,7 +217,7 @@ shared_examples 'Customer API' do
|
|
198
217
|
|
199
218
|
it 'cannot create a customer with a plan that does not exist' do
|
200
219
|
expect {
|
201
|
-
|
220
|
+
Stripe::Customer.create(id: 'test_cus_no_plan', source: gen_card_tk, :plan => 'non-existant')
|
202
221
|
}.to raise_error {|e|
|
203
222
|
expect(e).to be_a(Stripe::InvalidRequestError)
|
204
223
|
expect(e.message).to eq('No such plan: non-existant')
|
@@ -206,9 +225,9 @@ shared_examples 'Customer API' do
|
|
206
225
|
end
|
207
226
|
|
208
227
|
it 'cannot create a customer with an existing plan, but no card token' do
|
209
|
-
plan = stripe_helper.create_plan(id: 'p')
|
228
|
+
plan = stripe_helper.create_plan(id: 'p', product: product.id)
|
210
229
|
expect {
|
211
|
-
|
230
|
+
Stripe::Customer.create(id: 'test_cus_no_plan', :plan => 'p')
|
212
231
|
}.to raise_error {|e|
|
213
232
|
expect(e).to be_a(Stripe::InvalidRequestError)
|
214
233
|
expect(e.message).to eq('You must supply a valid card')
|
@@ -216,10 +235,9 @@ shared_examples 'Customer API' do
|
|
216
235
|
end
|
217
236
|
|
218
237
|
it 'creates a customer with a coupon discount' do
|
219
|
-
coupon = Stripe::Coupon.create(id:
|
238
|
+
coupon = Stripe::Coupon.create(id: '10PERCENT', duration: 'once')
|
220
239
|
|
221
|
-
|
222
|
-
Stripe::Customer.create(id: 'test_cus_coupon', coupon: '10PERCENT')
|
240
|
+
Stripe::Customer.create(id: 'test_cus_coupon', coupon: '10PERCENT')
|
223
241
|
|
224
242
|
customer = Stripe::Customer.retrieve('test_cus_coupon')
|
225
243
|
expect(customer.discount).to_not be_nil
|
@@ -231,40 +249,59 @@ shared_examples 'Customer API' do
|
|
231
249
|
describe 'repeating coupon with duration limit', live: true do
|
232
250
|
let!(:coupon) { stripe_helper.create_coupon(id: '10OFF', amount_off: 1000, currency: 'usd', duration: 'repeating', duration_in_months: 12) }
|
233
251
|
let!(:customer) { Stripe::Customer.create(coupon: coupon.id) }
|
252
|
+
|
234
253
|
it 'creates the discount with the end date', live: true do
|
235
254
|
discount = Stripe::Customer.retrieve(customer.id).discount
|
236
255
|
expect(discount).to_not be_nil
|
237
256
|
expect(discount.coupon).to_not be_nil
|
238
|
-
expect(discount.end).to be_within(
|
257
|
+
expect(discount.end).to be_within(10).of (DateTime.now >> 12).to_time.to_i
|
239
258
|
end
|
259
|
+
|
240
260
|
after { Stripe::Coupon.retrieve(coupon.id).delete }
|
241
261
|
after { Stripe::Customer.retrieve(customer.id).delete }
|
242
262
|
end
|
243
263
|
|
244
264
|
it 'cannot create a customer with a coupon that does not exist' do
|
245
265
|
expect{
|
246
|
-
|
266
|
+
Stripe::Customer.create(id: 'test_cus_no_coupon', coupon: '5OFF')
|
247
267
|
}.to raise_error {|e|
|
248
268
|
expect(e).to be_a(Stripe::InvalidRequestError)
|
249
269
|
expect(e.message).to eq('No such coupon: 5OFF')
|
250
270
|
}
|
251
271
|
end
|
252
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
|
+
|
253
292
|
it "stores a created stripe customer in memory" do
|
254
|
-
customer = Stripe::Customer.create(
|
255
|
-
|
256
|
-
source: gen_card_tk
|
257
|
-
})
|
258
|
-
customer2 = Stripe::Customer.create({
|
259
|
-
email: 'bob@bobbers.com',
|
260
|
-
source: gen_card_tk
|
261
|
-
})
|
293
|
+
customer = Stripe::Customer.create(email: 'johnny@appleseed.com')
|
294
|
+
customer2 = Stripe::Customer.create(email: 'bob@bobbers.com')
|
262
295
|
data = test_data_source(:customers)
|
263
|
-
|
264
|
-
|
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')
|
265
301
|
|
266
|
-
|
267
|
-
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')
|
268
305
|
end
|
269
306
|
|
270
307
|
it "retrieves a stripe customer" do
|
@@ -307,9 +344,9 @@ shared_examples 'Customer API' do
|
|
307
344
|
Stripe::Customer.create({ email: 'one@one.com' })
|
308
345
|
Stripe::Customer.create({ email: 'two@two.com' })
|
309
346
|
|
310
|
-
all = Stripe::Customer.
|
347
|
+
all = Stripe::Customer.list
|
311
348
|
expect(all.count).to eq(2)
|
312
|
-
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')
|
313
350
|
end
|
314
351
|
|
315
352
|
it "updates a stripe customer" do
|
@@ -317,8 +354,9 @@ shared_examples 'Customer API' do
|
|
317
354
|
email = original.email
|
318
355
|
|
319
356
|
coupon = Stripe::Coupon.create(id: "10PERCENT", duration: 'once')
|
320
|
-
original.description
|
321
|
-
original.
|
357
|
+
original.description = 'new desc'
|
358
|
+
original.preferred_locales = %w(fr en)
|
359
|
+
original.coupon = coupon.id
|
322
360
|
original.save
|
323
361
|
|
324
362
|
expect(original.email).to eq(email)
|
@@ -328,9 +366,19 @@ shared_examples 'Customer API' do
|
|
328
366
|
customer = Stripe::Customer.retrieve("test_customer_update")
|
329
367
|
expect(customer.email).to eq(original.email)
|
330
368
|
expect(customer.description).to eq('new desc')
|
369
|
+
expect(customer.preferred_locales).to eq(%w(fr en))
|
331
370
|
expect(customer.discount.coupon).to be_a Stripe::Coupon
|
332
371
|
end
|
333
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
|
+
|
334
382
|
it "retrieves the customer's default source after it was updated" do
|
335
383
|
customer = Stripe::Customer.create()
|
336
384
|
customer.source = gen_card_tk
|
@@ -391,7 +439,7 @@ shared_examples 'Customer API' do
|
|
391
439
|
end
|
392
440
|
|
393
441
|
it "still has subscriptions after save when subscriptions unchanged" do
|
394
|
-
plan = stripe_helper.create_plan(id: 'silver')
|
442
|
+
plan = stripe_helper.create_plan(id: 'silver', product: product.id)
|
395
443
|
original = Stripe::Customer.create(source: gen_card_tk, plan: 'silver')
|
396
444
|
subscription = original.subscriptions.data.first
|
397
445
|
subscription_id = subscription.id
|
@@ -404,7 +452,7 @@ shared_examples 'Customer API' do
|
|
404
452
|
end
|
405
453
|
|
406
454
|
it "should add a customer to a subscription" do
|
407
|
-
plan = stripe_helper.create_plan(id: 'silver')
|
455
|
+
plan = stripe_helper.create_plan(id: 'silver', product: product.id)
|
408
456
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
409
457
|
customer.subscriptions.create(plan: plan.id)
|
410
458
|
|
@@ -417,14 +465,6 @@ shared_examples 'Customer API' do
|
|
417
465
|
expect(customer.deleted).to eq(true)
|
418
466
|
end
|
419
467
|
|
420
|
-
it 'works with the update_subscription method' do
|
421
|
-
stripe_helper.create_plan(id: 'silver')
|
422
|
-
cus = Stripe::Customer.create(source: gen_card_tk)
|
423
|
-
expect {
|
424
|
-
cus.update_subscription(plan: 'silver')
|
425
|
-
}.not_to raise_error
|
426
|
-
end
|
427
|
-
|
428
468
|
it "deletes a stripe customer discount" do
|
429
469
|
original = Stripe::Customer.create(id: 'test_customer_update')
|
430
470
|
|