stripe-ruby-mock 2.5.4 → 2.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|