Skip to content

Commit 0730bdb

Browse files
Merge pull request stripe-ruby-mock#720 from codequest-eu/feature/subscription-additional-parameters
[Subscriptions] Add additional parameters
2 parents 4fee90f + 5ca1a8c commit 0730bdb

File tree

4 files changed

+69
-2
lines changed

4 files changed

+69
-2
lines changed

lib/stripe_mock/data.rb

+2
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,7 @@ def self.mock_subscription(params={})
350350
},
351351
cancel_at_period_end: false,
352352
canceled_at: nil,
353+
collection_method: 'charge_automatically',
353354
ended_at: nil,
354355
start: 1308595038,
355356
object: 'subscription',
@@ -361,6 +362,7 @@ def self.mock_subscription(params={})
361362
discount: nil,
362363
metadata: {},
363364
default_tax_rates: nil,
365+
default_payment_method: nil,
364366
pending_invoice_item_interval: nil,
365367
next_pending_invoice_item_invoice: nil
366368
}, params)

lib/stripe_mock/request_handlers/helpers/subscription_helpers.rb

+1-1
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|collection_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

+2-1
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 collection_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

+64
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,33 @@
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+
collection_method: 'send_invoice',
137+
default_payment_method: payment_method.id,
138+
)
139+
140+
subscriptions = Stripe::Subscription.list(customer: customer.id)
141+
expect(subscriptions.count).to eq(1)
142+
expect(subscriptions.data.first.id).to eq(sub.id)
143+
expect(subscriptions.data.first.collection_method).to eq('send_invoice')
144+
expect(subscriptions.data.first.default_payment_method).to eq(payment_method.id)
145+
end
146+
120147
it "adds a new subscription to customer (string/symbol agnostic)" do
121148
customer = Stripe::Customer.create(source: gen_card_tk)
122149
subscriptions = Stripe::Subscription.list(customer: customer.id)
@@ -754,6 +781,43 @@
754781
expect(subscription.pending_invoice_item_interval.interval_count).to eq 3
755782
end
756783

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

0 commit comments

Comments
 (0)