stripe-ruby-mock 2.5.4 → 2.5.8
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 +4 -4
- data/.travis.yml +1 -1
- data/README.md +1 -1
- data/lib/stripe_mock.rb +4 -0
- data/lib/stripe_mock/api/webhooks.rb +2 -0
- data/lib/stripe_mock/data.rb +78 -17
- data/lib/stripe_mock/data/list.rb +7 -2
- data/lib/stripe_mock/instance.rb +37 -3
- data/lib/stripe_mock/request_handlers/accounts.rb +16 -0
- data/lib/stripe_mock/request_handlers/charges.rb +7 -8
- data/lib/stripe_mock/request_handlers/customers.rb +2 -2
- data/lib/stripe_mock/request_handlers/ephemeral_key.rb +13 -0
- data/lib/stripe_mock/request_handlers/helpers/card_helpers.rb +1 -0
- data/lib/stripe_mock/request_handlers/helpers/coupon_helpers.rb +10 -11
- data/lib/stripe_mock/request_handlers/helpers/subscription_helpers.rb +20 -2
- data/lib/stripe_mock/request_handlers/invoices.rb +1 -1
- data/lib/stripe_mock/request_handlers/products.rb +43 -0
- data/lib/stripe_mock/request_handlers/refunds.rb +6 -3
- data/lib/stripe_mock/request_handlers/subscription_items.rb +36 -0
- data/lib/stripe_mock/request_handlers/subscriptions.rb +40 -22
- data/lib/stripe_mock/request_handlers/tax_rates.rb +36 -0
- data/lib/stripe_mock/request_handlers/tokens.rb +2 -2
- data/lib/stripe_mock/request_handlers/transfers.rb +10 -4
- data/lib/stripe_mock/request_handlers/validators/param_validators.rb +3 -0
- data/lib/stripe_mock/test_strategies/base.rb +4 -2
- data/lib/stripe_mock/version.rb +1 -1
- 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/customer.subscription.created.json +2 -2
- data/lib/stripe_mock/webhook_fixtures/customer.subscription.deleted.json +2 -2
- data/lib/stripe_mock/webhook_fixtures/customer.subscription.trial_will_end.json +2 -2
- data/lib/stripe_mock/webhook_fixtures/customer.subscription.updated.json +3 -3
- data/lib/stripe_mock/webhook_fixtures/invoice.created.json +3 -2
- data/lib/stripe_mock/webhook_fixtures/invoice.payment_failed.json +1 -1
- data/lib/stripe_mock/webhook_fixtures/invoice.payment_succeeded.json +1 -1
- data/lib/stripe_mock/webhook_fixtures/invoice.updated.json +3 -2
- data/lib/stripe_mock/webhook_fixtures/plan.created.json +1 -1
- data/lib/stripe_mock/webhook_fixtures/plan.deleted.json +1 -1
- data/lib/stripe_mock/webhook_fixtures/plan.updated.json +1 -1
- data/spec/instance_spec.rb +31 -0
- data/spec/shared_stripe_examples/account_examples.rb +27 -0
- data/spec/shared_stripe_examples/charge_examples.rb +23 -14
- data/spec/shared_stripe_examples/customer_examples.rb +11 -1
- data/spec/shared_stripe_examples/ephemeral_key_examples.rb +17 -0
- data/spec/shared_stripe_examples/invoice_examples.rb +5 -5
- data/spec/shared_stripe_examples/plan_examples.rb +19 -4
- data/spec/shared_stripe_examples/product_example.rb +65 -0
- data/spec/shared_stripe_examples/refund_examples.rb +16 -10
- data/spec/shared_stripe_examples/subscription_examples.rb +176 -18
- data/spec/shared_stripe_examples/subscription_items_examples.rb +75 -0
- data/spec/shared_stripe_examples/tax_rate_examples.rb +42 -0
- data/spec/shared_stripe_examples/transfer_examples.rb +61 -30
- data/spec/support/stripe_examples.rb +4 -1
- metadata +16 -2
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
shared_examples 'EphemeralKey API' do
|
4
|
+
describe 'Create a new key' do
|
5
|
+
let(:customer) { Stripe::Customer.create email: 'test@example.com' }
|
6
|
+
let(:version) { '2016-07-06' }
|
7
|
+
|
8
|
+
it 'creates a new key' do
|
9
|
+
key = Stripe::EphemeralKey.create(
|
10
|
+
{ customer: customer.id },
|
11
|
+
{ stripe_version: version }
|
12
|
+
)
|
13
|
+
|
14
|
+
expect(key[:associated_objects][0][:id]).to eq customer.id
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -52,7 +52,7 @@ shared_examples 'Invoice API' do
|
|
52
52
|
end
|
53
53
|
|
54
54
|
it "stores all invoices in memory" do
|
55
|
-
expect(Stripe::Invoice.all.map(&:id)).to eq([@invoice.id, @invoice2.id])
|
55
|
+
expect(Stripe::Invoice.all.map(&:id).sort).to eq([@invoice.id, @invoice2.id].sort)
|
56
56
|
end
|
57
57
|
|
58
58
|
it "defaults count to 10 invoices" do
|
@@ -79,7 +79,7 @@ shared_examples 'Invoice API' do
|
|
79
79
|
end
|
80
80
|
|
81
81
|
it 'updates attempted and paid flags' do
|
82
|
-
@invoice.pay
|
82
|
+
@invoice = @invoice.pay
|
83
83
|
expect(@invoice.attempted).to eq(true)
|
84
84
|
expect(@invoice.paid).to eq(true)
|
85
85
|
end
|
@@ -89,7 +89,7 @@ shared_examples 'Invoice API' do
|
|
89
89
|
end
|
90
90
|
|
91
91
|
it 'sets the charge attribute' do
|
92
|
-
@invoice.pay
|
92
|
+
@invoice = @invoice.pay
|
93
93
|
expect(@invoice.charge).to be_a String
|
94
94
|
expect(@invoice.charge.length).to be > 0
|
95
95
|
end
|
@@ -351,7 +351,7 @@ shared_examples 'Invoice API' do
|
|
351
351
|
it 'generates a preview without performing an actual proration', live: true do
|
352
352
|
expect(preview.subtotal).to eq 150_00
|
353
353
|
# this is a future invoice (generted at the end of the current subscription cycle), rather than a proration invoice
|
354
|
-
expect(preview.
|
354
|
+
expect(preview.created).to be_within(1).of subscription.current_period_end
|
355
355
|
expect(preview.period_start).to eq subscription.current_period_start
|
356
356
|
expect(preview.period_end).to eq subscription.current_period_end
|
357
357
|
expect(preview.lines.count).to eq 1
|
@@ -360,7 +360,7 @@ shared_examples 'Invoice API' do
|
|
360
360
|
expect(line.amount).to eq 150_00
|
361
361
|
# line period is for the NEXT subscription cycle
|
362
362
|
expect(line.period.start).to be_within(1).of subscription.current_period_end
|
363
|
-
expect(line.period.end).to be_within(1).of (Time.at(subscription.current_period_end).to_datetime >> 1).
|
363
|
+
expect(Time.at(line.period.end).month).to be_within(1).of (Time.at(subscription.current_period_end).to_datetime >> 1).month # +1 month
|
364
364
|
end
|
365
365
|
end
|
366
366
|
|
@@ -9,6 +9,9 @@ shared_examples 'Plan API' do
|
|
9
9
|
:amount => 9900,
|
10
10
|
:currency => 'USD',
|
11
11
|
:interval => 1,
|
12
|
+
:product => {
|
13
|
+
:name => 'A product'
|
14
|
+
},
|
12
15
|
:metadata => {
|
13
16
|
:description => "desc text",
|
14
17
|
:info => "info text"
|
@@ -36,6 +39,9 @@ shared_examples 'Plan API' do
|
|
36
39
|
:amount => 9900,
|
37
40
|
:currency => 'USD',
|
38
41
|
:interval => 1,
|
42
|
+
:product => {
|
43
|
+
:name => 'A product'
|
44
|
+
}
|
39
45
|
)
|
40
46
|
|
41
47
|
expect(plan.id).to match(/^test_plan/)
|
@@ -47,14 +53,20 @@ shared_examples 'Plan API' do
|
|
47
53
|
:name => 'The Memory Plan',
|
48
54
|
:amount => 1100,
|
49
55
|
:currency => 'USD',
|
50
|
-
:interval => 1
|
56
|
+
:interval => 1,
|
57
|
+
:product => {
|
58
|
+
:name => 'A product'
|
59
|
+
}
|
51
60
|
)
|
52
61
|
plan2 = Stripe::Plan.create(
|
53
62
|
:id => 'pid_3',
|
54
63
|
:name => 'The Bonk Plan',
|
55
64
|
:amount => 7777,
|
56
65
|
:currency => 'USD',
|
57
|
-
:interval => 1
|
66
|
+
:interval => 1,
|
67
|
+
:product => {
|
68
|
+
:name => 'A product'
|
69
|
+
}
|
58
70
|
)
|
59
71
|
data = test_data_source(:plans)
|
60
72
|
expect(data[plan.id]).to_not be_nil
|
@@ -136,7 +148,10 @@ shared_examples 'Plan API' do
|
|
136
148
|
:name => 'The Mock Plan',
|
137
149
|
:amount => 99.99,
|
138
150
|
:currency => 'USD',
|
139
|
-
:interval => 'month'
|
151
|
+
:interval => 'month',
|
152
|
+
:product => {
|
153
|
+
:name => 'A product'
|
154
|
+
}
|
140
155
|
)
|
141
156
|
}.to raise_error(Stripe::InvalidRequestError, "Invalid integer: 99.99")
|
142
157
|
end
|
@@ -157,7 +172,7 @@ shared_examples 'Plan API' do
|
|
157
172
|
expect { subject }.to raise_error(Stripe::InvalidRequestError, message)
|
158
173
|
end
|
159
174
|
|
160
|
-
it("requires a
|
175
|
+
it("requires a product") { @name = :product }
|
161
176
|
it("requires an amount") { @name = :amount }
|
162
177
|
it("requires a currency") { @name = :currency }
|
163
178
|
it("requires an interval") { @name = :interval }
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
shared_examples 'Product API' do
|
4
|
+
it 'creates a product' do
|
5
|
+
product = Stripe::Product.create(
|
6
|
+
name: 'my awesome product',
|
7
|
+
type: 'service'
|
8
|
+
)
|
9
|
+
|
10
|
+
expect(product.name).to eq 'my awesome product'
|
11
|
+
expect(product.type).to eq 'service'
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'retrieves a product' do
|
15
|
+
Stripe::Product.create(
|
16
|
+
id: 'test_prod_1',
|
17
|
+
name: 'my awesome product',
|
18
|
+
type: 'service'
|
19
|
+
)
|
20
|
+
|
21
|
+
product = Stripe::Product.retrieve('test_prod_1')
|
22
|
+
|
23
|
+
expect(product.name).to eq 'my awesome product'
|
24
|
+
expect(product.type).to eq 'service'
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'updates a product' do
|
28
|
+
Stripe::Product.create(
|
29
|
+
id: 'test_prod_1',
|
30
|
+
name: 'my awesome product',
|
31
|
+
type: 'service'
|
32
|
+
)
|
33
|
+
|
34
|
+
Stripe::Product.update('test_prod_1', name: 'my lame product')
|
35
|
+
|
36
|
+
product = Stripe::Product.retrieve('test_prod_1')
|
37
|
+
|
38
|
+
expect(product.name).to eq 'my lame product'
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'lists all products' do
|
42
|
+
2.times do |n|
|
43
|
+
Stripe::Product.create(
|
44
|
+
name: "product #{n}",
|
45
|
+
type: 'service'
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
products = Stripe::Product.list
|
50
|
+
|
51
|
+
expect(products.map(&:name)).to match_array ['product 0', 'product 1']
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'destroys a product', live: true do
|
55
|
+
Stripe::Product.create(
|
56
|
+
id: 'test_prod_1',
|
57
|
+
name: 'my awesome product',
|
58
|
+
type: 'service'
|
59
|
+
)
|
60
|
+
|
61
|
+
Stripe::Product.delete('test_prod_1')
|
62
|
+
|
63
|
+
expect { Stripe::Product.retrieve('test_prod_1') }. to raise_error(Stripe::InvalidRequestError)
|
64
|
+
end
|
65
|
+
end
|
@@ -337,26 +337,32 @@ shared_examples 'Refund API' do
|
|
337
337
|
capture: true
|
338
338
|
)
|
339
339
|
end
|
340
|
-
let(:
|
341
|
-
charge: charge.id
|
340
|
+
let(:refund_params) {{
|
341
|
+
charge: charge.id
|
342
|
+
}}
|
343
|
+
|
344
|
+
let(:refund_headers) {{
|
342
345
|
idempotency_key: 'onceisenough'
|
343
346
|
}}
|
344
347
|
|
345
348
|
it "returns the original refund if the same idempotency_key is passed in" do
|
346
|
-
refund1 = Stripe::Refund.create(
|
347
|
-
refund2 = Stripe::Refund.create(
|
349
|
+
refund1 = Stripe::Refund.create(refund_params, refund_headers)
|
350
|
+
refund2 = Stripe::Refund.create(refund_params, refund_headers)
|
348
351
|
|
349
352
|
expect(refund1).to eq(refund2)
|
350
353
|
end
|
351
354
|
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
+
context 'different key' do
|
356
|
+
let(:different_refund_headers) {{
|
357
|
+
idempotency_key: 'thisoneisdifferent'
|
358
|
+
}}
|
355
359
|
|
356
|
-
|
357
|
-
|
360
|
+
it "returns different charges if different idempotency_keys are used for each charge" do
|
361
|
+
refund1 = Stripe::Refund.create(refund_params, refund_headers)
|
362
|
+
refund2 = Stripe::Refund.create(refund_params, different_refund_headers)
|
358
363
|
|
359
|
-
|
364
|
+
expect(refund1).not_to eq(refund2)
|
365
|
+
end
|
360
366
|
end
|
361
367
|
end
|
362
368
|
end
|
@@ -8,7 +8,8 @@ shared_examples 'Customer Subscriptions' do
|
|
8
8
|
|
9
9
|
context "creating a new subscription" do
|
10
10
|
it "adds a new subscription to customer with none using items", :live => true do
|
11
|
-
plan = stripe_helper.create_plan(id: 'silver', name: 'Silver Plan'
|
11
|
+
plan = stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' },
|
12
|
+
amount: 4999, currency: 'usd')
|
12
13
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
13
14
|
|
14
15
|
expect(customer.subscriptions.data).to be_empty
|
@@ -37,7 +38,8 @@ shared_examples 'Customer Subscriptions' do
|
|
37
38
|
end
|
38
39
|
|
39
40
|
it "adds a new subscription to customer with none", :live => true do
|
40
|
-
plan = stripe_helper.create_plan(id: 'silver', name: 'Silver Plan'
|
41
|
+
plan = stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' },
|
42
|
+
amount: 4999, currency: 'usd')
|
41
43
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
42
44
|
|
43
45
|
expect(customer.subscriptions.data).to be_empty
|
@@ -66,7 +68,7 @@ shared_examples 'Customer Subscriptions' do
|
|
66
68
|
end
|
67
69
|
|
68
70
|
it 'when customer object provided' do
|
69
|
-
plan = stripe_helper.create_plan(id: 'silver', name: 'Silver Plan', amount: 4999, currency: 'usd')
|
71
|
+
plan = stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' }, amount: 4999, currency: 'usd')
|
70
72
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
71
73
|
|
72
74
|
expect(customer.subscriptions.data).to be_empty
|
@@ -100,13 +102,15 @@ shared_examples 'Customer Subscriptions' do
|
|
100
102
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
101
103
|
expect(customer.subscriptions.count).to eq(0)
|
102
104
|
|
103
|
-
plan = stripe_helper.create_plan(id: :silver, name: 'Silver Plan'
|
105
|
+
plan = stripe_helper.create_plan(id: :silver, product: { name: 'Silver Plan' },
|
106
|
+
amount: 4999, currency: 'usd')
|
104
107
|
sub = Stripe::Subscription.create({ plan: 'silver', customer: customer.id })
|
105
108
|
customer = Stripe::Customer.retrieve(customer.id)
|
106
109
|
expect(sub.plan.to_hash).to eq(plan.to_hash)
|
107
110
|
expect(customer.subscriptions.count).to eq(1)
|
108
111
|
|
109
|
-
plan = stripe_helper.create_plan(id: 'gold', name: 'Gold Plan'
|
112
|
+
plan = stripe_helper.create_plan(id: 'gold', product: { name: 'Gold Plan' },
|
113
|
+
amount: 14999, currency: 'usd')
|
110
114
|
sub = Stripe::Subscription.create({ plan: 'gold', customer: customer.id })
|
111
115
|
customer = Stripe::Customer.retrieve(customer.id)
|
112
116
|
expect(sub.plan.to_hash).to eq(plan.to_hash)
|
@@ -114,7 +118,8 @@ shared_examples 'Customer Subscriptions' do
|
|
114
118
|
end
|
115
119
|
|
116
120
|
it 'creates a charge for the customer', live: true do
|
117
|
-
stripe_helper.create_plan(id: 'silver', name: 'Silver Plan',
|
121
|
+
stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' },
|
122
|
+
amount: 4999)
|
118
123
|
|
119
124
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
120
125
|
Stripe::Subscription.create({ plan: 'silver', customer: customer.id, metadata: { foo: "bar", example: "yes" } })
|
@@ -125,7 +130,8 @@ shared_examples 'Customer Subscriptions' do
|
|
125
130
|
end
|
126
131
|
|
127
132
|
it 'contains coupon object', live: true do
|
128
|
-
plan = stripe_helper.create_plan(id: 'plan_with_coupon', name: 'One More Test Plan',
|
133
|
+
plan = stripe_helper.create_plan(id: 'plan_with_coupon', product: { name: 'One More Test Plan' },
|
134
|
+
amount: 777)
|
129
135
|
coupon = stripe_helper.create_coupon(id: 'free_coupon', duration: 'repeating', duration_in_months: 3)
|
130
136
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
131
137
|
Stripe::Subscription.create(plan: plan.id, customer: customer.id, coupon: coupon.id)
|
@@ -134,12 +140,13 @@ shared_examples 'Customer Subscriptions' do
|
|
134
140
|
expect(customer.subscriptions.data).to be_a(Array)
|
135
141
|
expect(customer.subscriptions.data.count).to eq(1)
|
136
142
|
expect(customer.subscriptions.data.first.discount).not_to be_nil
|
137
|
-
expect(customer.subscriptions.data.first.discount).to be_a(Stripe::
|
143
|
+
expect(customer.subscriptions.data.first.discount).to be_a(Stripe::Discount)
|
138
144
|
expect(customer.subscriptions.data.first.discount.coupon.id).to eq(coupon.id)
|
139
145
|
end
|
140
146
|
|
141
147
|
it 'when coupon is not exist', live: true do
|
142
|
-
plan = stripe_helper.create_plan(id: 'plan_with_coupon', name: 'One More Test Plan',
|
148
|
+
plan = stripe_helper.create_plan(id: 'plan_with_coupon', product: { name: 'One More Test Plan' },
|
149
|
+
amount: 777)
|
143
150
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
144
151
|
|
145
152
|
expect { Stripe::Subscription.create(plan: plan.id, customer: customer.id, coupon: 'none') }.to raise_error {|e|
|
@@ -153,7 +160,9 @@ shared_examples 'Customer Subscriptions' do
|
|
153
160
|
Stripe::Plan.create(
|
154
161
|
:amount => 2500,
|
155
162
|
:interval => 'month',
|
156
|
-
:
|
163
|
+
:product => {
|
164
|
+
:name => 'Test plan'
|
165
|
+
},
|
157
166
|
:currency => 'usd',
|
158
167
|
:id => 'silver',
|
159
168
|
:statement_description => "testPlan"
|
@@ -169,7 +178,8 @@ shared_examples 'Customer Subscriptions' do
|
|
169
178
|
|
170
179
|
it "correctly sets created when it's not provided as a parameter", live: true do
|
171
180
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
172
|
-
plan = stripe_helper.create_plan(id: 'silver', name: 'Silver Plan'
|
181
|
+
plan = stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' },
|
182
|
+
amount: 4999, currency: 'usd')
|
173
183
|
subscription = Stripe::Subscription.create({ plan: 'silver', customer: customer.id })
|
174
184
|
|
175
185
|
expect(subscription.created).to eq(subscription.current_period_start)
|
@@ -177,7 +187,8 @@ shared_examples 'Customer Subscriptions' do
|
|
177
187
|
|
178
188
|
it "correctly sets created when it's provided as a parameter" do
|
179
189
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
180
|
-
plan = stripe_helper.create_plan(id: 'silver', name: 'Silver Plan'
|
190
|
+
plan = stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' },
|
191
|
+
amount: 4999, currency: 'usd')
|
181
192
|
subscription = Stripe::Subscription.create({ plan: 'silver', customer: customer.id, created: 1473576318 })
|
182
193
|
|
183
194
|
expect(subscription.created).to eq(1473576318)
|
@@ -351,6 +362,30 @@ shared_examples 'Customer Subscriptions' do
|
|
351
362
|
expect(sub.trial_end).to eq(trial_end)
|
352
363
|
end
|
353
364
|
|
365
|
+
it "does not override trial end when trial end is not set" do
|
366
|
+
plan = stripe_helper.create_plan(id: 'trial', amount: 999, trial_period_days: 14)
|
367
|
+
customer = Stripe::Customer.create(id: 'short_trial')
|
368
|
+
trial_end = Time.now.utc.to_i + 3600
|
369
|
+
metadata = {description: 'original description'}
|
370
|
+
|
371
|
+
sub = Stripe::Subscription.create({ plan: 'trial', customer: customer.id, trial_end: trial_end, metadata: metadata })
|
372
|
+
|
373
|
+
expect(sub.object).to eq('subscription')
|
374
|
+
expect(sub.plan.to_hash).to eq(plan.to_hash)
|
375
|
+
expect(sub.current_period_end).to eq(trial_end)
|
376
|
+
expect(sub.trial_end).to eq(trial_end)
|
377
|
+
expect(sub.metadata.description).to eq(metadata[:description])
|
378
|
+
|
379
|
+
metadata = {description: 'updated description'}
|
380
|
+
sub = Stripe::Subscription.update(sub.id, { metadata: metadata })
|
381
|
+
|
382
|
+
expect(sub.object).to eq('subscription')
|
383
|
+
expect(sub.plan.to_hash).to eq(plan.to_hash)
|
384
|
+
expect(sub.current_period_end).to eq(trial_end)
|
385
|
+
expect(sub.trial_end).to eq(trial_end) # check that the trial_end has NOT changed
|
386
|
+
expect(sub.metadata.description).to eq(metadata[:description]) # check that the description has changed
|
387
|
+
end
|
388
|
+
|
354
389
|
it "returns without a trial when trial_end is set to 'now'" do
|
355
390
|
plan = stripe_helper.create_plan(id: 'trial', amount: 999, trial_period_days: 14)
|
356
391
|
customer = Stripe::Customer.create(id: 'no_trial', source: gen_card_tk)
|
@@ -436,6 +471,8 @@ shared_examples 'Customer Subscriptions' do
|
|
436
471
|
expect(subscription.plan).to eq nil
|
437
472
|
expect(subscription.items.data[0].plan.id).to eq plan.id
|
438
473
|
expect(subscription.items.data[1].plan.id).to eq plan2.id
|
474
|
+
expect(subscription.items.data[0].quantity).to eq 1
|
475
|
+
expect(subscription.items.data[1].quantity).to eq 2
|
439
476
|
end
|
440
477
|
|
441
478
|
it 'when plan defined inside items for trials with no card', live: true do
|
@@ -459,6 +496,75 @@ shared_examples 'Customer Subscriptions' do
|
|
459
496
|
expect(subscription.items.data[0].plan.id).to eq plan.id
|
460
497
|
expect(subscription.items.data[1].plan.id).to eq plan2.id
|
461
498
|
end
|
499
|
+
|
500
|
+
it 'add a new subscription to bill via an invoice' do
|
501
|
+
plan = stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' },
|
502
|
+
amount: 4999, currency: 'usd')
|
503
|
+
customer = Stripe::Customer.create(id: 'cardless')
|
504
|
+
|
505
|
+
expect(customer.subscriptions.data).to be_empty
|
506
|
+
expect(customer.subscriptions.count).to eq(0)
|
507
|
+
|
508
|
+
sub = Stripe::Subscription.create({
|
509
|
+
plan: 'silver',
|
510
|
+
customer: customer.id,
|
511
|
+
metadata: { foo: 'bar', example: 'yes' },
|
512
|
+
billing: 'send_invoice',
|
513
|
+
days_until_due: 30,
|
514
|
+
})
|
515
|
+
|
516
|
+
expect(sub.object).to eq('subscription')
|
517
|
+
expect(sub.plan.to_hash).to eq(plan.to_hash)
|
518
|
+
expect(sub.billing).to eq 'send_invoice'
|
519
|
+
expect(sub.days_until_due).to eq 30
|
520
|
+
end
|
521
|
+
|
522
|
+
let(:subscription_header) {{
|
523
|
+
:idempotency_key => 'a_idempotency_key'
|
524
|
+
}}
|
525
|
+
|
526
|
+
it "adds a new subscription to customer with identical idempotency key" do
|
527
|
+
plan = stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' },
|
528
|
+
amount: 4999, currency: 'usd')
|
529
|
+
customer = Stripe::Customer.create(source: gen_card_tk)
|
530
|
+
|
531
|
+
expect(customer.subscriptions.data).to be_empty
|
532
|
+
expect(customer.subscriptions.count).to eq(0)
|
533
|
+
|
534
|
+
sub1 = Stripe::Subscription.create({ items: [{ plan: 'silver' }], customer: customer.id }, subscription_header)
|
535
|
+
sub2 = Stripe::Subscription.create({ items: [{ plan: 'silver' }], customer: customer.id }, subscription_header)
|
536
|
+
expect(sub1).to eq(sub2)
|
537
|
+
end
|
538
|
+
|
539
|
+
it "adds a new subscription to customer with different idempotency key", :live => true do
|
540
|
+
plan = stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' },
|
541
|
+
amount: 4999, currency: 'usd')
|
542
|
+
customer = Stripe::Customer.create(source: gen_card_tk)
|
543
|
+
|
544
|
+
expect(customer.subscriptions.data).to be_empty
|
545
|
+
expect(customer.subscriptions.count).to eq(0)
|
546
|
+
|
547
|
+
another_subscription_header = {
|
548
|
+
:idempotency_key => 'another_idempotency_key'
|
549
|
+
}
|
550
|
+
|
551
|
+
sub1 = Stripe::Subscription.create({ items: [{ plan: 'silver' }], customer: customer.id }, subscription_header)
|
552
|
+
sub2 = Stripe::Subscription.create({ items: [{ plan: 'silver' }], customer: customer.id }, another_subscription_header)
|
553
|
+
expect(sub1).not_to eq(sub2)
|
554
|
+
end
|
555
|
+
|
556
|
+
it "accepts a hash of items" do
|
557
|
+
silver = stripe_helper.create_plan(id: 'silver')
|
558
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub', source: gen_card_tk)
|
559
|
+
|
560
|
+
sub = Stripe::Subscription.create({ items: { '0' => { plan: 'silver' } }, customer: customer.id })
|
561
|
+
sub.delete(at_period_end: true)
|
562
|
+
|
563
|
+
expect(sub.cancel_at_period_end).to be_truthy
|
564
|
+
expect(sub.save).to be_truthy
|
565
|
+
expect(sub.cancel_at_period_end).to be_falsey
|
566
|
+
end
|
567
|
+
|
462
568
|
end
|
463
569
|
|
464
570
|
context "updating a subscription" do
|
@@ -569,7 +675,8 @@ shared_examples 'Customer Subscriptions' do
|
|
569
675
|
end
|
570
676
|
|
571
677
|
it 'when adds coupon', live: true do
|
572
|
-
plan = stripe_helper.create_plan(id: 'plan_with_coupon2', name: 'One More Test Plan',
|
678
|
+
plan = stripe_helper.create_plan(id: 'plan_with_coupon2', product: { name: 'One More Test Plan' },
|
679
|
+
amount: 777)
|
573
680
|
coupon = stripe_helper.create_coupon
|
574
681
|
customer = Stripe::Customer.create(source: gen_card_tk, plan: plan.id)
|
575
682
|
subscription = Stripe::Subscription.retrieve(customer.subscriptions.data.first.id)
|
@@ -578,12 +685,13 @@ shared_examples 'Customer Subscriptions' do
|
|
578
685
|
subscription.save
|
579
686
|
|
580
687
|
expect(subscription.discount).not_to be_nil
|
581
|
-
expect(subscription.discount).to
|
688
|
+
expect(subscription.discount).to be_a(Stripe::Discount)
|
582
689
|
expect(subscription.discount.coupon.id).to eq(coupon.id)
|
583
690
|
end
|
584
691
|
|
585
692
|
it 'when add not exist coupon' do
|
586
|
-
plan = stripe_helper.create_plan(id: 'plan_with_coupon3', name: 'One More Test Plan',
|
693
|
+
plan = stripe_helper.create_plan(id: 'plan_with_coupon3', product: { name: 'One More Test Plan' },
|
694
|
+
amount: 777)
|
587
695
|
customer = Stripe::Customer.create(source: gen_card_tk, plan: plan.id)
|
588
696
|
subscription = Stripe::Subscription.retrieve(customer.subscriptions.data.first.id)
|
589
697
|
|
@@ -598,7 +706,8 @@ shared_examples 'Customer Subscriptions' do
|
|
598
706
|
end
|
599
707
|
|
600
708
|
it 'when coupon is removed' do
|
601
|
-
plan = stripe_helper.create_plan(id: 'plan_with_coupon3', name: 'One More Test Plan',
|
709
|
+
plan = stripe_helper.create_plan(id: 'plan_with_coupon3', product: { name: 'One More Test Plan' },
|
710
|
+
amount: 777)
|
602
711
|
customer = Stripe::Customer.create(source: gen_card_tk, plan: plan.id)
|
603
712
|
coupon = stripe_helper.create_coupon
|
604
713
|
subscription = Stripe::Subscription.retrieve(customer.subscriptions.data.first.id)
|
@@ -875,6 +984,52 @@ shared_examples 'Customer Subscriptions' do
|
|
875
984
|
end
|
876
985
|
end
|
877
986
|
|
987
|
+
it "supports 'cancelling' by updating cancel_at_period_end" do
|
988
|
+
truth = stripe_helper.create_plan(id: 'the_truth')
|
989
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub', source: gen_card_tk, plan: "the_truth")
|
990
|
+
|
991
|
+
sub = Stripe::Subscription.retrieve(customer.subscriptions.data.first.id)
|
992
|
+
result = Stripe::Subscription.update(sub.id, cancel_at_period_end: true)
|
993
|
+
|
994
|
+
expect(result.status).to eq('active')
|
995
|
+
expect(result.cancel_at_period_end).to eq(true)
|
996
|
+
expect(result.id).to eq(sub.id)
|
997
|
+
|
998
|
+
customer = Stripe::Customer.retrieve('test_customer_sub')
|
999
|
+
expect(customer.subscriptions.data).to_not be_empty
|
1000
|
+
expect(customer.subscriptions.count).to eq(1)
|
1001
|
+
expect(customer.subscriptions.data.length).to eq(1)
|
1002
|
+
|
1003
|
+
expect(customer.subscriptions.data.first.status).to eq('active')
|
1004
|
+
expect(customer.subscriptions.data.first.cancel_at_period_end).to eq(true)
|
1005
|
+
expect(customer.subscriptions.data.first.ended_at).to be_nil
|
1006
|
+
expect(customer.subscriptions.data.first.canceled_at).to_not be_nil
|
1007
|
+
end
|
1008
|
+
|
1009
|
+
it "resumes a subscription cancelled by updating cancel_at_period_end" do
|
1010
|
+
truth = stripe_helper.create_plan(id: 'the_truth')
|
1011
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub', source: gen_card_tk, plan: "the_truth")
|
1012
|
+
|
1013
|
+
sub = Stripe::Subscription.retrieve(customer.subscriptions.data.first.id)
|
1014
|
+
Stripe::Subscription.update(sub.id, cancel_at_period_end: true)
|
1015
|
+
|
1016
|
+
result = Stripe::Subscription.update(sub.id, cancel_at_period_end: false)
|
1017
|
+
|
1018
|
+
expect(result.status).to eq('active')
|
1019
|
+
expect(result.cancel_at_period_end).to eq(false)
|
1020
|
+
expect(result.id).to eq(sub.id)
|
1021
|
+
|
1022
|
+
customer = Stripe::Customer.retrieve('test_customer_sub')
|
1023
|
+
expect(customer.subscriptions.data).to_not be_empty
|
1024
|
+
expect(customer.subscriptions.count).to eq(1)
|
1025
|
+
expect(customer.subscriptions.data.length).to eq(1)
|
1026
|
+
|
1027
|
+
expect(customer.subscriptions.data.first.status).to eq('active')
|
1028
|
+
expect(customer.subscriptions.data.first.cancel_at_period_end).to eq(false)
|
1029
|
+
expect(customer.subscriptions.data.first.ended_at).to be_nil
|
1030
|
+
expect(customer.subscriptions.data.first.canceled_at).to be_nil
|
1031
|
+
end
|
1032
|
+
|
878
1033
|
it "doesn't change status of subscription when cancelling at period end" do
|
879
1034
|
trial = stripe_helper.create_plan(id: 'trial', trial_period_days: 14)
|
880
1035
|
customer = Stripe::Customer.create(id: 'test_customer_sub', source: gen_card_tk, plan: "trial")
|
@@ -962,10 +1117,13 @@ shared_examples 'Customer Subscriptions' do
|
|
962
1117
|
|
963
1118
|
it "creates a stripe customer and subscribes them to a plan with meta data", :live => true do
|
964
1119
|
|
965
|
-
stripe_helper.
|
1120
|
+
stripe_helper.
|
1121
|
+
create_plan(
|
966
1122
|
:amount => 500,
|
967
1123
|
:interval => 'month',
|
968
|
-
:
|
1124
|
+
:product => {
|
1125
|
+
:name => 'Sample Plan'
|
1126
|
+
},
|
969
1127
|
:currency => 'usd',
|
970
1128
|
:id => 'Sample5'
|
971
1129
|
)
|