Skip to content

Commit d0057f0

Browse files
committed
Handle different types of subscription statuses
When expanding latest_invoice
1 parent f2944e8 commit d0057f0

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

lib/stripe_mock/request_handlers/subscriptions.rb

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -142,17 +142,17 @@ def create_subscription(route, method_url, params, headers)
142142
end
143143

144144
if (s = params[:expand]&.first { |s| s.starts_with? 'latest_invoice' })
145-
intent = Data.mock_payment_intent({
146-
status: 'succeeded',
147-
amount: subscription[:plan][:amount],
148-
currency: subscription[:plan][:currency]
149-
})
150-
invoice = nil
151-
if s.include?('latest_invoice.payment_intent')
152-
invoice = Data.mock_invoice([], { payment_intent: intent })
153-
else
154-
invoice = Data.mock_invoice([], { payment_intent: intent.id })
145+
payment_intent = nil
146+
unless subscription[:status] == 'trialing'
147+
intent_status = subscription[:status] == 'incomplete' ? 'requires_payment_method' : 'succeeded'
148+
intent = Data.mock_payment_intent({
149+
status: intent_status,
150+
amount: subscription[:plan][:amount],
151+
currency: subscription[:plan][:currency]
152+
})
153+
payment_intent = s.include?('latest_invoice.payment_intent') ? intent : intent.id
155154
end
155+
invoice = Data.mock_invoice([], { payment_intent: payment_intent })
156156
subscription[:latest_invoice] = invoice
157157
end
158158

spec/shared_stripe_examples/subscription_examples.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,24 @@
694694
})
695695

696696
expect(subscription.latest_invoice.payment_intent.status).to eq('succeeded')
697+
698+
subscription = Stripe::Subscription.create({
699+
customer: customer.id,
700+
plan: plan.id,
701+
expand: ['latest_invoice.payment_intent'],
702+
payment_behavior: 'default_incomplete'
703+
})
704+
705+
expect(subscription.latest_invoice.payment_intent.status).to eq('requires_payment_method')
706+
707+
subscription = Stripe::Subscription.create({
708+
customer: customer.id,
709+
plan: plan.id,
710+
expand: ['latest_invoice.payment_intent'],
711+
trial_period_days: 14
712+
})
713+
714+
expect(subscription.latest_invoice.payment_intent).to be_nil
697715
end
698716
end
699717

0 commit comments

Comments
 (0)