stripe-ruby-mock 2.5.4 → 2.5.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/README.md +1 -1
- data/lib/stripe_mock.rb +1 -0
- data/lib/stripe_mock/data.rb +32 -13
- data/lib/stripe_mock/instance.rb +1 -0
- data/lib/stripe_mock/request_handlers/accounts.rb +16 -0
- data/lib/stripe_mock/request_handlers/ephemeral_key.rb +13 -0
- data/lib/stripe_mock/request_handlers/helpers/card_helpers.rb +1 -0
- data/lib/stripe_mock/request_handlers/helpers/subscription_helpers.rb +9 -1
- data/lib/stripe_mock/request_handlers/transfers.rb +10 -4
- data/lib/stripe_mock/test_strategies/base.rb +4 -2
- data/lib/stripe_mock/version.rb +1 -1
- data/lib/stripe_mock/webhook_fixtures/customer.subscription.created.json +2 -2
- data/lib/stripe_mock/webhook_fixtures/customer.subscription.deleted.json +2 -2
- data/lib/stripe_mock/webhook_fixtures/customer.subscription.trial_will_end.json +2 -2
- data/lib/stripe_mock/webhook_fixtures/customer.subscription.updated.json +3 -3
- data/lib/stripe_mock/webhook_fixtures/invoice.created.json +1 -1
- data/lib/stripe_mock/webhook_fixtures/invoice.payment_failed.json +1 -1
- data/lib/stripe_mock/webhook_fixtures/invoice.updated.json +1 -1
- data/lib/stripe_mock/webhook_fixtures/plan.created.json +1 -1
- data/lib/stripe_mock/webhook_fixtures/plan.deleted.json +1 -1
- data/lib/stripe_mock/webhook_fixtures/plan.updated.json +1 -1
- data/spec/instance_spec.rb +31 -0
- data/spec/shared_stripe_examples/account_examples.rb +27 -0
- data/spec/shared_stripe_examples/ephemeral_key_examples.rb +17 -0
- data/spec/shared_stripe_examples/invoice_examples.rb +1 -1
- data/spec/shared_stripe_examples/subscription_examples.rb +35 -16
- data/spec/shared_stripe_examples/transfer_examples.rb +61 -30
- data/spec/support/stripe_examples.rb +1 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8bb56a9378124dffc3cb2d4d9900ced89323ec9a
|
4
|
+
data.tar.gz: 9181762220a2d8d1fb5ff7e37d479b2b75290d76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 390ca8cee59e0584d03dc2a9c6decb8b6df5b70278984baefbd00f6b053efa747c623cf5d867fa53c8ad964d66e48d5155e9a34ee0a27846d36177f8f67a6904
|
7
|
+
data.tar.gz: 7d4bd0d536ed0b21d4eac5f0e16161e4c46e2ba00e927c74fe6fa1f88bbf1fda335b314dffe04704afccf9f226330e0b7f8c3e3b3afbf4ad03cba078562739f7
|
data/.travis.yml
CHANGED
@@ -17,7 +17,7 @@ script: "bundle exec rspec && bundle exec rspec -t live"
|
|
17
17
|
|
18
18
|
env:
|
19
19
|
global:
|
20
|
-
- IS_TRAVIS=true STRIPE_TEST_SECRET_KEY_A=
|
20
|
+
- IS_TRAVIS=true STRIPE_TEST_SECRET_KEY_A=sk_test_Ut2MSlZANdT3iDALdGhyLymy STRIPE_TEST_SECRET_KEY_B=sk_test_JXtzss9tHOG1ofIyEZgoUP4Q STRIPE_TEST_SECRET_KEY_C=sk_test_ZR5nVz9p3ivsqVa7mYB0sFep STRIPE_TEST_SECRET_KEY_D=sk_test_ZR5nVz9p3ivsqVa7mYB0sFep
|
21
21
|
|
22
22
|
notifications:
|
23
23
|
webhooks:
|
data/README.md
CHANGED
data/lib/stripe_mock.rb
CHANGED
@@ -69,6 +69,7 @@ require 'stripe_mock/request_handlers/payouts.rb'
|
|
69
69
|
require 'stripe_mock/request_handlers/subscriptions.rb'
|
70
70
|
require 'stripe_mock/request_handlers/tokens.rb'
|
71
71
|
require 'stripe_mock/request_handlers/country_spec.rb'
|
72
|
+
require 'stripe_mock/request_handlers/ephemeral_key.rb'
|
72
73
|
require 'stripe_mock/instance'
|
73
74
|
|
74
75
|
require 'stripe_mock/test_strategies/base.rb'
|
data/lib/stripe_mock/data.rb
CHANGED
@@ -243,7 +243,8 @@ module StripeMock
|
|
243
243
|
cvc_check: nil,
|
244
244
|
address_line1_check: nil,
|
245
245
|
address_zip_check: nil,
|
246
|
-
tokenization_method: nil
|
246
|
+
tokenization_method: nil,
|
247
|
+
metadata: {}
|
247
248
|
}, params)
|
248
249
|
end
|
249
250
|
|
@@ -261,7 +262,8 @@ module StripeMock
|
|
261
262
|
status: 'new',
|
262
263
|
account_holder_name: 'John Doe',
|
263
264
|
account_holder_type: 'individual',
|
264
|
-
fingerprint: "aBcFinGerPrINt123"
|
265
|
+
fingerprint: "aBcFinGerPrINt123",
|
266
|
+
metadata: {}
|
265
267
|
}.merge(params)
|
266
268
|
end
|
267
269
|
|
@@ -594,31 +596,29 @@ module StripeMock
|
|
594
596
|
currency = params[:currency] || StripeMock.default_currency
|
595
597
|
id = params[:id] || 'tr_test_transfer'
|
596
598
|
{
|
597
|
-
:status => 'pending',
|
598
599
|
:amount => 100,
|
599
|
-
:
|
600
|
-
|
601
|
-
:country => 'US',
|
602
|
-
:bank_name => 'STRIPE TEST BANK',
|
603
|
-
:last4 => '6789'
|
604
|
-
},
|
605
|
-
:recipient => 'test_recipient',
|
606
|
-
:fee => 0,
|
607
|
-
:fee_details => [],
|
600
|
+
:amount_reversed => 0,
|
601
|
+
:balance_transaction => "txn_2dyYXXP90MN26R",
|
608
602
|
:id => id,
|
609
603
|
:livemode => false,
|
610
604
|
:metadata => {},
|
611
605
|
:currency => currency,
|
612
606
|
:object => "transfer",
|
613
|
-
:
|
607
|
+
:created => 1304114826,
|
614
608
|
:description => "Transfer description",
|
615
609
|
:reversed => false,
|
616
610
|
:reversals => {
|
617
611
|
:object => "list",
|
612
|
+
:data => [],
|
618
613
|
:total_count => 0,
|
619
614
|
:has_more => false,
|
620
615
|
:url => "/v1/transfers/#{id}/reversals"
|
621
616
|
},
|
617
|
+
:destination => "acct_164wxjKbnvuxQXGu",
|
618
|
+
:destination_payment => "py_164xRvKbnvuxQXGuVFV2pZo1",
|
619
|
+
:source_transaction => "ch_164xRv2eZvKYlo2Clu1sIJWB",
|
620
|
+
:source_type => "card",
|
621
|
+
:transfer_group => "group_ch_164xRv2eZvKYlo2Clu1sIJWB",
|
622
622
|
}.merge(params)
|
623
623
|
end
|
624
624
|
|
@@ -1027,5 +1027,24 @@ module StripeMock
|
|
1027
1027
|
quantity: 2
|
1028
1028
|
}.merge(params)
|
1029
1029
|
end
|
1030
|
+
|
1031
|
+
def self.mock_ephemeral_key(**params)
|
1032
|
+
created = Time.now.to_i
|
1033
|
+
expires = created + 34_000
|
1034
|
+
{
|
1035
|
+
id: "ephkey_default",
|
1036
|
+
object: "ephemeral_key",
|
1037
|
+
associated_objects: [
|
1038
|
+
{
|
1039
|
+
id: params[:customer],
|
1040
|
+
type: "customer"
|
1041
|
+
}
|
1042
|
+
],
|
1043
|
+
created: created,
|
1044
|
+
expires: expires,
|
1045
|
+
livemode: false,
|
1046
|
+
secret: "ek_test_default"
|
1047
|
+
}
|
1048
|
+
end
|
1030
1049
|
end
|
1031
1050
|
end
|
data/lib/stripe_mock/instance.rb
CHANGED
@@ -42,6 +42,7 @@ module StripeMock
|
|
42
42
|
include StripeMock::RequestHandlers::Tokens
|
43
43
|
include StripeMock::RequestHandlers::CountrySpec
|
44
44
|
include StripeMock::RequestHandlers::Payouts
|
45
|
+
include StripeMock::RequestHandlers::EphemeralKey
|
45
46
|
|
46
47
|
attr_reader :accounts, :balance, :balance_transactions, :bank_tokens, :charges, :coupons, :customers,
|
47
48
|
:disputes, :events, :invoices, :invoice_items, :orders, :plans, :recipients,
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module StripeMock
|
2
2
|
module RequestHandlers
|
3
3
|
module Accounts
|
4
|
+
VALID_START_YEAR = 2009
|
4
5
|
|
5
6
|
def Accounts.included(klass)
|
6
7
|
klass.add_handler 'post /v1/accounts', :new_account
|
@@ -30,6 +31,8 @@ module StripeMock
|
|
30
31
|
account.merge!(params)
|
31
32
|
if blank_value?(params[:tos_acceptance], :date)
|
32
33
|
raise Stripe::InvalidRequestError.new("Invalid integer: ", "tos_acceptance[date]", http_status: 400)
|
34
|
+
elsif params[:tos_acceptance] && params[:tos_acceptance][:date]
|
35
|
+
validate_acceptance_date(params[:tos_acceptance][:date])
|
33
36
|
end
|
34
37
|
account
|
35
38
|
end
|
@@ -65,6 +68,19 @@ module StripeMock
|
|
65
68
|
end
|
66
69
|
false
|
67
70
|
end
|
71
|
+
|
72
|
+
def validate_acceptance_date(unix_date)
|
73
|
+
unix_now = Time.now.strftime("%s").to_i
|
74
|
+
formatted_date = Time.at(unix_date)
|
75
|
+
|
76
|
+
return if formatted_date.year >= VALID_START_YEAR && unix_now >= unix_date
|
77
|
+
|
78
|
+
raise Stripe::InvalidRequestError.new(
|
79
|
+
"ToS acceptance date is not valid. Dates are expected to be integers, measured in seconds, not in the future, and after 2009",
|
80
|
+
"tos_acceptance[date]",
|
81
|
+
http_status: 400
|
82
|
+
)
|
83
|
+
end
|
68
84
|
end
|
69
85
|
end
|
70
86
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module StripeMock
|
2
|
+
module RequestHandlers
|
3
|
+
module EphemeralKey
|
4
|
+
def self.included(klass)
|
5
|
+
klass.add_handler 'post /v1/ephemeral_keys', :create_ephemeral_key
|
6
|
+
end
|
7
|
+
|
8
|
+
def create_ephemeral_key(route, method_url, params, headers)
|
9
|
+
Data.mock_ephemeral_key(params)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -8,7 +8,15 @@ module StripeMock
|
|
8
8
|
|
9
9
|
def resolve_subscription_changes(subscription, plans, customer, options = {})
|
10
10
|
subscription.merge!(custom_subscription_params(plans, customer, options))
|
11
|
-
subscription[:items][:data] = plans.map
|
11
|
+
subscription[:items][:data] = plans.map do |plan|
|
12
|
+
if options[:items] && options[:items].size == plans.size
|
13
|
+
quantity = options[:items] &&
|
14
|
+
options[:items].values.detect { |item| item[:plan] == plan[:id] }[:quantity] || 1
|
15
|
+
Data.mock_subscription_item({ plan: plan, quantity: quantity })
|
16
|
+
else
|
17
|
+
Data.mock_subscription_item({ plan: plan })
|
18
|
+
end
|
19
|
+
end
|
12
20
|
subscription
|
13
21
|
end
|
14
22
|
|
@@ -10,13 +10,19 @@ module StripeMock
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def get_all_transfers(route, method_url, params, headers)
|
13
|
-
|
14
|
-
|
13
|
+
extra_params = params.keys - [:created, :destination, :ending_before,
|
14
|
+
:limit, :starting_after, :transfer_group]
|
15
|
+
unless extra_params.empty?
|
16
|
+
raise Stripe::InvalidRequestError.new("Received unknown parameter: #{extra_params[0]}", extra_params[0].to_s, http_status: 400)
|
17
|
+
end
|
18
|
+
|
19
|
+
if destination = params[:destination]
|
20
|
+
assert_existence :destination, destination, accounts[destination]
|
15
21
|
end
|
16
22
|
|
17
23
|
_transfers = transfers.each_with_object([]) do |(_, transfer), array|
|
18
|
-
if
|
19
|
-
array << transfer if transfer[:
|
24
|
+
if destination
|
25
|
+
array << transfer if transfer[:destination] == destination
|
20
26
|
else
|
21
27
|
array << transfer
|
22
28
|
end
|
@@ -6,7 +6,9 @@ module StripeMock
|
|
6
6
|
currency = params[:currency] || StripeMock.default_currency
|
7
7
|
{
|
8
8
|
:id => 'stripe_mock_default_plan_id',
|
9
|
-
:
|
9
|
+
:product => {
|
10
|
+
:name => 'StripeMock Default Plan ID'
|
11
|
+
},
|
10
12
|
:amount => 1337,
|
11
13
|
:currency => currency,
|
12
14
|
:interval => 'month'
|
@@ -14,7 +16,7 @@ module StripeMock
|
|
14
16
|
end
|
15
17
|
|
16
18
|
def generate_card_token(card_params={})
|
17
|
-
card_data = { :number => "4242424242424242", :exp_month => 9, :exp_year =>
|
19
|
+
card_data = { :number => "4242424242424242", :exp_month => 9, :exp_year => (Time.now.year + 5), :cvc => "999", :tokenization_method => nil }
|
18
20
|
card = StripeMock::Util.card_merge(card_data, card_params)
|
19
21
|
card[:fingerprint] = StripeMock::Util.fingerprint(card[:number]) if StripeMock.state == 'local'
|
20
22
|
|
data/lib/stripe_mock/version.rb
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
"created": 1497881783,
|
17
17
|
"plan": {
|
18
18
|
"interval": "month",
|
19
|
-
"
|
19
|
+
"product": "pr_00000000000000",
|
20
20
|
"amount": 100,
|
21
21
|
"currency": "usd",
|
22
22
|
"id": "fkx0AFo_00000000000000",
|
@@ -34,7 +34,7 @@
|
|
34
34
|
"created": 1497881788,
|
35
35
|
"plan": {
|
36
36
|
"interval": "month",
|
37
|
-
"
|
37
|
+
"product": "pr_00000000000001",
|
38
38
|
"amount": 200,
|
39
39
|
"currency": "eur",
|
40
40
|
"id": "fkx0AFo_00000000000001",
|
@@ -15,7 +15,7 @@
|
|
15
15
|
"created": 1497881783,
|
16
16
|
"plan": {
|
17
17
|
"interval": "month",
|
18
|
-
"
|
18
|
+
"product": "pr_00000000000000",
|
19
19
|
"amount": 100,
|
20
20
|
"currency": "usd",
|
21
21
|
"id": "fkx0AFo_00000000000000",
|
@@ -33,7 +33,7 @@
|
|
33
33
|
"created": 1497881788,
|
34
34
|
"plan": {
|
35
35
|
"interval": "month",
|
36
|
-
"
|
36
|
+
"product": "pr_00000000000001",
|
37
37
|
"amount": 200,
|
38
38
|
"currency": "eur",
|
39
39
|
"id": "fkx0AFo_00000000000001",
|
@@ -15,7 +15,7 @@
|
|
15
15
|
"created": 1497881783,
|
16
16
|
"plan": {
|
17
17
|
"interval": "month",
|
18
|
-
"
|
18
|
+
"product": "pr_00000000000000",
|
19
19
|
"amount": 100,
|
20
20
|
"currency": "usd",
|
21
21
|
"id": "fkx0AFo_00000000000000",
|
@@ -33,7 +33,7 @@
|
|
33
33
|
"created": 1497881788,
|
34
34
|
"plan": {
|
35
35
|
"interval": "month",
|
36
|
-
"
|
36
|
+
"product": "pr_00000000000001",
|
37
37
|
"amount": 200,
|
38
38
|
"currency": "eur",
|
39
39
|
"id": "fkx0AFo_00000000000001",
|
@@ -15,7 +15,7 @@
|
|
15
15
|
"created": 1497881783,
|
16
16
|
"plan": {
|
17
17
|
"interval": "month",
|
18
|
-
"
|
18
|
+
"product": "pr_00000000000000",
|
19
19
|
"amount": 100,
|
20
20
|
"currency": "usd",
|
21
21
|
"id": "fkx0AFo_00000000000000",
|
@@ -33,7 +33,7 @@
|
|
33
33
|
"created": 1497881788,
|
34
34
|
"plan": {
|
35
35
|
"interval": "month",
|
36
|
-
"
|
36
|
+
"product": "pr_00000000000001",
|
37
37
|
"amount": 200,
|
38
38
|
"currency": "eur",
|
39
39
|
"id": "fkx0AFo_00000000000001",
|
@@ -64,7 +64,7 @@
|
|
64
64
|
"previous_attributes": {
|
65
65
|
"plan": {
|
66
66
|
"interval": "month",
|
67
|
-
"
|
67
|
+
"product": "pr_00000000000002",
|
68
68
|
"amount": 100,
|
69
69
|
"currency": "usd",
|
70
70
|
"id": "OLD_PLAN_ID",
|
@@ -30,7 +30,6 @@
|
|
30
30
|
"quantity": 1,
|
31
31
|
"plan": {
|
32
32
|
"interval": "month",
|
33
|
-
"name": "Member's Club",
|
34
33
|
"amount": 100,
|
35
34
|
"currency": "usd",
|
36
35
|
"id": "fkx0AFo",
|
@@ -38,6 +37,7 @@
|
|
38
37
|
"livemode": false,
|
39
38
|
"interval_count": 1,
|
40
39
|
"trial_period_days": null,
|
40
|
+
"product": "pr_00000000000000",
|
41
41
|
"metadata": {}
|
42
42
|
},
|
43
43
|
"description": null,
|
data/spec/instance_spec.rb
CHANGED
@@ -66,4 +66,35 @@ describe StripeMock::Instance do
|
|
66
66
|
end
|
67
67
|
expect(customer.currency).to eq("jpy")
|
68
68
|
end
|
69
|
+
|
70
|
+
context 'when creating sources with metadata' do
|
71
|
+
let(:customer) { Stripe::Customer.create(email: 'test@email.com') }
|
72
|
+
let(:metadata) { { test_key: 'test_value' } }
|
73
|
+
|
74
|
+
context 'for credit card' do
|
75
|
+
let(:credit_card) do
|
76
|
+
customer.sources.create(
|
77
|
+
source: stripe_helper.generate_card_token,
|
78
|
+
metadata: metadata
|
79
|
+
)
|
80
|
+
end
|
81
|
+
|
82
|
+
it('should save metadata') do
|
83
|
+
expect(credit_card.metadata.test_key).to eq metadata[:test_key]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'for bank account' do
|
88
|
+
let(:bank_account) do
|
89
|
+
customer.sources.create(
|
90
|
+
source: stripe_helper.generate_bank_token,
|
91
|
+
metadata: metadata
|
92
|
+
)
|
93
|
+
end
|
94
|
+
|
95
|
+
it('should save metadata') do
|
96
|
+
expect(bank_account.metadata.test_key).to eq metadata[:test_key]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
69
100
|
end
|
@@ -57,6 +57,33 @@ shared_examples 'Account API' do
|
|
57
57
|
account.save
|
58
58
|
}.to raise_error
|
59
59
|
end
|
60
|
+
|
61
|
+
context 'with tos acceptance date' do
|
62
|
+
let(:error_message) { "ToS acceptance date is not valid. Dates are expected to be integers, measured in seconds, not in the future, and after 2009" }
|
63
|
+
|
64
|
+
it 'raises error when tos date is before 2009' do
|
65
|
+
date = Date.new(2008,1,1).strftime("%s").to_i
|
66
|
+
|
67
|
+
account = Stripe::Account.retrieve
|
68
|
+
account.tos_acceptance.date = date
|
69
|
+
|
70
|
+
expect {
|
71
|
+
account.save
|
72
|
+
}.to raise_error Stripe::InvalidRequestError, error_message
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'raises error when tos date is in the future' do
|
76
|
+
year = Time.now.year + 5
|
77
|
+
date = Date.new(year,1,1).strftime("%s").to_i
|
78
|
+
|
79
|
+
account = Stripe::Account.retrieve
|
80
|
+
account.tos_acceptance.date = date
|
81
|
+
|
82
|
+
expect {
|
83
|
+
account.save
|
84
|
+
}.to raise_error Stripe::InvalidRequestError, error_message
|
85
|
+
end
|
86
|
+
end
|
60
87
|
end
|
61
88
|
|
62
89
|
it 'deauthorizes the stripe account', live: false do
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
shared_examples 'EphemeralKey API' do
|
4
|
+
describe 'Create a new key' do
|
5
|
+
let(:customer) { Stripe::Customer.create email: 'test@example.com' }
|
6
|
+
let(:version) { '2016-07-06' }
|
7
|
+
|
8
|
+
it 'creates a new key' do
|
9
|
+
key = Stripe::EphemeralKey.create(
|
10
|
+
{ customer: customer.id },
|
11
|
+
{ stripe_version: version }
|
12
|
+
)
|
13
|
+
|
14
|
+
expect(key[:associated_objects][0][:id]).to eq customer.id
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -360,7 +360,7 @@ shared_examples 'Invoice API' do
|
|
360
360
|
expect(line.amount).to eq 150_00
|
361
361
|
# line period is for the NEXT subscription cycle
|
362
362
|
expect(line.period.start).to be_within(1).of subscription.current_period_end
|
363
|
-
expect(line.period.end).to be_within(1).of (Time.at(subscription.current_period_end).to_datetime >> 1).
|
363
|
+
expect(Time.at(line.period.end).month).to be_within(1).of (Time.at(subscription.current_period_end).to_datetime >> 1).month # +1 month
|
364
364
|
end
|
365
365
|
end
|
366
366
|
|
@@ -8,7 +8,8 @@ shared_examples 'Customer Subscriptions' do
|
|
8
8
|
|
9
9
|
context "creating a new subscription" do
|
10
10
|
it "adds a new subscription to customer with none using items", :live => true do
|
11
|
-
plan = stripe_helper.create_plan(id: 'silver', name: 'Silver Plan'
|
11
|
+
plan = stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' },
|
12
|
+
amount: 4999, currency: 'usd')
|
12
13
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
13
14
|
|
14
15
|
expect(customer.subscriptions.data).to be_empty
|
@@ -37,7 +38,8 @@ shared_examples 'Customer Subscriptions' do
|
|
37
38
|
end
|
38
39
|
|
39
40
|
it "adds a new subscription to customer with none", :live => true do
|
40
|
-
plan = stripe_helper.create_plan(id: 'silver', name: 'Silver Plan'
|
41
|
+
plan = stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' },
|
42
|
+
amount: 4999, currency: 'usd')
|
41
43
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
42
44
|
|
43
45
|
expect(customer.subscriptions.data).to be_empty
|
@@ -66,7 +68,7 @@ shared_examples 'Customer Subscriptions' do
|
|
66
68
|
end
|
67
69
|
|
68
70
|
it 'when customer object provided' do
|
69
|
-
plan = stripe_helper.create_plan(id: 'silver', name: 'Silver Plan', amount: 4999, currency: 'usd')
|
71
|
+
plan = stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' }, amount: 4999, currency: 'usd')
|
70
72
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
71
73
|
|
72
74
|
expect(customer.subscriptions.data).to be_empty
|
@@ -100,13 +102,15 @@ shared_examples 'Customer Subscriptions' do
|
|
100
102
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
101
103
|
expect(customer.subscriptions.count).to eq(0)
|
102
104
|
|
103
|
-
plan = stripe_helper.create_plan(id: :silver, name: 'Silver Plan'
|
105
|
+
plan = stripe_helper.create_plan(id: :silver, product: { name: 'Silver Plan' },
|
106
|
+
amount: 4999, currency: 'usd')
|
104
107
|
sub = Stripe::Subscription.create({ plan: 'silver', customer: customer.id })
|
105
108
|
customer = Stripe::Customer.retrieve(customer.id)
|
106
109
|
expect(sub.plan.to_hash).to eq(plan.to_hash)
|
107
110
|
expect(customer.subscriptions.count).to eq(1)
|
108
111
|
|
109
|
-
plan = stripe_helper.create_plan(id: 'gold', name: 'Gold Plan'
|
112
|
+
plan = stripe_helper.create_plan(id: 'gold', product: { name: 'Gold Plan' },
|
113
|
+
amount: 14999, currency: 'usd')
|
110
114
|
sub = Stripe::Subscription.create({ plan: 'gold', customer: customer.id })
|
111
115
|
customer = Stripe::Customer.retrieve(customer.id)
|
112
116
|
expect(sub.plan.to_hash).to eq(plan.to_hash)
|
@@ -114,7 +118,8 @@ shared_examples 'Customer Subscriptions' do
|
|
114
118
|
end
|
115
119
|
|
116
120
|
it 'creates a charge for the customer', live: true do
|
117
|
-
stripe_helper.create_plan(id: 'silver', name: 'Silver Plan',
|
121
|
+
stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' },
|
122
|
+
amount: 4999)
|
118
123
|
|
119
124
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
120
125
|
Stripe::Subscription.create({ plan: 'silver', customer: customer.id, metadata: { foo: "bar", example: "yes" } })
|
@@ -125,7 +130,8 @@ shared_examples 'Customer Subscriptions' do
|
|
125
130
|
end
|
126
131
|
|
127
132
|
it 'contains coupon object', live: true do
|
128
|
-
plan = stripe_helper.create_plan(id: 'plan_with_coupon', name: 'One More Test Plan',
|
133
|
+
plan = stripe_helper.create_plan(id: 'plan_with_coupon', product: { name: 'One More Test Plan' },
|
134
|
+
amount: 777)
|
129
135
|
coupon = stripe_helper.create_coupon(id: 'free_coupon', duration: 'repeating', duration_in_months: 3)
|
130
136
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
131
137
|
Stripe::Subscription.create(plan: plan.id, customer: customer.id, coupon: coupon.id)
|
@@ -139,7 +145,8 @@ shared_examples 'Customer Subscriptions' do
|
|
139
145
|
end
|
140
146
|
|
141
147
|
it 'when coupon is not exist', live: true do
|
142
|
-
plan = stripe_helper.create_plan(id: 'plan_with_coupon', name: 'One More Test Plan',
|
148
|
+
plan = stripe_helper.create_plan(id: 'plan_with_coupon', product: { name: 'One More Test Plan' },
|
149
|
+
amount: 777)
|
143
150
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
144
151
|
|
145
152
|
expect { Stripe::Subscription.create(plan: plan.id, customer: customer.id, coupon: 'none') }.to raise_error {|e|
|
@@ -153,7 +160,9 @@ shared_examples 'Customer Subscriptions' do
|
|
153
160
|
Stripe::Plan.create(
|
154
161
|
:amount => 2500,
|
155
162
|
:interval => 'month',
|
156
|
-
:
|
163
|
+
:product => {
|
164
|
+
:name => 'Test plan'
|
165
|
+
},
|
157
166
|
:currency => 'usd',
|
158
167
|
:id => 'silver',
|
159
168
|
:statement_description => "testPlan"
|
@@ -169,7 +178,8 @@ shared_examples 'Customer Subscriptions' do
|
|
169
178
|
|
170
179
|
it "correctly sets created when it's not provided as a parameter", live: true do
|
171
180
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
172
|
-
plan = stripe_helper.create_plan(id: 'silver', name: 'Silver Plan'
|
181
|
+
plan = stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' },
|
182
|
+
amount: 4999, currency: 'usd')
|
173
183
|
subscription = Stripe::Subscription.create({ plan: 'silver', customer: customer.id })
|
174
184
|
|
175
185
|
expect(subscription.created).to eq(subscription.current_period_start)
|
@@ -177,7 +187,8 @@ shared_examples 'Customer Subscriptions' do
|
|
177
187
|
|
178
188
|
it "correctly sets created when it's provided as a parameter" do
|
179
189
|
customer = Stripe::Customer.create(source: gen_card_tk)
|
180
|
-
plan = stripe_helper.create_plan(id: 'silver', name: 'Silver Plan'
|
190
|
+
plan = stripe_helper.create_plan(id: 'silver', product: { name: 'Silver Plan' },
|
191
|
+
amount: 4999, currency: 'usd')
|
181
192
|
subscription = Stripe::Subscription.create({ plan: 'silver', customer: customer.id, created: 1473576318 })
|
182
193
|
|
183
194
|
expect(subscription.created).to eq(1473576318)
|
@@ -436,6 +447,8 @@ shared_examples 'Customer Subscriptions' do
|
|
436
447
|
expect(subscription.plan).to eq nil
|
437
448
|
expect(subscription.items.data[0].plan.id).to eq plan.id
|
438
449
|
expect(subscription.items.data[1].plan.id).to eq plan2.id
|
450
|
+
expect(subscription.items.data[0].quantity).to eq 1
|
451
|
+
expect(subscription.items.data[1].quantity).to eq 2
|
439
452
|
end
|
440
453
|
|
441
454
|
it 'when plan defined inside items for trials with no card', live: true do
|
@@ -569,7 +582,8 @@ shared_examples 'Customer Subscriptions' do
|
|
569
582
|
end
|
570
583
|
|
571
584
|
it 'when adds coupon', live: true do
|
572
|
-
plan = stripe_helper.create_plan(id: 'plan_with_coupon2', name: 'One More Test Plan',
|
585
|
+
plan = stripe_helper.create_plan(id: 'plan_with_coupon2', product: { name: 'One More Test Plan' },
|
586
|
+
amount: 777)
|
573
587
|
coupon = stripe_helper.create_coupon
|
574
588
|
customer = Stripe::Customer.create(source: gen_card_tk, plan: plan.id)
|
575
589
|
subscription = Stripe::Subscription.retrieve(customer.subscriptions.data.first.id)
|
@@ -583,7 +597,8 @@ shared_examples 'Customer Subscriptions' do
|
|
583
597
|
end
|
584
598
|
|
585
599
|
it 'when add not exist coupon' do
|
586
|
-
plan = stripe_helper.create_plan(id: 'plan_with_coupon3', name: 'One More Test Plan',
|
600
|
+
plan = stripe_helper.create_plan(id: 'plan_with_coupon3', product: { name: 'One More Test Plan' },
|
601
|
+
amount: 777)
|
587
602
|
customer = Stripe::Customer.create(source: gen_card_tk, plan: plan.id)
|
588
603
|
subscription = Stripe::Subscription.retrieve(customer.subscriptions.data.first.id)
|
589
604
|
|
@@ -598,7 +613,8 @@ shared_examples 'Customer Subscriptions' do
|
|
598
613
|
end
|
599
614
|
|
600
615
|
it 'when coupon is removed' do
|
601
|
-
plan = stripe_helper.create_plan(id: 'plan_with_coupon3', name: 'One More Test Plan',
|
616
|
+
plan = stripe_helper.create_plan(id: 'plan_with_coupon3', product: { name: 'One More Test Plan' },
|
617
|
+
amount: 777)
|
602
618
|
customer = Stripe::Customer.create(source: gen_card_tk, plan: plan.id)
|
603
619
|
coupon = stripe_helper.create_coupon
|
604
620
|
subscription = Stripe::Subscription.retrieve(customer.subscriptions.data.first.id)
|
@@ -962,10 +978,13 @@ shared_examples 'Customer Subscriptions' do
|
|
962
978
|
|
963
979
|
it "creates a stripe customer and subscribes them to a plan with meta data", :live => true do
|
964
980
|
|
965
|
-
stripe_helper.
|
981
|
+
stripe_helper.
|
982
|
+
create_plan(
|
966
983
|
:amount => 500,
|
967
984
|
:interval => 'month',
|
968
|
-
:
|
985
|
+
:product => {
|
986
|
+
:name => 'Sample Plan'
|
987
|
+
},
|
969
988
|
:currency => 'usd',
|
970
989
|
:id => 'Sample5'
|
971
990
|
)
|
@@ -2,24 +2,40 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
shared_examples 'Transfer API' do
|
4
4
|
|
5
|
-
it "creates a stripe transfer"
|
6
|
-
|
7
|
-
transfer = Stripe::Transfer.create(amount:
|
5
|
+
it "creates a stripe transfer" do
|
6
|
+
destination = Stripe::Account.create(email: "#{SecureRandom.uuid}@example.com", id: "acct_12345")
|
7
|
+
transfer = Stripe::Transfer.create(amount: 100, currency: "usd", destination: destination.id)
|
8
8
|
|
9
9
|
expect(transfer.id).to match /^test_tr/
|
10
|
-
expect(transfer.amount).to eq(
|
10
|
+
expect(transfer.amount).to eq(100)
|
11
|
+
expect(transfer.amount_reversed).to eq(0)
|
12
|
+
expect(transfer.balance_transaction).to eq('txn_2dyYXXP90MN26R')
|
13
|
+
expect(transfer.created).to eq(1304114826)
|
11
14
|
expect(transfer.currency).to eq('usd')
|
12
|
-
expect(transfer.
|
15
|
+
expect(transfer.description).to eq('Transfer description')
|
16
|
+
expect(transfer.destination).to eq('acct_12345')
|
17
|
+
expect(transfer.destination_payment).to eq("py_164xRvKbnvuxQXGuVFV2pZo1")
|
18
|
+
expect(transfer.livemode).to eq(false)
|
19
|
+
expect(transfer.metadata).to eq(Stripe::StripeObject.new)
|
20
|
+
expect(transfer.reversals).to eq(Stripe::ListObject.construct_from({
|
21
|
+
object: "list",
|
22
|
+
data: [],
|
23
|
+
total_count: 0,
|
24
|
+
has_more: false,
|
25
|
+
url: "/v1/transfers/#{transfer.id}/reversals"
|
26
|
+
}))
|
13
27
|
expect(transfer.reversed).to eq(false)
|
14
|
-
expect(transfer.
|
28
|
+
expect(transfer.source_transaction).to eq("ch_164xRv2eZvKYlo2Clu1sIJWB")
|
29
|
+
expect(transfer.source_type).to eq("card")
|
30
|
+
expect(transfer.transfer_group).to eq("group_ch_164xRv2eZvKYlo2Clu1sIJWB")
|
15
31
|
end
|
16
32
|
|
17
|
-
describe "listing transfers"
|
18
|
-
let(:
|
33
|
+
describe "listing transfers" do
|
34
|
+
let(:destination) { Stripe::Account.create(email: "#{SecureRandom.uuid}@example.com", business_name: "MyCo") }
|
19
35
|
|
20
36
|
before do
|
21
37
|
3.times do
|
22
|
-
Stripe::Transfer.create(amount: "100", currency: "usd",
|
38
|
+
Stripe::Transfer.create(amount: "100", currency: "usd", destination: destination.id)
|
23
39
|
end
|
24
40
|
end
|
25
41
|
|
@@ -31,27 +47,48 @@ shared_examples 'Transfer API' do
|
|
31
47
|
expect(Stripe::Transfer.all(limit: 2).count).to eq(2)
|
32
48
|
end
|
33
49
|
|
34
|
-
it "filters the search to a specific
|
35
|
-
|
36
|
-
Stripe::Transfer.create(amount: "100", currency: "usd",
|
50
|
+
it "filters the search to a specific destination" do
|
51
|
+
d2 = Stripe::Account.create(email: "#{SecureRandom.uuid}@example.com", business_name: "MyCo")
|
52
|
+
Stripe::Transfer.create(amount: "100", currency: "usd", destination: d2.id)
|
37
53
|
|
38
|
-
expect(Stripe::Transfer.all(
|
54
|
+
expect(Stripe::Transfer.all(destination: d2.id).count).to eq(1)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "disallows unknown parameters" do
|
58
|
+
expect { Stripe::Transfer.all(recipient: "foo") }.to raise_error {|e|
|
59
|
+
expect(e).to be_a Stripe::InvalidRequestError
|
60
|
+
expect(e.param).to eq("recipient")
|
61
|
+
expect(e.message).to eq("Received unknown parameter: recipient")
|
62
|
+
expect(e.http_status).to eq(400)
|
63
|
+
}
|
39
64
|
end
|
40
65
|
end
|
41
66
|
|
42
67
|
|
43
68
|
it "retrieves a stripe transfer" do
|
44
|
-
original = Stripe::Transfer.create(amount:
|
69
|
+
original = Stripe::Transfer.create(amount: "100", currency: "usd")
|
45
70
|
transfer = Stripe::Transfer.retrieve(original.id)
|
46
71
|
|
47
72
|
expect(transfer.id).to eq(original.id)
|
73
|
+
expect(transfer.object).to eq(original.object)
|
48
74
|
expect(transfer.amount).to eq(original.amount)
|
75
|
+
expect(transfer.amount_reversed).to eq(original.amount_reversed)
|
76
|
+
expect(transfer.balance_transaction).to eq(original.balance_transaction)
|
77
|
+
expect(transfer.created).to eq(original.created)
|
49
78
|
expect(transfer.currency).to eq(original.currency)
|
50
|
-
expect(transfer.
|
79
|
+
expect(transfer.description).to eq(original.description)
|
80
|
+
expect(transfer.destination).to eq(original.destination)
|
81
|
+
expect(transfer.destination_payment).to eq(original.destination_payment)
|
82
|
+
expect(transfer.livemode).to eq(original.livemode)
|
51
83
|
expect(transfer.metadata).to eq(original.metadata)
|
84
|
+
expect(transfer.reversals).to eq(original.reversals)
|
85
|
+
expect(transfer.reversed).to eq(original.reversed)
|
86
|
+
expect(transfer.source_transaction).to eq(original.source_transaction)
|
87
|
+
expect(transfer.source_type).to eq(original.source_type)
|
88
|
+
expect(transfer.transfer_group).to eq(original.transfer_group)
|
52
89
|
end
|
53
90
|
|
54
|
-
it "
|
91
|
+
it "cancels a stripe transfer" do
|
55
92
|
original = Stripe::Transfer.create(amount: "100", currency: "usd")
|
56
93
|
res, api_key = Stripe::StripeClient.active_client.execute_request(:post, "/v1/transfers/#{original.id}/cancel", api_key: 'api_key')
|
57
94
|
|
@@ -66,29 +103,23 @@ shared_examples 'Transfer API' do
|
|
66
103
|
}
|
67
104
|
end
|
68
105
|
|
69
|
-
it
|
70
|
-
|
71
|
-
type: 'individual',
|
72
|
-
name: 'Alex Smith',
|
73
|
-
})
|
106
|
+
it "when amount is not integer", live: true do
|
107
|
+
dest = Stripe::Account.create(type: "standard", email: "#{SecureRandom.uuid}@example.com", business_name: "Alex Smith")
|
74
108
|
expect { Stripe::Transfer.create(amount: '400.2',
|
75
|
-
|
76
|
-
|
77
|
-
|
109
|
+
currency: 'usd',
|
110
|
+
destination: dest.id,
|
111
|
+
description: 'Transfer for test@example.com') }.to raise_error { |e|
|
78
112
|
expect(e).to be_a Stripe::InvalidRequestError
|
79
113
|
expect(e.param).to eq('amount')
|
80
114
|
expect(e.http_status).to eq(400)
|
81
115
|
}
|
82
116
|
end
|
83
117
|
|
84
|
-
it
|
85
|
-
|
86
|
-
type: 'individual',
|
87
|
-
name: 'Alex Smith',
|
88
|
-
})
|
118
|
+
it "when amount is negative", live: true do
|
119
|
+
dest = Stripe::Account.create(type: "standard", email: "#{SecureRandom.uuid}@example.com", business_name: "Alex Smith")
|
89
120
|
expect { Stripe::Transfer.create(amount: '-400',
|
90
121
|
currency: 'usd',
|
91
|
-
|
122
|
+
destination: dest.id,
|
92
123
|
description: 'Transfer for test@example.com') }.to raise_error { |e|
|
93
124
|
expect(e).to be_a Stripe::InvalidRequestError
|
94
125
|
expect(e.param).to eq('amount')
|
@@ -29,6 +29,7 @@ def it_behaves_like_stripe(&block)
|
|
29
29
|
it_behaves_like 'Customer Subscriptions', &block
|
30
30
|
it_behaves_like 'Webhook Events API', &block
|
31
31
|
it_behaves_like 'Country Spec API', &block
|
32
|
+
it_behaves_like 'EphemeralKey API', &block
|
32
33
|
|
33
34
|
# Integration tests
|
34
35
|
it_behaves_like 'Multiple Customer Cards'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stripe-ruby-mock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.
|
4
|
+
version: 2.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gilbert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: stripe
|
@@ -144,6 +144,7 @@ files:
|
|
144
144
|
- lib/stripe_mock/request_handlers/coupons.rb
|
145
145
|
- lib/stripe_mock/request_handlers/customers.rb
|
146
146
|
- lib/stripe_mock/request_handlers/disputes.rb
|
147
|
+
- lib/stripe_mock/request_handlers/ephemeral_key.rb
|
147
148
|
- lib/stripe_mock/request_handlers/events.rb
|
148
149
|
- lib/stripe_mock/request_handlers/external_accounts.rb
|
149
150
|
- lib/stripe_mock/request_handlers/helpers/bank_account_helpers.rb
|
@@ -238,6 +239,7 @@ files:
|
|
238
239
|
- spec/shared_stripe_examples/coupon_examples.rb
|
239
240
|
- spec/shared_stripe_examples/customer_examples.rb
|
240
241
|
- spec/shared_stripe_examples/dispute_examples.rb
|
242
|
+
- spec/shared_stripe_examples/ephemeral_key_examples.rb
|
241
243
|
- spec/shared_stripe_examples/error_mock_examples.rb
|
242
244
|
- spec/shared_stripe_examples/external_account_examples.rb
|
243
245
|
- spec/shared_stripe_examples/extra_features_examples.rb
|
@@ -305,6 +307,7 @@ test_files:
|
|
305
307
|
- spec/shared_stripe_examples/coupon_examples.rb
|
306
308
|
- spec/shared_stripe_examples/customer_examples.rb
|
307
309
|
- spec/shared_stripe_examples/dispute_examples.rb
|
310
|
+
- spec/shared_stripe_examples/ephemeral_key_examples.rb
|
308
311
|
- spec/shared_stripe_examples/error_mock_examples.rb
|
309
312
|
- spec/shared_stripe_examples/external_account_examples.rb
|
310
313
|
- spec/shared_stripe_examples/extra_features_examples.rb
|