stripe-ruby-mock 2.5.6 → 3.1.0.rc2
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 +5 -5
- data/.gitignore +1 -1
- data/.travis.yml +6 -9
- data/CHANGELOG.md +35 -0
- data/Gemfile +1 -0
- data/README.md +17 -11
- data/lib/stripe_mock.rb +11 -0
- data/lib/stripe_mock/api/client.rb +1 -1
- data/lib/stripe_mock/api/errors.rb +34 -28
- data/lib/stripe_mock/api/instance.rb +1 -1
- data/lib/stripe_mock/api/webhooks.rb +7 -0
- data/lib/stripe_mock/client.rb +2 -1
- data/lib/stripe_mock/data.rb +323 -13
- data/lib/stripe_mock/data/list.rb +42 -9
- data/lib/stripe_mock/instance.rb +52 -5
- data/lib/stripe_mock/request_handlers/account_links.rb +15 -0
- data/lib/stripe_mock/request_handlers/balance_transactions.rb +2 -2
- data/lib/stripe_mock/request_handlers/charges.rb +13 -12
- data/lib/stripe_mock/request_handlers/checkout.rb +15 -0
- data/lib/stripe_mock/request_handlers/checkout_session.rb +16 -0
- data/lib/stripe_mock/request_handlers/customers.rb +35 -18
- data/lib/stripe_mock/request_handlers/ephemeral_key.rb +1 -1
- data/lib/stripe_mock/request_handlers/express_login_links.rb +15 -0
- data/lib/stripe_mock/request_handlers/helpers/coupon_helpers.rb +14 -10
- data/lib/stripe_mock/request_handlers/helpers/subscription_helpers.rb +22 -7
- data/lib/stripe_mock/request_handlers/helpers/token_helpers.rb +1 -1
- data/lib/stripe_mock/request_handlers/invoices.rb +11 -5
- data/lib/stripe_mock/request_handlers/payment_intents.rb +182 -0
- data/lib/stripe_mock/request_handlers/payment_methods.rb +120 -0
- data/lib/stripe_mock/request_handlers/plans.rb +1 -1
- data/lib/stripe_mock/request_handlers/prices.rb +44 -0
- data/lib/stripe_mock/request_handlers/products.rb +44 -0
- data/lib/stripe_mock/request_handlers/refunds.rb +6 -3
- data/lib/stripe_mock/request_handlers/setup_intents.rb +93 -0
- data/lib/stripe_mock/request_handlers/sources.rb +12 -6
- data/lib/stripe_mock/request_handlers/subscription_items.rb +36 -0
- data/lib/stripe_mock/request_handlers/subscriptions.rb +82 -41
- data/lib/stripe_mock/request_handlers/tax_rates.rb +36 -0
- data/lib/stripe_mock/request_handlers/tokens.rb +8 -6
- data/lib/stripe_mock/request_handlers/validators/param_validators.rb +130 -9
- data/lib/stripe_mock/test_strategies/base.rb +68 -8
- data/lib/stripe_mock/test_strategies/live.rb +23 -12
- data/lib/stripe_mock/test_strategies/mock.rb +6 -2
- data/lib/stripe_mock/version.rb +1 -1
- data/lib/stripe_mock/webhook_fixtures/balance.available.json +6 -0
- data/lib/stripe_mock/webhook_fixtures/charge.dispute.funds_reinstated.json +88 -0
- data/lib/stripe_mock/webhook_fixtures/charge.dispute.funds_withdrawn.json +88 -0
- data/lib/stripe_mock/webhook_fixtures/charge.failed.json +166 -38
- data/lib/stripe_mock/webhook_fixtures/customer.created.json +1 -0
- data/lib/stripe_mock/webhook_fixtures/customer.updated.json +1 -0
- data/lib/stripe_mock/webhook_fixtures/invoice.created.json +2 -1
- data/lib/stripe_mock/webhook_fixtures/invoice.payment_succeeded.json +1 -1
- data/lib/stripe_mock/webhook_fixtures/invoice.updated.json +2 -1
- data/lib/stripe_mock/webhook_fixtures/payment_intent.payment_failed.json +186 -0
- data/lib/stripe_mock/webhook_fixtures/payment_intent.succeeded.json +164 -0
- data/lib/stripe_mock/webhook_fixtures/product.created.json +34 -0
- data/lib/stripe_mock/webhook_fixtures/product.deleted.json +34 -0
- data/lib/stripe_mock/webhook_fixtures/product.updated.json +38 -0
- data/spec/instance_spec.rb +10 -12
- data/spec/list_spec.rb +38 -0
- data/spec/server_spec.rb +6 -3
- data/spec/shared_stripe_examples/account_examples.rb +1 -1
- data/spec/shared_stripe_examples/account_link_examples.rb +16 -0
- data/spec/shared_stripe_examples/balance_examples.rb +6 -0
- data/spec/shared_stripe_examples/balance_transaction_examples.rb +3 -3
- data/spec/shared_stripe_examples/bank_examples.rb +3 -3
- data/spec/shared_stripe_examples/card_examples.rb +4 -4
- data/spec/shared_stripe_examples/card_token_examples.rb +17 -21
- data/spec/shared_stripe_examples/charge_examples.rb +32 -36
- data/spec/shared_stripe_examples/checkout_examples.rb +38 -0
- data/spec/shared_stripe_examples/coupon_examples.rb +1 -1
- data/spec/shared_stripe_examples/customer_examples.rb +103 -53
- data/spec/shared_stripe_examples/dispute_examples.rb +2 -2
- data/spec/shared_stripe_examples/error_mock_examples.rb +8 -7
- data/spec/shared_stripe_examples/express_login_link_examples.rb +12 -0
- data/spec/shared_stripe_examples/external_account_examples.rb +3 -3
- data/spec/shared_stripe_examples/invoice_examples.rb +43 -41
- data/spec/shared_stripe_examples/invoice_item_examples.rb +1 -1
- data/spec/shared_stripe_examples/payment_intent_examples.rb +147 -0
- data/spec/shared_stripe_examples/payment_method_examples.rb +449 -0
- data/spec/shared_stripe_examples/payout_examples.rb +2 -2
- data/spec/shared_stripe_examples/plan_examples.rb +135 -77
- data/spec/shared_stripe_examples/price_examples.rb +183 -0
- data/spec/shared_stripe_examples/product_examples.rb +155 -0
- data/spec/shared_stripe_examples/refund_examples.rb +41 -31
- data/spec/shared_stripe_examples/setup_intent_examples.rb +68 -0
- data/spec/shared_stripe_examples/subscription_examples.rb +546 -295
- data/spec/shared_stripe_examples/subscription_items_examples.rb +76 -0
- data/spec/shared_stripe_examples/tax_rate_examples.rb +42 -0
- data/spec/shared_stripe_examples/transfer_examples.rb +9 -9
- data/spec/shared_stripe_examples/webhook_event_examples.rb +11 -11
- data/spec/spec_helper.rb +7 -4
- data/spec/stripe_mock_spec.rb +4 -4
- data/spec/support/shared_contexts/stripe_validator_spec.rb +8 -0
- data/spec/support/stripe_examples.rb +12 -2
- data/stripe-ruby-mock.gemspec +8 -3
- metadata +81 -32
@@ -0,0 +1,36 @@
|
|
1
|
+
module StripeMock
|
2
|
+
module RequestHandlers
|
3
|
+
module TaxRates
|
4
|
+
def TaxRates.included(klass)
|
5
|
+
klass.add_handler 'post /v1/tax_rates', :new_tax_rate
|
6
|
+
klass.add_handler 'post /v1/tax_rates/([^/]*)', :update_tax_rate
|
7
|
+
klass.add_handler 'get /v1/tax_rates/([^/]*)', :get_tax_rate
|
8
|
+
klass.add_handler 'get /v1/tax_rates', :list_tax_rates
|
9
|
+
end
|
10
|
+
|
11
|
+
def update_tax_rate(route, method_url, params, headers)
|
12
|
+
route =~ method_url
|
13
|
+
rate = assert_existence :tax_rate, $1, tax_rates[$1]
|
14
|
+
rate.merge!(params)
|
15
|
+
rate
|
16
|
+
end
|
17
|
+
|
18
|
+
def new_tax_rate(route, method_url, params, headers)
|
19
|
+
params[:id] ||= new_id('txr')
|
20
|
+
tax_rates[ params[:id] ] = Data.mock_tax_rate(params)
|
21
|
+
tax_rates[ params[:id] ]
|
22
|
+
end
|
23
|
+
|
24
|
+
def list_tax_rates(route, method_url, params, headers)
|
25
|
+
Data.mock_list_object(tax_rates.values, params)
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_tax_rate(route, method_url, params, headers)
|
29
|
+
route =~ method_url
|
30
|
+
tax_rate = assert_existence :tax_rate, $1, tax_rates[$1]
|
31
|
+
tax_rate.clone
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
@@ -8,6 +8,8 @@ module StripeMock
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def create_token(route, method_url, params, headers)
|
11
|
+
stripe_account = headers && headers[:stripe_account] || Stripe.api_key
|
12
|
+
|
11
13
|
if params[:customer].nil? && params[:card].nil? && params[:bank_account].nil?
|
12
14
|
raise Stripe::InvalidRequestError.new('You must supply either a card, customer, or bank account to create a token.', nil, http_status: 400)
|
13
15
|
end
|
@@ -15,13 +17,13 @@ module StripeMock
|
|
15
17
|
cus_id = params[:customer]
|
16
18
|
|
17
19
|
if cus_id && params[:source]
|
18
|
-
customer = assert_existence :customer, cus_id, customers[cus_id]
|
20
|
+
customer = assert_existence :customer, cus_id, customers[stripe_account][cus_id]
|
19
21
|
|
20
22
|
# params[:card] is an id; grab it from the db
|
21
23
|
customer_card = get_card(customer, params[:source])
|
22
24
|
assert_existence :card, params[:source], customer_card
|
23
25
|
elsif params[:card].is_a?(String)
|
24
|
-
customer = assert_existence :customer, cus_id, customers[cus_id]
|
26
|
+
customer = assert_existence :customer, cus_id, customers[stripe_account][cus_id]
|
25
27
|
|
26
28
|
# params[:card] is an id; grab it from the db
|
27
29
|
customer_card = get_card(customer, params[:card])
|
@@ -32,7 +34,7 @@ module StripeMock
|
|
32
34
|
params[:card][:last4] = params[:card][:number][-4,4]
|
33
35
|
customer_card = params[:card]
|
34
36
|
elsif params[:bank_account].is_a?(String)
|
35
|
-
customer = assert_existence :customer, cus_id, customers[cus_id]
|
37
|
+
customer = assert_existence :customer, cus_id, customers[stripe_account][cus_id]
|
36
38
|
|
37
39
|
# params[:bank_account] is an id; grab it from the db
|
38
40
|
bank_account = verify_bank_account(customer, params[:bank_account])
|
@@ -41,17 +43,17 @@ module StripeMock
|
|
41
43
|
# params[:card] is a hash of cc info; "Sanitize" the card number
|
42
44
|
bank_account = params[:bank_account]
|
43
45
|
else
|
44
|
-
customer = assert_existence :customer, cus_id, customers[cus_id]
|
46
|
+
customer = assert_existence :customer, cus_id, customers[stripe_account][cus_id] || customers[Stripe.api_key][cus_id]
|
45
47
|
customer_card = get_card(customer, customer[:default_source])
|
46
48
|
end
|
47
49
|
|
48
50
|
if bank_account
|
49
|
-
token_id = generate_bank_token(bank_account)
|
51
|
+
token_id = generate_bank_token(bank_account.dup)
|
50
52
|
bank_account = @bank_tokens[token_id]
|
51
53
|
|
52
54
|
Data.mock_bank_account_token(params.merge :id => token_id, :bank_account => bank_account)
|
53
55
|
else
|
54
|
-
token_id = generate_card_token(customer_card)
|
56
|
+
token_id = generate_card_token(customer_card.dup)
|
55
57
|
card = @card_tokens[token_id]
|
56
58
|
|
57
59
|
Data.mock_card_token(params.merge :id => token_id, :card => card)
|
@@ -2,26 +2,147 @@ module StripeMock
|
|
2
2
|
module RequestHandlers
|
3
3
|
module ParamValidators
|
4
4
|
|
5
|
-
def
|
5
|
+
def already_exists_message(obj_class)
|
6
|
+
"#{obj_class.to_s.split("::").last} already exists."
|
7
|
+
end
|
8
|
+
|
9
|
+
def not_found_message(obj_class, obj_id)
|
10
|
+
"No such #{obj_class.to_s.split("::").last.downcase}: #{obj_id}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def missing_param_message(attr_name)
|
14
|
+
"Missing required param: #{attr_name}."
|
15
|
+
end
|
16
|
+
|
17
|
+
def invalid_integer_message(my_val)
|
18
|
+
"Invalid integer: #{my_val}"
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
# ProductValidator
|
23
|
+
#
|
24
|
+
|
25
|
+
|
26
|
+
def validate_create_product_params(params)
|
6
27
|
params[:id] = params[:id].to_s
|
28
|
+
@base_strategy.create_product_params.keys.reject{ |k,_| k == :id }.each do |k|
|
29
|
+
raise Stripe::InvalidRequestError.new(missing_param_message(k), k) if params[k].nil?
|
30
|
+
end
|
31
|
+
|
32
|
+
if !%w[good service].include?(params[:type])
|
33
|
+
raise Stripe::InvalidRequestError.new("Invalid type: must be one of good or service", :type)
|
34
|
+
end
|
35
|
+
|
36
|
+
if products[ params[:id] ]
|
37
|
+
raise Stripe::InvalidRequestError.new(already_exists_message(Stripe::Product), :id)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# PlanValidator
|
43
|
+
#
|
44
|
+
|
45
|
+
def missing_plan_amount_message
|
46
|
+
"Plans require an `amount` parameter to be set."
|
47
|
+
end
|
48
|
+
|
49
|
+
SUPPORTED_PLAN_INTERVALS = ["month", "year", "week", "day"]
|
50
|
+
|
51
|
+
def invalid_plan_interval_message
|
52
|
+
"Invalid interval: must be one of day, month, week, or year"
|
53
|
+
end
|
54
|
+
|
55
|
+
SUPPORTED_CURRENCIES = [
|
56
|
+
"usd", "aed", "afn", "all", "amd", "ang", "aoa", "ars", "aud", "awg", "azn", "bam", "bbd", "bdt", "bgn",
|
57
|
+
"bif", "bmd", "bnd", "bob", "brl", "bsd", "bwp", "bzd", "cad", "cdf", "chf", "clp", "cny", "cop", "crc",
|
58
|
+
"cve", "czk", "djf", "dkk", "dop", "dzd", "egp", "etb", "eur", "fjd", "fkp", "gbp", "gel", "gip", "gmd",
|
59
|
+
"gnf", "gtq", "gyd", "hkd", "hnl", "hrk", "htg", "huf", "idr", "ils", "inr", "isk", "jmd", "jpy", "kes",
|
60
|
+
"kgs", "khr", "kmf", "krw", "kyd", "kzt", "lak", "lbp", "lkr", "lrd", "lsl", "mad", "mdl", "mga", "mkd",
|
61
|
+
"mmk", "mnt", "mop", "mro", "mur", "mvr", "mwk", "mxn", "myr", "mzn", "nad", "ngn", "nio", "nok", "npr",
|
62
|
+
"nzd", "pab", "pen", "pgk", "php", "pkr", "pln", "pyg", "qar", "ron", "rsd", "rub", "rwf", "sar", "sbd",
|
63
|
+
"scr", "sek", "sgd", "shp", "sll", "sos", "srd", "std", "szl", "thb", "tjs", "top", "try", "ttd", "twd",
|
64
|
+
"tzs", "uah", "ugx", "uyu", "uzs", "vnd", "vuv", "wst", "xaf", "xcd", "xof", "xpf", "yer", "zar", "zmw",
|
65
|
+
"eek", "lvl", "svc", "vef", "ltl"
|
66
|
+
]
|
67
|
+
|
68
|
+
def invalid_currency_message(my_val)
|
69
|
+
"Invalid currency: #{my_val.downcase}. Stripe currently supports these currencies: #{SUPPORTED_CURRENCIES.join(", ")}"
|
70
|
+
end
|
71
|
+
|
72
|
+
def validate_create_plan_params(params)
|
73
|
+
plan_id = params[:id].to_s
|
74
|
+
product_id = params[:product]
|
7
75
|
|
8
|
-
@base_strategy.create_plan_params.keys.each do |
|
76
|
+
@base_strategy.create_plan_params.keys.each do |attr_name|
|
9
77
|
message =
|
10
|
-
if
|
11
|
-
"Plans require an `#{
|
78
|
+
if attr_name == :amount
|
79
|
+
"Plans require an `#{attr_name}` parameter to be set."
|
12
80
|
else
|
13
|
-
"Missing required param: #{
|
81
|
+
"Missing required param: #{attr_name}."
|
14
82
|
end
|
15
|
-
raise Stripe::InvalidRequestError.new(message,
|
83
|
+
raise Stripe::InvalidRequestError.new(message, attr_name) if params[attr_name].nil?
|
84
|
+
end
|
85
|
+
|
86
|
+
if plans[plan_id]
|
87
|
+
message = already_exists_message(Stripe::Plan)
|
88
|
+
raise Stripe::InvalidRequestError.new(message, :id)
|
89
|
+
end
|
90
|
+
|
91
|
+
unless products[product_id]
|
92
|
+
message = not_found_message(Stripe::Product, product_id)
|
93
|
+
raise Stripe::InvalidRequestError.new(message, :product)
|
16
94
|
end
|
17
95
|
|
18
|
-
|
19
|
-
|
96
|
+
unless SUPPORTED_PLAN_INTERVALS.include?(params[:interval])
|
97
|
+
message = invalid_plan_interval_message
|
98
|
+
raise Stripe::InvalidRequestError.new(message, :interval)
|
99
|
+
end
|
100
|
+
|
101
|
+
unless SUPPORTED_CURRENCIES.include?(params[:currency])
|
102
|
+
message = invalid_currency_message(params[:currency])
|
103
|
+
raise Stripe::InvalidRequestError.new(message, :currency)
|
20
104
|
end
|
21
105
|
|
22
106
|
unless params[:amount].integer?
|
23
|
-
|
107
|
+
message = invalid_integer_message(params[:amount])
|
108
|
+
raise Stripe::InvalidRequestError.new(message, :amount)
|
24
109
|
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
def validate_create_price_params(params)
|
114
|
+
price_id = params[:id].to_s
|
115
|
+
product_id = params[:product]
|
116
|
+
|
117
|
+
@base_strategy.create_price_params.keys.each do |attr_name|
|
118
|
+
message = "Missing required param: #{attr_name}."
|
119
|
+
raise Stripe::InvalidRequestError.new(message, attr_name) if params[attr_name].nil?
|
120
|
+
end
|
121
|
+
|
122
|
+
if prices[price_id]
|
123
|
+
message = already_exists_message(Stripe::Price)
|
124
|
+
raise Stripe::InvalidRequestError.new(message, :id)
|
125
|
+
end
|
126
|
+
|
127
|
+
unless products[product_id]
|
128
|
+
message = not_found_message(Stripe::Product, product_id)
|
129
|
+
raise Stripe::InvalidRequestError.new(message, :product)
|
130
|
+
end
|
131
|
+
|
132
|
+
unless SUPPORTED_CURRENCIES.include?(params[:currency])
|
133
|
+
message = invalid_currency_message(params[:currency])
|
134
|
+
raise Stripe::InvalidRequestError.new(message, :currency)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def validate_list_prices_params(params)
|
139
|
+
if params[:lookup_keys] && !params[:lookup_keys].is_a?(Array)
|
140
|
+
raise Stripe::InvalidRequestError.new('Invalid array', :lookup_keys)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def require_param(param_name)
|
145
|
+
raise Stripe::InvalidRequestError.new("Missing required param: #{param_name}.", param_name.to_s, http_status: 400)
|
25
146
|
end
|
26
147
|
|
27
148
|
end
|
@@ -2,19 +2,60 @@ module StripeMock
|
|
2
2
|
module TestStrategies
|
3
3
|
class Base
|
4
4
|
|
5
|
+
def list_products(limit)
|
6
|
+
Stripe::Product.list(limit: limit)
|
7
|
+
end
|
8
|
+
|
9
|
+
def create_product(params = {})
|
10
|
+
Stripe::Product.create create_product_params(params)
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_product_params(params={})
|
14
|
+
{
|
15
|
+
:id => 'stripe_mock_default_product_id',
|
16
|
+
:name => 'Default Product',
|
17
|
+
:type => 'service'
|
18
|
+
}.merge(params)
|
19
|
+
end
|
20
|
+
|
21
|
+
def retrieve_product(product_id)
|
22
|
+
Stripe::Product.retrieve(product_id)
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
def list_plans(limit)
|
27
|
+
Stripe::Plan.list(limit: limit)
|
28
|
+
end
|
29
|
+
|
30
|
+
def create_plan(params={})
|
31
|
+
Stripe::Plan.create create_plan_params(params)
|
32
|
+
end
|
33
|
+
|
5
34
|
def create_plan_params(params={})
|
6
|
-
currency = params[:currency] || StripeMock.default_currency
|
7
35
|
{
|
8
36
|
:id => 'stripe_mock_default_plan_id',
|
9
|
-
:
|
10
|
-
|
11
|
-
|
12
|
-
:amount => 1337
|
13
|
-
:currency => currency,
|
14
|
-
:interval => 'month'
|
37
|
+
:interval => 'month',
|
38
|
+
:currency => StripeMock.default_currency,
|
39
|
+
:product => nil, # need to override yourself to pass validations
|
40
|
+
:amount => 1337
|
15
41
|
}.merge(params)
|
16
42
|
end
|
17
43
|
|
44
|
+
def create_price(params={})
|
45
|
+
Stripe::Price.create create_price_params(params)
|
46
|
+
end
|
47
|
+
|
48
|
+
def create_price_params(params={})
|
49
|
+
{
|
50
|
+
:currency => StripeMock.default_currency,
|
51
|
+
}.merge(params)
|
52
|
+
end
|
53
|
+
|
54
|
+
def list_subscriptions(limit)
|
55
|
+
Stripe::Subscription.list(limit: limit)
|
56
|
+
end
|
57
|
+
|
58
|
+
|
18
59
|
def generate_card_token(card_params={})
|
19
60
|
card_data = { :number => "4242424242424242", :exp_month => 9, :exp_year => (Time.now.year + 5), :cvc => "999", :tokenization_method => nil }
|
20
61
|
card = StripeMock::Util.card_merge(card_data, card_params)
|
@@ -40,6 +81,7 @@ module StripeMock
|
|
40
81
|
stripe_token.id
|
41
82
|
end
|
42
83
|
|
84
|
+
|
43
85
|
def create_coupon_params(params = {})
|
44
86
|
currency = params[:currency] || StripeMock.default_currency
|
45
87
|
{
|
@@ -64,18 +106,36 @@ module StripeMock
|
|
64
106
|
}.merge(params)
|
65
107
|
end
|
66
108
|
|
109
|
+
def create_checkout_session_params(params = {})
|
110
|
+
{
|
111
|
+
payment_method_types: ['card'],
|
112
|
+
line_items: [{
|
113
|
+
name: 'T-shirt',
|
114
|
+
quantity: 1,
|
115
|
+
amount: 500,
|
116
|
+
currency: 'usd',
|
117
|
+
}],
|
118
|
+
}.merge(params)
|
119
|
+
end
|
120
|
+
|
121
|
+
|
67
122
|
def create_coupon(params = {})
|
68
123
|
Stripe::Coupon.create create_coupon_params(params)
|
69
124
|
end
|
70
125
|
|
126
|
+
def create_checkout_session(params = {})
|
127
|
+
Stripe::Checkout::Session.create create_checkout_session_params(params)
|
128
|
+
end
|
129
|
+
|
71
130
|
def delete_all_coupons
|
72
|
-
coupons = Stripe::Coupon.
|
131
|
+
coupons = Stripe::Coupon.list
|
73
132
|
coupons.data.map(&:delete) if coupons.data.count > 0
|
74
133
|
end
|
75
134
|
|
76
135
|
def prepare_card_error
|
77
136
|
StripeMock.prepare_card_error(:card_error, :new_customer) if StripeMock.state == 'local'
|
78
137
|
end
|
138
|
+
|
79
139
|
end
|
80
140
|
end
|
81
141
|
end
|
@@ -2,6 +2,21 @@ module StripeMock
|
|
2
2
|
module TestStrategies
|
3
3
|
class Live < Base
|
4
4
|
|
5
|
+
def create_product(params={})
|
6
|
+
params = create_product_params(params)
|
7
|
+
raise "create_product requires an :id" if params[:id].nil?
|
8
|
+
delete_product(params[:id])
|
9
|
+
Stripe::Product.create params
|
10
|
+
end
|
11
|
+
|
12
|
+
def delete_product(product_id)
|
13
|
+
product = Stripe::Product.retrieve(product_id)
|
14
|
+
Stripe::Plan.list(product: product_id).each(&:delete) if product.type == 'service'
|
15
|
+
product.delete
|
16
|
+
rescue Stripe::StripeError => e
|
17
|
+
# do nothing
|
18
|
+
end
|
19
|
+
|
5
20
|
def create_plan(params={})
|
6
21
|
raise "create_plan requires an :id" if params[:id].nil?
|
7
22
|
delete_plan(params[:id])
|
@@ -9,12 +24,10 @@ module StripeMock
|
|
9
24
|
end
|
10
25
|
|
11
26
|
def delete_plan(plan_id)
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
# Do nothing; we just want to make sure this plan ceases to exists
|
17
|
-
end
|
27
|
+
plan = Stripe::Plan.retrieve(plan_id)
|
28
|
+
plan.delete
|
29
|
+
rescue Stripe::StripeError => e
|
30
|
+
# do nothing
|
18
31
|
end
|
19
32
|
|
20
33
|
def create_coupon(params={})
|
@@ -23,12 +36,10 @@ module StripeMock
|
|
23
36
|
end
|
24
37
|
|
25
38
|
def delete_coupon(id)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
# do nothing
|
31
|
-
end
|
39
|
+
coupon = Stripe::Coupon.retrieve(id)
|
40
|
+
coupon.delete
|
41
|
+
rescue Stripe::StripeError
|
42
|
+
# do nothing
|
32
43
|
end
|
33
44
|
|
34
45
|
def upsert_stripe_object(object, attributes)
|
@@ -2,8 +2,12 @@ module StripeMock
|
|
2
2
|
module TestStrategies
|
3
3
|
class Mock < Base
|
4
4
|
|
5
|
-
def
|
6
|
-
|
5
|
+
def delete_product(product_id)
|
6
|
+
if StripeMock.state == 'remote'
|
7
|
+
StripeMock.client.destroy_resource('products', product_id)
|
8
|
+
elsif StripeMock.state == 'local'
|
9
|
+
StripeMock.instance.products.delete(product_id)
|
10
|
+
end
|
7
11
|
end
|
8
12
|
|
9
13
|
def delete_plan(plan_id)
|
data/lib/stripe_mock/version.rb
CHANGED