stripe-ruby-mock 1.10.1.7 → 2.0.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.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/README.md +70 -3
- data/Rakefile +1 -1
- data/lib/stripe_mock/api/client.rb +1 -0
- data/lib/stripe_mock/api/instance.rb +1 -0
- data/lib/stripe_mock/api/live.rb +15 -0
- data/lib/stripe_mock/api/server.rb +24 -21
- data/lib/stripe_mock/api/test_helpers.rb +24 -0
- data/lib/stripe_mock/client.rb +4 -8
- data/lib/stripe_mock/data.rb +54 -30
- data/lib/stripe_mock/instance.rb +15 -5
- data/lib/stripe_mock/request_handlers/cards.rb +29 -18
- data/lib/stripe_mock/request_handlers/charges.rb +34 -6
- data/lib/stripe_mock/request_handlers/coupons.rb +1 -3
- data/lib/stripe_mock/request_handlers/customers.rb +3 -9
- data/lib/stripe_mock/request_handlers/events.rb +1 -3
- data/lib/stripe_mock/request_handlers/helpers/card_helpers.rb +16 -9
- data/lib/stripe_mock/request_handlers/helpers/charge_helpers.rb +16 -0
- data/lib/stripe_mock/request_handlers/helpers/subscription_helpers.rb +9 -2
- data/lib/stripe_mock/request_handlers/helpers/token_helpers.rb +3 -1
- data/lib/stripe_mock/request_handlers/invoice_items.rb +32 -2
- data/lib/stripe_mock/request_handlers/invoices.rb +7 -3
- data/lib/stripe_mock/request_handlers/plans.rb +2 -5
- data/lib/stripe_mock/request_handlers/recipients.rb +26 -4
- data/lib/stripe_mock/request_handlers/subscriptions.rb +26 -33
- data/lib/stripe_mock/request_handlers/tokens.rb +24 -4
- data/lib/stripe_mock/request_handlers/validators/param_validators.rb +18 -0
- data/lib/stripe_mock/server.rb +4 -5
- data/lib/stripe_mock/test_strategies/base.rb +27 -0
- data/lib/stripe_mock/test_strategies/live.rb +22 -0
- data/lib/stripe_mock/test_strategies/mock.rb +19 -0
- data/lib/stripe_mock/util.rb +5 -0
- data/lib/stripe_mock/version.rb +1 -1
- data/lib/stripe_mock/webhook_fixtures/charge.failed.json +3 -2
- data/lib/stripe_mock/webhook_fixtures/charge.refunded.json +16 -9
- data/lib/stripe_mock/webhook_fixtures/charge.succeeded.json +3 -2
- data/lib/stripe_mock/webhook_fixtures/customer.card.created.json +1 -0
- data/lib/stripe_mock/webhook_fixtures/customer.card.deleted.json +1 -0
- data/lib/stripe_mock/webhook_fixtures/customer.card.updated.json +1 -0
- data/lib/stripe_mock/webhook_fixtures/customer.created.json +1 -0
- data/lib/stripe_mock/webhook_fixtures/customer.deleted.json +2 -1
- data/lib/stripe_mock/webhook_fixtures/customer.updated.json +1 -0
- data/lib/stripe_mock.rb +9 -1
- data/spec/fixtures/create_refund.yml +126 -0
- data/spec/instance_spec.rb +4 -2
- data/spec/integration_examples/charge_token_examples.rb +49 -0
- data/spec/integration_examples/customer_card_examples.rb +42 -0
- data/spec/integration_examples/prepare_error_examples.rb +18 -0
- data/spec/readme_spec.rb +2 -1
- data/spec/server_spec.rb +12 -3
- data/spec/shared_stripe_examples/card_examples.rb +108 -3
- data/spec/shared_stripe_examples/card_token_examples.rb +26 -0
- data/spec/shared_stripe_examples/charge_examples.rb +55 -39
- data/spec/shared_stripe_examples/coupon_examples.rb +2 -17
- data/spec/shared_stripe_examples/customer_examples.rb +30 -39
- data/spec/shared_stripe_examples/error_mock_examples.rb +1 -1
- data/spec/shared_stripe_examples/invoice_examples.rb +31 -15
- data/spec/shared_stripe_examples/invoice_item_examples.rb +62 -10
- data/spec/shared_stripe_examples/plan_examples.rb +29 -18
- data/spec/shared_stripe_examples/recipient_examples.rb +55 -5
- data/spec/shared_stripe_examples/refund_examples.rb +90 -0
- data/spec/shared_stripe_examples/subscription_examples.rb +159 -82
- data/spec/shared_stripe_examples/validation_examples.rb +19 -0
- data/spec/spec_helper.rb +32 -1
- data/spec/stripe_mock_spec.rb +70 -0
- data/spec/support/stripe_examples.rb +7 -14
- data/spec/util_spec.rb +8 -0
- data/stripe-ruby-mock.gemspec +2 -2
- metadata +38 -34
- data/lib/stripe_mock/api/strict.rb +0 -11
@@ -2,20 +2,26 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
shared_examples 'Customer Subscriptions' do
|
4
4
|
|
5
|
+
def gen_card_tk
|
6
|
+
stripe_helper.generate_card_token
|
7
|
+
end
|
8
|
+
|
5
9
|
context "creating a new subscription" do
|
6
|
-
it "adds a new subscription to customer with none" do
|
7
|
-
plan =
|
8
|
-
customer = Stripe::Customer.create(
|
10
|
+
it "adds a new subscription to customer with none", :live => true do
|
11
|
+
plan = stripe_helper.create_plan(id: 'silver', name: 'Silver Plan', amount: 4999)
|
12
|
+
customer = Stripe::Customer.create(card: gen_card_tk)
|
9
13
|
|
10
14
|
expect(customer.subscriptions.data).to be_empty
|
11
15
|
expect(customer.subscriptions.count).to eq(0)
|
12
16
|
|
13
|
-
sub = customer.subscriptions.create({ :plan => 'silver' })
|
17
|
+
sub = customer.subscriptions.create({ :plan => 'silver', :metadata => { :foo => "bar", :example => "yes" } })
|
14
18
|
|
15
19
|
expect(sub.object).to eq('subscription')
|
16
|
-
expect(sub.plan).to eq(
|
20
|
+
expect(sub.plan.to_hash).to eq(plan.to_hash)
|
21
|
+
expect(sub.metadata.foo).to eq( "bar" )
|
22
|
+
expect(sub.metadata.example).to eq( "yes" )
|
17
23
|
|
18
|
-
customer = Stripe::Customer.retrieve(
|
24
|
+
customer = Stripe::Customer.retrieve(customer.id)
|
19
25
|
expect(customer.subscriptions.data).to_not be_empty
|
20
26
|
expect(customer.subscriptions.count).to eq(1)
|
21
27
|
expect(customer.subscriptions.data.length).to eq(1)
|
@@ -23,6 +29,8 @@ shared_examples 'Customer Subscriptions' do
|
|
23
29
|
expect(customer.subscriptions.data.first.id).to eq(sub.id)
|
24
30
|
expect(customer.subscriptions.data.first.plan.to_hash).to eq(plan.to_hash)
|
25
31
|
expect(customer.subscriptions.data.first.customer).to eq(customer.id)
|
32
|
+
expect(customer.subscriptions.data.first.metadata.foo).to eq( "bar" )
|
33
|
+
expect(customer.subscriptions.data.first.metadata.example).to eq( "yes" )
|
26
34
|
|
27
35
|
end
|
28
36
|
|
@@ -35,7 +43,7 @@ shared_examples 'Customer Subscriptions' do
|
|
35
43
|
:id => 'silver',
|
36
44
|
:statement_description => "testPlan"
|
37
45
|
)
|
38
|
-
customer = Stripe::Customer.create(id: 'test_customer_sub', card:
|
46
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub', card: gen_card_tk)
|
39
47
|
|
40
48
|
subscription = customer.subscriptions.create({
|
41
49
|
:plan => "silver", quantity: 2, application_fee_percent: 10})
|
@@ -44,33 +52,33 @@ shared_examples 'Customer Subscriptions' do
|
|
44
52
|
end
|
45
53
|
|
46
54
|
it "adds additional subscription to customer with existing subscription" do
|
47
|
-
silver =
|
48
|
-
gold =
|
49
|
-
customer = Stripe::Customer.create(id: 'test_customer_sub', card:
|
55
|
+
silver = stripe_helper.create_plan(id: 'silver')
|
56
|
+
gold = stripe_helper.create_plan(id: 'gold')
|
57
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub', card: gen_card_tk, plan: 'gold')
|
50
58
|
|
51
59
|
sub = customer.subscriptions.create({ :plan => 'silver' })
|
52
60
|
|
53
61
|
expect(sub.object).to eq('subscription')
|
54
|
-
expect(sub.plan).to eq(
|
62
|
+
expect(sub.plan.to_hash).to eq(silver.to_hash)
|
55
63
|
|
56
64
|
customer = Stripe::Customer.retrieve('test_customer_sub')
|
57
65
|
expect(customer.subscriptions.data).to_not be_empty
|
58
66
|
expect(customer.subscriptions.count).to eq(2)
|
59
67
|
expect(customer.subscriptions.data.length).to eq(2)
|
60
68
|
|
61
|
-
expect(customer.subscriptions.data.
|
62
|
-
expect(customer.subscriptions.data.first.customer).to eq(customer.id)
|
63
|
-
|
64
|
-
expect(customer.subscriptions.data.last.id).to eq(sub.id)
|
65
|
-
expect(customer.subscriptions.data.last.plan.to_hash).to eq(silver.to_hash)
|
69
|
+
expect(customer.subscriptions.data.last.plan.to_hash).to eq(gold.to_hash)
|
66
70
|
expect(customer.subscriptions.data.last.customer).to eq(customer.id)
|
71
|
+
|
72
|
+
expect(customer.subscriptions.data.first.id).to eq(sub.id)
|
73
|
+
expect(customer.subscriptions.data.first.plan.to_hash).to eq(silver.to_hash)
|
74
|
+
expect(customer.subscriptions.data.first.customer).to eq(customer.id)
|
67
75
|
end
|
68
76
|
|
69
77
|
it "subscribes a cardless customer when specifing a card token" do
|
70
|
-
plan =
|
78
|
+
plan = stripe_helper.create_plan(id: 'enterprise', amount: 499)
|
71
79
|
customer = Stripe::Customer.create(id: 'cardless')
|
72
80
|
|
73
|
-
sub = customer.subscriptions.create(
|
81
|
+
sub = customer.subscriptions.create(plan: 'enterprise', card: gen_card_tk)
|
74
82
|
customer = Stripe::Customer.retrieve('cardless')
|
75
83
|
|
76
84
|
expect(customer.subscriptions.data.first.id).to eq(sub.id)
|
@@ -96,7 +104,7 @@ shared_examples 'Customer Subscriptions' do
|
|
96
104
|
end
|
97
105
|
|
98
106
|
it "throws an error when subscribing a customer with no card" do
|
99
|
-
plan =
|
107
|
+
plan = stripe_helper.create_plan(id: 'enterprise', amount: 499)
|
100
108
|
customer = Stripe::Customer.create(id: 'cardless')
|
101
109
|
|
102
110
|
expect { customer.subscriptions.create({ :plan => 'enterprise' }) }.to raise_error {|e|
|
@@ -110,13 +118,13 @@ shared_examples 'Customer Subscriptions' do
|
|
110
118
|
end
|
111
119
|
|
112
120
|
it "subscribes a customer with no card to a plan with a free trial" do
|
113
|
-
plan =
|
121
|
+
plan = stripe_helper.create_plan(id: 'trial', amount: 999, trial_period_days: 14)
|
114
122
|
customer = Stripe::Customer.create(id: 'cardless')
|
115
123
|
|
116
124
|
sub = customer.subscriptions.create({ :plan => 'trial' })
|
117
125
|
|
118
126
|
expect(sub.object).to eq('subscription')
|
119
|
-
expect(sub.plan).to eq(
|
127
|
+
expect(sub.plan.to_hash).to eq(plan.to_hash)
|
120
128
|
expect(sub.trial_end - sub.trial_start).to eq(14 * 86400)
|
121
129
|
|
122
130
|
customer = Stripe::Customer.retrieve('cardless')
|
@@ -130,13 +138,13 @@ shared_examples 'Customer Subscriptions' do
|
|
130
138
|
end
|
131
139
|
|
132
140
|
it "subscribes a customer with no card to a free plan" do
|
133
|
-
plan =
|
141
|
+
plan = stripe_helper.create_plan(id: 'free_tier', amount: 0)
|
134
142
|
customer = Stripe::Customer.create(id: 'cardless')
|
135
143
|
|
136
144
|
sub = customer.subscriptions.create({ :plan => 'free_tier' })
|
137
145
|
|
138
146
|
expect(sub.object).to eq('subscription')
|
139
|
-
expect(sub.plan).to eq(
|
147
|
+
expect(sub.plan.to_hash).to eq(plan.to_hash)
|
140
148
|
|
141
149
|
customer = Stripe::Customer.retrieve('cardless')
|
142
150
|
expect(customer.subscriptions.data).to_not be_empty
|
@@ -149,33 +157,33 @@ shared_examples 'Customer Subscriptions' do
|
|
149
157
|
end
|
150
158
|
|
151
159
|
it "overrides trial length when trial end is set" do
|
152
|
-
plan =
|
160
|
+
plan = stripe_helper.create_plan(id: 'trial', amount: 999, trial_period_days: 14)
|
153
161
|
customer = Stripe::Customer.create(id: 'short_trial')
|
154
162
|
trial_end = Time.now.utc.to_i + 3600
|
155
163
|
|
156
164
|
sub = customer.subscriptions.create({ plan: 'trial', trial_end: trial_end })
|
157
165
|
|
158
166
|
expect(sub.object).to eq('subscription')
|
159
|
-
expect(sub.plan).to eq(
|
167
|
+
expect(sub.plan.to_hash).to eq(plan.to_hash)
|
160
168
|
expect(sub.current_period_end).to eq(trial_end)
|
161
169
|
expect(sub.trial_end).to eq(trial_end)
|
162
170
|
end
|
163
171
|
|
164
172
|
it "returns without a trial when trial_end is set to 'now'" do
|
165
|
-
plan =
|
166
|
-
customer = Stripe::Customer.create(id: 'no_trial', card:
|
173
|
+
plan = stripe_helper.create_plan(id: 'trial', amount: 999, trial_period_days: 14)
|
174
|
+
customer = Stripe::Customer.create(id: 'no_trial', card: gen_card_tk)
|
167
175
|
|
168
176
|
sub = customer.subscriptions.create({ plan: 'trial', trial_end: "now" })
|
169
177
|
|
170
178
|
expect(sub.object).to eq('subscription')
|
171
|
-
expect(sub.plan).to eq(
|
179
|
+
expect(sub.plan.to_hash).to eq(plan.to_hash)
|
172
180
|
expect(sub.status).to eq('active')
|
173
181
|
expect(sub.trial_start).to be_nil
|
174
182
|
expect(sub.trial_end).to be_nil
|
175
183
|
end
|
176
184
|
|
177
185
|
it "raises error when trial_end is not an integer or 'now'" do
|
178
|
-
plan =
|
186
|
+
plan = stripe_helper.create_plan(id: 'trial', amount: 999, trial_period_days: 14)
|
179
187
|
customer = Stripe::Customer.create(id: 'cus_trial')
|
180
188
|
|
181
189
|
expect { customer.subscriptions.create({ plan: 'trial', trial_end: "gazebo" }) }.to raise_error {|e|
|
@@ -186,7 +194,7 @@ shared_examples 'Customer Subscriptions' do
|
|
186
194
|
end
|
187
195
|
|
188
196
|
it "raises error when trial_end is set to a time in the past" do
|
189
|
-
plan =
|
197
|
+
plan = stripe_helper.create_plan(id: 'trial', amount: 999, trial_period_days: 14)
|
190
198
|
customer = Stripe::Customer.create(id: 'past_trial')
|
191
199
|
trial_end = Time.now.utc.to_i - 3600
|
192
200
|
|
@@ -198,7 +206,7 @@ shared_examples 'Customer Subscriptions' do
|
|
198
206
|
end
|
199
207
|
|
200
208
|
it "raises error when trial_end is set to a time more than five years in the future" do
|
201
|
-
plan =
|
209
|
+
plan = stripe_helper.create_plan(id: 'trial', amount: 999, trial_period_days: 14)
|
202
210
|
customer = Stripe::Customer.create(id: 'long_trial')
|
203
211
|
trial_end = Time.now.utc.to_i + 31557600*5 + 3600 # 5 years + 1 hour
|
204
212
|
|
@@ -213,16 +221,23 @@ shared_examples 'Customer Subscriptions' do
|
|
213
221
|
context "updating a subscription" do
|
214
222
|
|
215
223
|
it "updates a stripe customer's existing subscription" do
|
216
|
-
silver =
|
217
|
-
gold =
|
218
|
-
customer = Stripe::Customer.create(id: 'test_customer_sub', card:
|
224
|
+
silver = stripe_helper.create_plan(id: 'silver')
|
225
|
+
gold = stripe_helper.create_plan(id: 'gold')
|
226
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub', card: gen_card_tk, plan: 'silver')
|
219
227
|
|
220
228
|
sub = customer.subscriptions.retrieve(customer.subscriptions.data.first.id)
|
221
229
|
sub.plan = 'gold'
|
222
|
-
sub.
|
230
|
+
sub.quantity = 5
|
231
|
+
sub.metadata.foo = "bar"
|
232
|
+
sub.metadata.example = "yes"
|
233
|
+
|
234
|
+
expect(sub.save).to be_truthy
|
223
235
|
|
224
236
|
expect(sub.object).to eq('subscription')
|
225
|
-
expect(sub.plan).to eq(
|
237
|
+
expect(sub.plan.to_hash).to eq(gold.to_hash)
|
238
|
+
expect(sub.quantity).to eq(5)
|
239
|
+
expect(sub.metadata.foo).to eq( "bar" )
|
240
|
+
expect(sub.metadata.example).to eq( "yes" )
|
226
241
|
|
227
242
|
customer = Stripe::Customer.retrieve('test_customer_sub')
|
228
243
|
expect(customer.subscriptions.data).to_not be_empty
|
@@ -235,7 +250,7 @@ shared_examples 'Customer Subscriptions' do
|
|
235
250
|
end
|
236
251
|
|
237
252
|
it "throws an error when plan does not exist" do
|
238
|
-
free =
|
253
|
+
free = stripe_helper.create_plan(id: 'free', amount: 0)
|
239
254
|
customer = Stripe::Customer.create(id: 'cardless', plan: 'free')
|
240
255
|
|
241
256
|
sub = customer.subscriptions.retrieve(customer.subscriptions.data.first.id)
|
@@ -254,7 +269,7 @@ shared_examples 'Customer Subscriptions' do
|
|
254
269
|
end
|
255
270
|
|
256
271
|
it "throws an error when subscription does not exist" do
|
257
|
-
free =
|
272
|
+
free = stripe_helper.create_plan(id: 'free', amount: 0)
|
258
273
|
customer = Stripe::Customer.create(id: 'cardless', plan: 'free')
|
259
274
|
|
260
275
|
expect { customer.subscriptions.retrieve("gazebo") }.to raise_error {|e|
|
@@ -270,8 +285,8 @@ shared_examples 'Customer Subscriptions' do
|
|
270
285
|
end
|
271
286
|
|
272
287
|
it "throws an error when updating a customer with no card" do
|
273
|
-
free =
|
274
|
-
paid =
|
288
|
+
free = stripe_helper.create_plan(id: 'free', amount: 0)
|
289
|
+
paid = stripe_helper.create_plan(id: 'enterprise', amount: 499)
|
275
290
|
customer = Stripe::Customer.create(id: 'cardless', plan: 'free')
|
276
291
|
|
277
292
|
sub = customer.subscriptions.retrieve(customer.subscriptions.data.first.id)
|
@@ -290,8 +305,8 @@ shared_examples 'Customer Subscriptions' do
|
|
290
305
|
end
|
291
306
|
|
292
307
|
it "updates a customer with no card to a plan with a free trial" do
|
293
|
-
free =
|
294
|
-
trial =
|
308
|
+
free = stripe_helper.create_plan(id: 'free', amount: 0)
|
309
|
+
trial = stripe_helper.create_plan(id: 'trial', amount: 999, trial_period_days: 14)
|
295
310
|
customer = Stripe::Customer.create(id: 'cardless', plan: 'free')
|
296
311
|
|
297
312
|
sub = customer.subscriptions.retrieve(customer.subscriptions.data.first.id)
|
@@ -299,7 +314,7 @@ shared_examples 'Customer Subscriptions' do
|
|
299
314
|
sub.save
|
300
315
|
|
301
316
|
expect(sub.object).to eq('subscription')
|
302
|
-
expect(sub.plan).to eq(
|
317
|
+
expect(sub.plan.to_hash).to eq(trial.to_hash)
|
303
318
|
|
304
319
|
customer = Stripe::Customer.retrieve('cardless')
|
305
320
|
expect(customer.subscriptions.data).to_not be_empty
|
@@ -312,8 +327,8 @@ shared_examples 'Customer Subscriptions' do
|
|
312
327
|
end
|
313
328
|
|
314
329
|
it "updates a customer with no card to a free plan" do
|
315
|
-
free =
|
316
|
-
gratis =
|
330
|
+
free = stripe_helper.create_plan(id: 'free', amount: 0)
|
331
|
+
gratis = stripe_helper.create_plan(id: 'gratis', amount: 0)
|
317
332
|
customer = Stripe::Customer.create(id: 'cardless', plan: 'free')
|
318
333
|
|
319
334
|
sub = customer.subscriptions.retrieve(customer.subscriptions.data.first.id)
|
@@ -321,7 +336,7 @@ shared_examples 'Customer Subscriptions' do
|
|
321
336
|
sub.save
|
322
337
|
|
323
338
|
expect(sub.object).to eq('subscription')
|
324
|
-
expect(sub.plan).to eq(
|
339
|
+
expect(sub.plan.to_hash).to eq(gratis.to_hash)
|
325
340
|
|
326
341
|
customer = Stripe::Customer.retrieve('cardless')
|
327
342
|
expect(customer.subscriptions.data).to_not be_empty
|
@@ -334,13 +349,13 @@ shared_examples 'Customer Subscriptions' do
|
|
334
349
|
end
|
335
350
|
|
336
351
|
it "sets a card when updating a customer's subscription" do
|
337
|
-
free =
|
338
|
-
paid =
|
352
|
+
free = stripe_helper.create_plan(id: 'free', amount: 0)
|
353
|
+
paid = stripe_helper.create_plan(id: 'paid', amount: 499)
|
339
354
|
customer = Stripe::Customer.create(id: 'test_customer_sub', plan: 'free')
|
340
355
|
|
341
356
|
sub = customer.subscriptions.retrieve(customer.subscriptions.data.first.id)
|
342
357
|
sub.plan = 'paid'
|
343
|
-
sub.card =
|
358
|
+
sub.card = gen_card_tk
|
344
359
|
sub.save
|
345
360
|
|
346
361
|
customer = Stripe::Customer.retrieve('test_customer_sub')
|
@@ -352,7 +367,7 @@ shared_examples 'Customer Subscriptions' do
|
|
352
367
|
end
|
353
368
|
|
354
369
|
it "overrides trial length when trial end is set" do
|
355
|
-
plan =
|
370
|
+
plan = stripe_helper.create_plan(id: 'trial', amount: 999, trial_period_days: 14)
|
356
371
|
customer = Stripe::Customer.create(id: 'test_trial_end', plan: 'trial')
|
357
372
|
|
358
373
|
sub = customer.subscriptions.retrieve(customer.subscriptions.data.first.id)
|
@@ -367,7 +382,7 @@ shared_examples 'Customer Subscriptions' do
|
|
367
382
|
end
|
368
383
|
|
369
384
|
it "returns without a trial when trial_end is set to 'now'" do
|
370
|
-
plan =
|
385
|
+
plan = stripe_helper.create_plan(id: 'trial', amount: 999, trial_period_days: 14)
|
371
386
|
customer = Stripe::Customer.create(id: 'test_trial_end', plan: 'trial')
|
372
387
|
|
373
388
|
sub = customer.subscriptions.retrieve(customer.subscriptions.data.first.id)
|
@@ -376,15 +391,15 @@ shared_examples 'Customer Subscriptions' do
|
|
376
391
|
sub.save
|
377
392
|
|
378
393
|
expect(sub.object).to eq('subscription')
|
379
|
-
expect(sub.plan).to eq(
|
394
|
+
expect(sub.plan.to_hash).to eq(plan.to_hash)
|
380
395
|
expect(sub.status).to eq('active')
|
381
396
|
expect(sub.trial_start).to be_nil
|
382
397
|
expect(sub.trial_end).to be_nil
|
383
398
|
end
|
384
399
|
|
385
400
|
it "changes an active subscription to a trial when trial_end is set" do
|
386
|
-
plan =
|
387
|
-
customer = Stripe::Customer.create(id: 'test_trial_end', plan: 'no_trial', card:
|
401
|
+
plan = stripe_helper.create_plan(id: 'no_trial', amount: 999)
|
402
|
+
customer = Stripe::Customer.create(id: 'test_trial_end', plan: 'no_trial', card: gen_card_tk)
|
388
403
|
|
389
404
|
sub = customer.subscriptions.retrieve(customer.subscriptions.data.first.id)
|
390
405
|
|
@@ -393,7 +408,7 @@ shared_examples 'Customer Subscriptions' do
|
|
393
408
|
sub.save
|
394
409
|
|
395
410
|
expect(sub.object).to eq('subscription')
|
396
|
-
expect(sub.plan).to eq(
|
411
|
+
expect(sub.plan.to_hash).to eq(plan.to_hash)
|
397
412
|
expect(sub.status).to eq('trialing')
|
398
413
|
expect(sub.trial_end).to eq(trial_end)
|
399
414
|
expect(sub.current_period_end).to eq(trial_end)
|
@@ -401,8 +416,8 @@ shared_examples 'Customer Subscriptions' do
|
|
401
416
|
|
402
417
|
|
403
418
|
it "raises error when trial_end is not an integer or 'now'" do
|
404
|
-
plan =
|
405
|
-
customer = Stripe::Customer.create(id: 'test_trial_end', plan: 'no_trial', card:
|
419
|
+
plan = stripe_helper.create_plan(id: 'no_trial', amount: 999)
|
420
|
+
customer = Stripe::Customer.create(id: 'test_trial_end', plan: 'no_trial', card: gen_card_tk)
|
406
421
|
|
407
422
|
sub = customer.subscriptions.retrieve(customer.subscriptions.data.first.id)
|
408
423
|
sub.trial_end = "gazebo"
|
@@ -417,15 +432,33 @@ shared_examples 'Customer Subscriptions' do
|
|
417
432
|
|
418
433
|
context "cancelling a subscription" do
|
419
434
|
|
420
|
-
it "cancels a stripe customer's subscription" do
|
421
|
-
truth =
|
422
|
-
customer = Stripe::Customer.create(
|
435
|
+
it "cancels a stripe customer's subscription", :live => true do
|
436
|
+
truth = stripe_helper.create_plan(id: 'the truth')
|
437
|
+
customer = Stripe::Customer.create(card: gen_card_tk, plan: "the truth")
|
423
438
|
|
424
439
|
sub = customer.subscriptions.retrieve(customer.subscriptions.data.first.id)
|
425
|
-
result = sub.delete
|
440
|
+
result = sub.delete
|
426
441
|
|
427
442
|
expect(result.status).to eq('canceled')
|
428
|
-
expect(result.cancel_at_period_end).to
|
443
|
+
expect(result.cancel_at_period_end).to eq false
|
444
|
+
expect(result.canceled_at).to_not be_nil
|
445
|
+
expect(result.id).to eq(sub.id)
|
446
|
+
|
447
|
+
customer = Stripe::Customer.retrieve(customer.id)
|
448
|
+
expect(customer.subscriptions.data).to be_empty
|
449
|
+
expect(customer.subscriptions.count).to eq(0)
|
450
|
+
expect(customer.subscriptions.data.length).to eq(0)
|
451
|
+
end
|
452
|
+
|
453
|
+
it "cancels a stripe customer's subscription at period end" do
|
454
|
+
truth = stripe_helper.create_plan(id: 'the_truth')
|
455
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub', card: gen_card_tk, plan: "the_truth")
|
456
|
+
|
457
|
+
sub = customer.subscriptions.retrieve(customer.subscriptions.data.first.id)
|
458
|
+
result = sub.delete(at_period_end: true)
|
459
|
+
|
460
|
+
expect(result.status).to eq('active')
|
461
|
+
expect(result.cancel_at_period_end).to eq(true)
|
429
462
|
expect(result.id).to eq(sub.id)
|
430
463
|
|
431
464
|
customer = Stripe::Customer.retrieve('test_customer_sub')
|
@@ -433,22 +466,21 @@ shared_examples 'Customer Subscriptions' do
|
|
433
466
|
expect(customer.subscriptions.count).to eq(1)
|
434
467
|
expect(customer.subscriptions.data.length).to eq(1)
|
435
468
|
|
436
|
-
expect(customer.subscriptions.data.first.status).to eq('
|
437
|
-
expect(customer.subscriptions.data.first.cancel_at_period_end).to
|
438
|
-
expect(customer.subscriptions.data.first.ended_at).
|
469
|
+
expect(customer.subscriptions.data.first.status).to eq('active')
|
470
|
+
expect(customer.subscriptions.data.first.cancel_at_period_end).to eq(true)
|
471
|
+
expect(customer.subscriptions.data.first.ended_at).to be_nil
|
439
472
|
expect(customer.subscriptions.data.first.canceled_at).to_not be_nil
|
440
473
|
end
|
441
474
|
|
442
|
-
it "
|
443
|
-
truth =
|
444
|
-
customer = Stripe::Customer.create(id: 'test_customer_sub', card:
|
475
|
+
it "resumes an at period end cancelled subscription" do
|
476
|
+
truth = stripe_helper.create_plan(id: 'the_truth')
|
477
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub', card: gen_card_tk, plan: "the_truth")
|
445
478
|
|
446
479
|
sub = customer.subscriptions.retrieve(customer.subscriptions.data.first.id)
|
447
480
|
result = sub.delete(at_period_end: true)
|
448
481
|
|
449
|
-
|
450
|
-
|
451
|
-
expect(result.id).to eq(sub.id)
|
482
|
+
sub.plan = 'the_truth'
|
483
|
+
sub.save
|
452
484
|
|
453
485
|
customer = Stripe::Customer.retrieve('test_customer_sub')
|
454
486
|
expect(customer.subscriptions.data).to_not be_empty
|
@@ -456,15 +488,15 @@ shared_examples 'Customer Subscriptions' do
|
|
456
488
|
expect(customer.subscriptions.data.length).to eq(1)
|
457
489
|
|
458
490
|
expect(customer.subscriptions.data.first.status).to eq('active')
|
459
|
-
expect(customer.subscriptions.data.first.cancel_at_period_end).to
|
491
|
+
expect(customer.subscriptions.data.first.cancel_at_period_end).to eq(false)
|
460
492
|
expect(customer.subscriptions.data.first.ended_at).to be_nil
|
461
|
-
expect(customer.subscriptions.data.first.canceled_at).
|
493
|
+
expect(customer.subscriptions.data.first.canceled_at).to be_nil
|
462
494
|
end
|
463
495
|
end
|
464
496
|
|
465
497
|
it "doesn't change status of subscription when cancelling at period end" do
|
466
|
-
trial =
|
467
|
-
customer = Stripe::Customer.create(id: 'test_customer_sub', card:
|
498
|
+
trial = stripe_helper.create_plan(id: 'trial', trial_period_days: 14)
|
499
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub', card: gen_card_tk, plan: "trial")
|
468
500
|
|
469
501
|
sub = customer.subscriptions.retrieve(customer.subscriptions.data.first.id)
|
470
502
|
result = sub.delete(at_period_end: true)
|
@@ -476,12 +508,27 @@ shared_examples 'Customer Subscriptions' do
|
|
476
508
|
expect(customer.subscriptions.data.first.status).to eq('trialing')
|
477
509
|
end
|
478
510
|
|
511
|
+
it "doesn't require a card when trial_end is present", :live => true do
|
512
|
+
plan = stripe_helper.create_plan(
|
513
|
+
:amount => 2000,
|
514
|
+
:interval => 'month',
|
515
|
+
:name => 'Amazing Gold Plan',
|
516
|
+
:currency => 'usd',
|
517
|
+
:id => 'gold'
|
518
|
+
)
|
519
|
+
|
520
|
+
options = {plan: plan.id, trial_end: (Date.today + 30).to_time.to_i}
|
521
|
+
|
522
|
+
stripe_customer = Stripe::Customer.create
|
523
|
+
stripe_customer.subscriptions.create options
|
524
|
+
end
|
525
|
+
|
479
526
|
context "retrieve multiple subscriptions" do
|
480
527
|
|
481
528
|
it "retrieves a list of multiple subscriptions" do
|
482
|
-
free =
|
483
|
-
paid =
|
484
|
-
customer = Stripe::Customer.create(id: 'test_customer_sub', card:
|
529
|
+
free = stripe_helper.create_plan(id: 'free', amount: 0)
|
530
|
+
paid = stripe_helper.create_plan(id: 'paid', amount: 499)
|
531
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub', card: gen_card_tk, plan: "free")
|
485
532
|
customer.subscriptions.create({ :plan => 'paid' })
|
486
533
|
|
487
534
|
customer = Stripe::Customer.retrieve('test_customer_sub')
|
@@ -492,11 +539,11 @@ shared_examples 'Customer Subscriptions' do
|
|
492
539
|
expect(list.count).to eq(2)
|
493
540
|
expect(list.data.length).to eq(2)
|
494
541
|
|
495
|
-
expect(list.data.first.object).to eq("subscription")
|
496
|
-
expect(list.data.first.plan.to_hash).to eq(free.to_hash)
|
497
|
-
|
498
542
|
expect(list.data.last.object).to eq("subscription")
|
499
|
-
expect(list.data.last.plan.to_hash).to eq(
|
543
|
+
expect(list.data.last.plan.to_hash).to eq(free.to_hash)
|
544
|
+
|
545
|
+
expect(list.data.first.object).to eq("subscription")
|
546
|
+
expect(list.data.first.plan.to_hash).to eq(paid.to_hash)
|
500
547
|
end
|
501
548
|
|
502
549
|
it "retrieves an empty list if there's no subscriptions" do
|
@@ -511,4 +558,34 @@ shared_examples 'Customer Subscriptions' do
|
|
511
558
|
end
|
512
559
|
end
|
513
560
|
|
561
|
+
describe "metadata" do
|
562
|
+
|
563
|
+
it "creates a stripe customer and subscribes them to a plan with meta data", :live => true do
|
564
|
+
|
565
|
+
stripe_helper.create_plan(
|
566
|
+
:amount => 500,
|
567
|
+
:interval => 'month',
|
568
|
+
:name => 'Sample Plan',
|
569
|
+
:currency => 'usd',
|
570
|
+
:id => 'Sample5',
|
571
|
+
:statement_description => "Plan Statement"
|
572
|
+
)
|
573
|
+
|
574
|
+
customer = Stripe::Customer.create({
|
575
|
+
email: 'johnny@appleseed.com',
|
576
|
+
card: gen_card_tk
|
577
|
+
})
|
578
|
+
|
579
|
+
subscription = customer.subscriptions.create(:plan => "Sample5")
|
580
|
+
subscription.metadata['foo'] = 'bar'
|
581
|
+
|
582
|
+
expect(subscription.save).to be_a Stripe::Subscription
|
583
|
+
|
584
|
+
customer = Stripe::Customer.retrieve(customer.id)
|
585
|
+
expect(customer.email).to eq('johnny@appleseed.com')
|
586
|
+
expect(customer.subscriptions.first.plan.id).to eq('Sample5')
|
587
|
+
expect(customer.subscriptions.first.metadata['foo']).to eq('bar')
|
588
|
+
end
|
589
|
+
end
|
590
|
+
|
514
591
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
shared_examples 'Server Validation', :live => true do
|
4
|
+
|
5
|
+
def credit_card_valid?(account_number)
|
6
|
+
digits = account_number.scan(/./).map(&:to_i)
|
7
|
+
check = digits.pop
|
8
|
+
|
9
|
+
sum = digits.reverse.each_slice(2).map do |x, y|
|
10
|
+
[(x * 2).divmod(10), y || 0]
|
11
|
+
end.flatten.inject(:+)
|
12
|
+
|
13
|
+
(10 - sum % 10) == check
|
14
|
+
end
|
15
|
+
|
16
|
+
it "runs a luhn check for charges" do
|
17
|
+
Stripe::Charge.new :with => "4242424242424241"
|
18
|
+
end
|
19
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'set'
|
2
2
|
|
3
|
-
gem 'rspec', '~>
|
3
|
+
gem 'rspec', '~> 3.1'
|
4
4
|
require 'rspec'
|
5
5
|
require 'stripe'
|
6
6
|
require 'stripe_mock'
|
@@ -9,3 +9,34 @@ require 'stripe_mock/server'
|
|
9
9
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
10
10
|
# in spec/support/ and its subdirectories.
|
11
11
|
Dir["./spec/support/**/*.rb"].each {|f| require f}
|
12
|
+
|
13
|
+
RSpec.configure do |c|
|
14
|
+
tags = c.filter_manager.inclusions.rules
|
15
|
+
|
16
|
+
if tags.include?(:live) || tags.include?(:oauth)
|
17
|
+
puts "Running **live** tests against Stripe..."
|
18
|
+
StripeMock.set_default_test_helper_strategy(:live)
|
19
|
+
|
20
|
+
if tags.include?(:oauth)
|
21
|
+
oauth_token = ENV['STRIPE_TEST_OAUTH_ACCESS_TOKEN']
|
22
|
+
if oauth_token.nil? || oauth_token == ''
|
23
|
+
raise "Please set your STRIPE_TEST_OAUTH_ACCESS_TOKEN environment variable."
|
24
|
+
end
|
25
|
+
c.filter_run_excluding :mock_server => true, :live => true
|
26
|
+
else
|
27
|
+
c.filter_run_excluding :mock_server => true, :oauth => true
|
28
|
+
end
|
29
|
+
|
30
|
+
api_key = ENV['STRIPE_TEST_SECRET_KEY']
|
31
|
+
if api_key.nil? || api_key == ''
|
32
|
+
raise "Please set your STRIPE_TEST_SECRET_KEY environment variable."
|
33
|
+
end
|
34
|
+
|
35
|
+
c.before(:each) do
|
36
|
+
StripeMock.stub(:start).and_return(nil)
|
37
|
+
StripeMock.stub(:stop).and_return(nil)
|
38
|
+
Stripe.api_key = api_key
|
39
|
+
end
|
40
|
+
c.after(:each) { sleep 1 }
|
41
|
+
end
|
42
|
+
end
|
data/spec/stripe_mock_spec.rb
CHANGED
@@ -37,4 +37,74 @@ describe StripeMock do
|
|
37
37
|
}
|
38
38
|
end
|
39
39
|
|
40
|
+
describe "Live Testing" do
|
41
|
+
after { StripeMock.instance_variable_set(:@state, 'ready') }
|
42
|
+
|
43
|
+
it "sets the default test strategy" do
|
44
|
+
StripeMock.toggle_live(true)
|
45
|
+
expect(StripeMock.create_test_helper).to be_a StripeMock::TestStrategies::Live
|
46
|
+
|
47
|
+
StripeMock.toggle_live(false)
|
48
|
+
expect(StripeMock.create_test_helper).to be_a StripeMock::TestStrategies::Mock
|
49
|
+
end
|
50
|
+
|
51
|
+
it "does not start when live" do
|
52
|
+
expect(StripeMock.state).to eq 'ready'
|
53
|
+
StripeMock.toggle_live(true)
|
54
|
+
expect(StripeMock.state).to eq 'live'
|
55
|
+
expect(StripeMock.start).to eq false
|
56
|
+
expect(StripeMock.start_client).to eq false
|
57
|
+
end
|
58
|
+
|
59
|
+
it "can be undone" do
|
60
|
+
StripeMock.toggle_live(true)
|
61
|
+
StripeMock.toggle_live(false)
|
62
|
+
expect(StripeMock.state).to eq 'ready'
|
63
|
+
expect(StripeMock.start).to_not eq false
|
64
|
+
StripeMock.stop
|
65
|
+
end
|
66
|
+
|
67
|
+
it "cannot be toggled when already started" do
|
68
|
+
StripeMock.start
|
69
|
+
expect { StripeMock.toggle_live(true) }.to raise_error
|
70
|
+
StripeMock.stop
|
71
|
+
|
72
|
+
StripeMock.instance_variable_set(:@state, 'remote')
|
73
|
+
expect { StripeMock.toggle_live(true) }.to raise_error
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "Test Helper Strategies" do
|
78
|
+
before { StripeMock.instance_variable_set("@__test_strat", nil) }
|
79
|
+
|
80
|
+
it "uses mock by default" do
|
81
|
+
helper = StripeMock.create_test_helper
|
82
|
+
expect(helper).to be_a StripeMock::TestStrategies::Mock
|
83
|
+
end
|
84
|
+
|
85
|
+
it "can specify which strategy to use" do
|
86
|
+
helper = StripeMock.create_test_helper(:live)
|
87
|
+
expect(helper).to be_a StripeMock::TestStrategies::Live
|
88
|
+
|
89
|
+
helper = StripeMock.create_test_helper(:mock)
|
90
|
+
expect(helper).to be_a StripeMock::TestStrategies::Mock
|
91
|
+
end
|
92
|
+
|
93
|
+
it "throws an error on an unknown strategy" do
|
94
|
+
expect { StripeMock.create_test_helper(:lol) }.to raise_error
|
95
|
+
end
|
96
|
+
|
97
|
+
it "can configure the default strategy" do
|
98
|
+
StripeMock.set_default_test_helper_strategy(:live)
|
99
|
+
helper = StripeMock.create_test_helper
|
100
|
+
expect(helper).to be_a StripeMock::TestStrategies::Live
|
101
|
+
end
|
102
|
+
|
103
|
+
it "can overrige a set default strategy" do
|
104
|
+
StripeMock.set_default_test_helper_strategy(:live)
|
105
|
+
helper = StripeMock.create_test_helper(:mock)
|
106
|
+
expect(helper).to be_a StripeMock::TestStrategies::Mock
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
40
110
|
end
|