Skip to content

Commit 151b52a

Browse files
author
rpietraszko
committed
[Subscriptions] Add support for default_payment_method parameter
1 parent 4fee90f commit 151b52a

File tree

4 files changed

+64
-2
lines changed

4 files changed

+64
-2
lines changed

lib/stripe_mock/data.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,7 @@ def self.mock_subscription(params={})
361361
discount: nil,
362362
metadata: {},
363363
default_tax_rates: nil,
364+
default_payment_method: nil,
364365
pending_invoice_item_interval: nil,
365366
next_pending_invoice_item_invoice: nil
366367
}, params)

lib/stripe_mock/request_handlers/helpers/subscription_helpers.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def custom_subscription_params(plans, cus, options = {})
3232
start_time = options[:current_period_start] || now
3333
params = { customer: cus[:id], current_period_start: start_time, created: created_time }
3434
params.merge!({ :plan => (plans.size == 1 ? plans.first : nil) })
35-
keys_to_merge = /application_fee_percent|quantity|metadata|tax_percent|billing|days_until_due|default_tax_rates|pending_invoice_item_interval/
35+
keys_to_merge = /application_fee_percent|quantity|metadata|tax_percent|billing|days_until_due|default_tax_rates|pending_invoice_item_interval|default_payment_method/
3636
params.merge! options.select {|k,v| k =~ keys_to_merge}
3737

3838
if options[:cancel_at_period_end] == true

lib/stripe_mock/request_handlers/subscriptions.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ def create_subscription(route, method_url, params, headers)
102102
customer[:default_source] = new_card[:id]
103103
end
104104

105-
allowed_params = %w(customer application_fee_percent coupon items metadata plan quantity source tax_percent trial_end trial_period_days current_period_start created prorate billing_cycle_anchor billing days_until_due idempotency_key enable_incomplete_payments cancel_at_period_end default_tax_rates payment_behavior pending_invoice_item_interval)
105+
allowed_params = %w(customer application_fee_percent coupon items metadata plan quantity source tax_percent trial_end trial_period_days current_period_start created prorate billing_cycle_anchor billing days_until_due idempotency_key enable_incomplete_payments cancel_at_period_end default_tax_rates payment_behavior pending_invoice_item_interval default_payment_method)
106106
unknown_params = params.keys - allowed_params.map(&:to_sym)
107107
if unknown_params.length > 0
108108
raise Stripe::InvalidRequestError.new("Received unknown parameter: #{unknown_params.join}", unknown_params.first.to_s, http_status: 400)
@@ -276,6 +276,7 @@ def verify_card_present(customer, plan, subscription, params={})
276276
return if customer[:invoice_settings][:default_payment_method]
277277
return if customer[:trial_end]
278278
return if params[:trial_end]
279+
return if subscription[:default_payment_method]
279280

280281
plan_trial_period_days = plan[:trial_period_days] || 0
281282
plan_has_trial = plan_trial_period_days != 0 || plan[:amount] == 0 || plan[:trial_end]

spec/shared_stripe_examples/subscription_examples.rb

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,31 @@
117117
expect(subscriptions.data.first.metadata.example).to eq( "yes" )
118118
end
119119

120+
it "adds a new subscription with payment method provided as default" do
121+
plan
122+
customer = Stripe::Customer.create(source: gen_card_tk)
123+
payment_method = Stripe::PaymentMethod.create(
124+
type: 'card',
125+
card: {
126+
number: 4242_4242_4242_4242,
127+
exp_month: 9,
128+
exp_year: (Time.now.year + 5),
129+
cvc: 999
130+
}
131+
)
132+
sub = Stripe::Subscription.create(
133+
plan: 'silver',
134+
customer: customer,
135+
metadata: { foo: "bar", example: "yes" },
136+
default_payment_method: payment_method.id,
137+
)
138+
139+
subscriptions = Stripe::Subscription.list(customer: customer.id)
140+
expect(subscriptions.count).to eq(1)
141+
expect(subscriptions.data.first.id).to eq(sub.id)
142+
expect(subscriptions.data.first.default_payment_method).to eq(payment_method.id)
143+
end
144+
120145
it "adds a new subscription to customer (string/symbol agnostic)" do
121146
customer = Stripe::Customer.create(source: gen_card_tk)
122147
subscriptions = Stripe::Subscription.list(customer: customer.id)
@@ -754,6 +779,41 @@
754779
expect(subscription.pending_invoice_item_interval.interval_count).to eq 3
755780
end
756781

782+
it "updates a subscription's default payment method" do
783+
plan
784+
customer = Stripe::Customer.create(source: gen_card_tk)
785+
payment_method_card = Stripe::PaymentMethod.create(
786+
type: 'card',
787+
card: {
788+
number: 4242_4242_4242_4242,
789+
exp_month: 9,
790+
exp_year: (Time.now.year + 5),
791+
cvc: 999
792+
}
793+
)
794+
payment_method_sepa = Stripe::PaymentMethod.create(
795+
type: 'sepa_debit',
796+
sepa_debit: {iban: 'DE89370400440532013000'},
797+
)
798+
subscription = Stripe::Subscription.create(
799+
plan: 'silver',
800+
customer: customer,
801+
metadata: { foo: "bar", example: "yes" },
802+
default_payment_method: payment_method_card.id,
803+
)
804+
805+
subscriptions = Stripe::Subscription.list(customer: customer)
806+
expect(subscriptions.data.first.default_payment_method).to eq(payment_method_card.id)
807+
808+
Stripe::Subscription.update(
809+
subscription.id,
810+
default_payment_method: payment_method_sepa.id,
811+
)
812+
813+
subscriptions = Stripe::Subscription.list(customer: customer)
814+
expect(subscriptions.data.first.default_payment_method).to eq(payment_method_sepa.id)
815+
end
816+
757817
it 'when adds coupon', live: true do
758818
coupon = stripe_helper.create_coupon
759819
customer = Stripe::Customer.create(source: gen_card_tk, plan: plan.id)

0 commit comments

Comments
 (0)