Skip to content

Commit

Permalink
Some updates around subscriptions (stripe-ruby-mock#843)
Browse files Browse the repository at this point in the history
* Allow stripe < 8

* Add `application_fee_percent`

# Conflicts:
#	lib/stripe_mock/data.rb

* Add :cancel_at, :end_at

* Add :price to :subscription_items

* Add :pause_collection to Subscription

* Add :has_more to subscription_items list

* Remove :mock_price from Subscription

* Customer from subscription on upcoming_invoice

* Get plan amount from Plan or Price

* Allow stripe 12

---------

Co-authored-by: Alexander Mamonchik <[email protected]>
  • Loading branch information
donnguyen and alexmamonchik authored Nov 13, 2024
1 parent ba6b6e8 commit c2cc641
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 6 deletions.
13 changes: 10 additions & 3 deletions lib/stripe_mock/data.rb
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,8 @@ def self.mock_subscription(params={})
currency: StripeMock.default_currency
},
quantity: 1
}]
}],
has_more: false
},
cancel_at_period_end: false,
canceled_at: nil,
Expand All @@ -401,7 +402,12 @@ def self.mock_subscription(params={})
default_payment_method: nil,
pending_invoice_item_interval: nil,
next_pending_invoice_item_invoice: nil,
latest_invoice: nil
pending_setup_intent: nil,
latest_invoice: nil,
application_fee_percent: nil,
cancel_at: nil,
end_at: nil,
pause_collection: nil
}, params)
end

Expand Down Expand Up @@ -1221,7 +1227,8 @@ def self.mock_subscription_item(params = {})
statement_descriptor: nil,
trial_period_days: nil
},
quantity: 2
quantity: 2,
price: mock_price
}.merge(params)
end

Expand Down
10 changes: 8 additions & 2 deletions lib/stripe_mock/request_handlers/invoices.rb
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ def upcoming_invoice(route, method_url, params, headers = {})
raise Stripe::InvalidRequestError.new('When previewing changes to a subscription, you must specify either `subscription` or `subscription_items`', nil, http_status: 400) if !params[:subscription_proration_date].nil? && params[:subscription].nil? && params[:subscription_plan].nil?
raise Stripe::InvalidRequestError.new('Cannot specify proration date without specifying a subscription', nil, http_status: 400) if !params[:subscription_proration_date].nil? && params[:subscription].nil?

if params[:subscription] && params[:customer].nil?
params[:customer] = subscriptions[params[:subscription]][:customer]
end
customer = customers[stripe_account][params[:customer]]
assert_existence :customer, params[:customer], customer

Expand Down Expand Up @@ -114,8 +117,9 @@ def upcoming_invoice(route, method_url, params, headers = {})
invoice_lines = []

if prorating
plan_amount = subscription[:plan][:amount] || subscription[:plan][:unit_amount]
unused_amount = (
subscription[:plan][:amount].to_f *
plan_amount.to_f *
subscription[:quantity] *
(subscription[:current_period_end] - subscription_proration_date.to_i) / (subscription[:current_period_end] - subscription[:current_period_start])
).ceil
Expand Down Expand Up @@ -169,11 +173,13 @@ def upcoming_invoice(route, method_url, params, headers = {})
private

def get_mock_subscription_line_item(subscription)
plan_amount = subscription[:plan][:amount] || subscription[:plan][:unit_amount]

Data.mock_line_item(
id: subscription[:id],
type: "subscription",
plan: subscription[:plan],
amount: subscription[:status] == 'trialing' ? 0 : subscription[:plan][:amount] * subscription[:quantity],
amount: subscription[:status] == 'trialing' ? 0 : plan_amount * subscription[:quantity],
discountable: true,
quantity: subscription[:quantity],
period: {
Expand Down
2 changes: 1 addition & 1 deletion stripe-ruby-mock.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Gem::Specification.new do |gem|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
gem.require_paths = ['lib']

gem.add_dependency 'stripe', '> 5', '< 12'
gem.add_dependency 'stripe', '> 5', '< 13'
gem.add_dependency 'multi_json', '~> 1.0'
gem.add_dependency 'dante', '>= 0.2.0'

Expand Down

0 comments on commit c2cc641

Please sign in to comment.