Skip to content

Commit d12621d

Browse files
Merge pull request stripe-ruby-mock#648 from fauxparse/support_checkout_sessions
start to implement checkout session API
2 parents 3d08aba + 59fe6e9 commit d12621d

File tree

6 files changed

+77
-1
lines changed

6 files changed

+77
-1
lines changed

lib/stripe_mock.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
require 'stripe_mock/request_handlers/ephemeral_key.rb'
7777
require 'stripe_mock/request_handlers/products.rb'
7878
require 'stripe_mock/request_handlers/tax_rates.rb'
79+
require 'stripe_mock/request_handlers/checkout.rb'
7980
require 'stripe_mock/instance'
8081

8182
require 'stripe_mock/test_strategies/base.rb'

lib/stripe_mock/data.rb

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,5 +1215,43 @@ def self.mock_setup_intent(params = {})
12151215
:usage => "off_session"
12161216
}.merge(params)
12171217
end
1218+
1219+
def self.mock_checkout_session(params = {})
1220+
cs_id = params[:id] || "test_cs_default"
1221+
currency = params[:currency] || StripeMock.default_currency
1222+
{
1223+
id: cs_id,
1224+
object: 'checkout.session',
1225+
billing_address_collection: nil,
1226+
cancel_url: 'https://example.com/cancel',
1227+
client_reference_id: nil,
1228+
customer: nil,
1229+
customer_email: nil,
1230+
display_items: [
1231+
{
1232+
amount: 1500,
1233+
currency: currency,
1234+
custom: {
1235+
description: 'Comfortable cotton t-shirt',
1236+
images: nil,
1237+
name: 'T-shirt'
1238+
},
1239+
quantity: 2,
1240+
type: 'custom'
1241+
}
1242+
],
1243+
livemode: false,
1244+
locale: nil,
1245+
mode: nil,
1246+
payment_intent: mock_payment_intent[:id],
1247+
payment_method_types: [
1248+
'card'
1249+
],
1250+
setup_intent: nil,
1251+
submit_type: nil,
1252+
subscription: nil,
1253+
success_url: 'https://example.com/success'
1254+
}.merge(params)
1255+
end
12181256
end
12191257
end

lib/stripe_mock/instance.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,12 @@ def self.handler_for_method_url(method_url)
4949
include StripeMock::RequestHandlers::Payouts
5050
include StripeMock::RequestHandlers::EphemeralKey
5151
include StripeMock::RequestHandlers::TaxRates
52+
include StripeMock::RequestHandlers::Checkout
5253

5354
attr_reader :accounts, :balance, :balance_transactions, :bank_tokens, :charges, :coupons, :customers,
5455
:disputes, :events, :invoices, :invoice_items, :orders, :payment_intents, :payment_methods,
5556
:setup_intents, :plans, :recipients, :refunds, :transfers, :payouts, :subscriptions, :country_spec,
56-
:subscriptions_items, :products, :tax_rates
57+
:subscriptions_items, :products, :tax_rates, :checkout_sessions
5758

5859
attr_accessor :error_queue, :debug, :conversion_rate, :account_balance
5960

@@ -85,6 +86,7 @@ def initialize
8586
@subscriptions_items = {}
8687
@country_spec = {}
8788
@tax_rates = {}
89+
@checkout_sessions = {}
8890

8991
@debug = false
9092
@error_queue = ErrorQueue.new
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module StripeMock
2+
module RequestHandlers
3+
module Checkout
4+
def Checkout.included(klass)
5+
klass.add_handler 'post /v1/checkout/sessions', :new_session
6+
end
7+
8+
def new_session(route, method_url, params, headers)
9+
params[:id] ||= new_id('cs')
10+
11+
checkout_sessions[params[:id]] = Data.mock_checkout_session(params)
12+
end
13+
end
14+
end
15+
end
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
require 'spec_helper'
2+
3+
shared_examples 'Checkout API' do
4+
5+
it "creates a stripe checkout session" do
6+
session = Stripe::Checkout::Session.create({
7+
payment_method_types: ['card'],
8+
line_items: [{
9+
name: 'T-shirt',
10+
quantity: 1,
11+
amount: 500,
12+
currency: 'usd',
13+
}],
14+
})
15+
expect(session.id).to match(/^test_cs/)
16+
expect(session.line_items.count).to eq(1)
17+
end
18+
19+
end

spec/support/stripe_examples.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ def it_behaves_like_stripe(&block)
3535
it_behaves_like 'Country Spec API', &block
3636
it_behaves_like 'EphemeralKey API', &block
3737
it_behaves_like 'TaxRate API', &block
38+
it_behaves_like 'Checkout API', &block
3839

3940
# Integration tests
4041
it_behaves_like 'Multiple Customer Cards'

0 commit comments

Comments
 (0)