stripe-ruby-mock 2.5.8 → 3.1.0.rc3
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 +41 -0
- data/Gemfile +1 -0
- data/README.md +17 -11
- data/lib/stripe_mock.rb +8 -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 +5 -0
- data/lib/stripe_mock/client.rb +2 -1
- data/lib/stripe_mock/data.rb +285 -16
- data/lib/stripe_mock/data/list.rb +42 -9
- data/lib/stripe_mock/instance.rb +18 -4
- 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 +6 -4
- data/lib/stripe_mock/request_handlers/checkout.rb +15 -0
- data/lib/stripe_mock/request_handlers/checkout_session.rb +22 -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 +5 -0
- data/lib/stripe_mock/request_handlers/helpers/subscription_helpers.rb +12 -7
- data/lib/stripe_mock/request_handlers/helpers/token_helpers.rb +1 -1
- data/lib/stripe_mock/request_handlers/invoices.rb +10 -4
- 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 +1 -0
- 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/subscriptions.rb +45 -22
- data/lib/stripe_mock/request_handlers/tokens.rb +6 -4
- data/lib/stripe_mock/request_handlers/validators/param_validators.rb +123 -9
- data/lib/stripe_mock/server.rb +2 -2
- data/lib/stripe_mock/test_strategies/base.rb +67 -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.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/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 +9 -22
- data/spec/shared_stripe_examples/checkout_examples.rb +47 -0
- data/spec/shared_stripe_examples/coupon_examples.rb +1 -1
- data/spec/shared_stripe_examples/customer_examples.rb +93 -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 +41 -39
- 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 -92
- data/spec/shared_stripe_examples/price_examples.rb +183 -0
- data/spec/shared_stripe_examples/product_examples.rb +147 -0
- data/spec/shared_stripe_examples/refund_examples.rb +25 -21
- data/spec/shared_stripe_examples/setup_intent_examples.rb +68 -0
- data/spec/shared_stripe_examples/subscription_examples.rb +430 -318
- data/spec/shared_stripe_examples/subscription_items_examples.rb +3 -2
- data/spec/shared_stripe_examples/transfer_examples.rb +6 -6
- 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 +9 -1
- data/stripe-ruby-mock.gemspec +8 -3
- metadata +72 -34
- data/spec/shared_stripe_examples/product_example.rb +0 -65
@@ -12,30 +12,35 @@ module StripeMock
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def create_source(route, method_url, params, headers)
|
15
|
+
stripe_account = headers && headers[:stripe_account] || Stripe.api_key
|
15
16
|
route =~ method_url
|
16
|
-
add_source_to(:customer, $1, params, customers)
|
17
|
+
add_source_to(:customer, $1, params, customers[stripe_account])
|
17
18
|
end
|
18
19
|
|
19
20
|
def retrieve_sources(route, method_url, params, headers)
|
21
|
+
stripe_account = headers && headers[:stripe_account] || Stripe.api_key
|
20
22
|
route =~ method_url
|
21
|
-
retrieve_object_cards(:customer, $1, customers)
|
23
|
+
retrieve_object_cards(:customer, $1, customers[stripe_account])
|
22
24
|
end
|
23
25
|
|
24
26
|
def retrieve_source(route, method_url, params, headers)
|
27
|
+
stripe_account = headers && headers[:stripe_account] || Stripe.api_key
|
25
28
|
route =~ method_url
|
26
|
-
customer = assert_existence :customer, $1, customers[$1]
|
29
|
+
customer = assert_existence :customer, $1, customers[stripe_account][$1]
|
27
30
|
|
28
31
|
assert_existence :card, $2, get_card(customer, $2)
|
29
32
|
end
|
30
33
|
|
31
34
|
def delete_source(route, method_url, params, headers)
|
35
|
+
stripe_account = headers && headers[:stripe_account] || Stripe.api_key
|
32
36
|
route =~ method_url
|
33
|
-
delete_card_from(:customer, $1, $2, customers)
|
37
|
+
delete_card_from(:customer, $1, $2, customers[stripe_account])
|
34
38
|
end
|
35
39
|
|
36
40
|
def update_source(route, method_url, params, headers)
|
41
|
+
stripe_account = headers && headers[:stripe_account] || Stripe.api_key
|
37
42
|
route =~ method_url
|
38
|
-
customer = assert_existence :customer, $1, customers[$1]
|
43
|
+
customer = assert_existence :customer, $1, customers[stripe_account][$1]
|
39
44
|
|
40
45
|
card = assert_existence :card, $2, get_card(customer, $2)
|
41
46
|
card.merge!(params)
|
@@ -43,8 +48,9 @@ module StripeMock
|
|
43
48
|
end
|
44
49
|
|
45
50
|
def verify_source(route, method_url, params, headers)
|
51
|
+
stripe_account = headers && headers[:stripe_account] || Stripe.api_key
|
46
52
|
route =~ method_url
|
47
|
-
customer = assert_existence :customer, $1, customers[$1]
|
53
|
+
customer = assert_existence :customer, $1, customers[stripe_account][$1]
|
48
54
|
|
49
55
|
bank_account = assert_existence :bank_account, $2, verify_bank_account(customer, $2)
|
50
56
|
bank_account
|
@@ -17,26 +17,29 @@ module StripeMock
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def retrieve_customer_subscription(route, method_url, params, headers)
|
20
|
+
stripe_account = headers && headers[:stripe_account] || Stripe.api_key
|
20
21
|
route =~ method_url
|
21
22
|
|
22
|
-
customer = assert_existence :customer, $1, customers[$1]
|
23
|
+
customer = assert_existence :customer, $1, customers[stripe_account][$1]
|
23
24
|
subscription = get_customer_subscription(customer, $2)
|
24
25
|
|
25
26
|
assert_existence :subscription, $2, subscription
|
26
27
|
end
|
27
28
|
|
28
29
|
def retrieve_customer_subscriptions(route, method_url, params, headers)
|
30
|
+
stripe_account = headers && headers[:stripe_account] || Stripe.api_key
|
29
31
|
route =~ method_url
|
30
32
|
|
31
|
-
customer = assert_existence :customer, $1, customers[$1]
|
33
|
+
customer = assert_existence :customer, $1, customers[stripe_account][$1]
|
32
34
|
customer[:subscriptions]
|
33
35
|
end
|
34
36
|
|
35
37
|
def create_customer_subscription(route, method_url, params, headers)
|
38
|
+
stripe_account = headers && headers[:stripe_account] || Stripe.api_key
|
36
39
|
route =~ method_url
|
37
40
|
|
38
41
|
subscription_plans = get_subscription_plans_from_params(params)
|
39
|
-
customer = assert_existence :customer, $1, customers[$1]
|
42
|
+
customer = assert_existence :customer, $1, customers[stripe_account][$1]
|
40
43
|
|
41
44
|
if params[:source]
|
42
45
|
new_card = get_card_by_token(params.delete(:source))
|
@@ -73,10 +76,10 @@ module StripeMock
|
|
73
76
|
end
|
74
77
|
|
75
78
|
def create_subscription(route, method_url, params, headers)
|
79
|
+
stripe_account = headers && headers[:stripe_account] || Stripe.api_key
|
76
80
|
if headers && headers[:idempotency_key]
|
77
81
|
if subscriptions.any?
|
78
82
|
original_subscription = subscriptions.values.find { |c| c[:idempotency_key] == headers[:idempotency_key]}
|
79
|
-
puts original_subscription
|
80
83
|
return subscriptions[original_subscription[:id]] if original_subscription
|
81
84
|
end
|
82
85
|
end
|
@@ -86,15 +89,7 @@ module StripeMock
|
|
86
89
|
|
87
90
|
customer = params[:customer]
|
88
91
|
customer_id = customer.is_a?(Stripe::Customer) ? customer[:id] : customer.to_s
|
89
|
-
customer = assert_existence :customer, customer_id, customers[customer_id]
|
90
|
-
|
91
|
-
if subscription_plans && customer
|
92
|
-
subscription_plans.each do |plan|
|
93
|
-
unless customer[:currency].to_s == plan[:currency].to_s
|
94
|
-
raise Stripe::InvalidRequestError.new("Customer's currency of #{customer[:currency]} does not match plan's currency of #{plan[:currency]}", 'currency', http_status: 400)
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
92
|
+
customer = assert_existence :customer, customer_id, customers[stripe_account][customer_id]
|
98
93
|
|
99
94
|
if params[:source]
|
100
95
|
new_card = get_card_by_token(params.delete(:source))
|
@@ -102,7 +97,7 @@ module StripeMock
|
|
102
97
|
customer[:default_source] = new_card[:id]
|
103
98
|
end
|
104
99
|
|
105
|
-
allowed_params = %w(customer application_fee_percent coupon items metadata plan quantity source tax_percent trial_end trial_period_days current_period_start created prorate billing_cycle_anchor billing days_until_due idempotency_key)
|
100
|
+
allowed_params = %w(customer application_fee_percent coupon items metadata plan quantity source tax_percent trial_end trial_period_days current_period_start created prorate billing_cycle_anchor billing days_until_due idempotency_key enable_incomplete_payments cancel_at_period_end default_tax_rates payment_behavior pending_invoice_item_interval default_payment_method collection_method off_session trial_from_plan expand)
|
106
101
|
unknown_params = params.keys - allowed_params.map(&:to_sym)
|
107
102
|
if unknown_params.length > 0
|
108
103
|
raise Stripe::InvalidRequestError.new("Received unknown parameter: #{unknown_params.join}", unknown_params.first.to_s, http_status: 400)
|
@@ -133,6 +128,15 @@ module StripeMock
|
|
133
128
|
end
|
134
129
|
end
|
135
130
|
|
131
|
+
if params[:trial_period_days]
|
132
|
+
subscription[:status] = 'trialing'
|
133
|
+
end
|
134
|
+
|
135
|
+
if params[:cancel_at_period_end]
|
136
|
+
subscription[:cancel_at_period_end] = true
|
137
|
+
subscription[:canceled_at] = Time.now.utc.to_i
|
138
|
+
end
|
139
|
+
|
136
140
|
subscriptions[subscription[:id]] = subscription
|
137
141
|
add_subscription_to_customer(customer, subscription)
|
138
142
|
|
@@ -146,14 +150,16 @@ module StripeMock
|
|
146
150
|
end
|
147
151
|
|
148
152
|
def retrieve_subscriptions(route, method_url, params, headers)
|
153
|
+
# stripe_account = headers && headers[:stripe_account] || Stripe.api_key
|
149
154
|
route =~ method_url
|
150
155
|
|
151
156
|
Data.mock_list_object(subscriptions.values, params)
|
152
|
-
#customer = assert_existence :customer, $1, customers[$1]
|
157
|
+
#customer = assert_existence :customer, $1, customers[stripe_account][$1]
|
153
158
|
#customer[:subscriptions]
|
154
159
|
end
|
155
160
|
|
156
161
|
def update_subscription(route, method_url, params, headers)
|
162
|
+
stripe_account = headers && headers[:stripe_account] || Stripe.api_key
|
157
163
|
route =~ method_url
|
158
164
|
|
159
165
|
subscription_id = $2 ? $2 : $1
|
@@ -161,7 +167,7 @@ module StripeMock
|
|
161
167
|
verify_active_status(subscription)
|
162
168
|
|
163
169
|
customer_id = subscription[:customer]
|
164
|
-
customer = assert_existence :customer, customer_id, customers[customer_id]
|
170
|
+
customer = assert_existence :customer, customer_id, customers[stripe_account][customer_id]
|
165
171
|
|
166
172
|
if params[:source]
|
167
173
|
new_card = get_card_by_token(params.delete(:source))
|
@@ -191,17 +197,28 @@ module StripeMock
|
|
191
197
|
raise Stripe::InvalidRequestError.new("No such coupon: #{coupon_id}", 'coupon', http_status: 400)
|
192
198
|
end
|
193
199
|
end
|
194
|
-
verify_card_present(customer, subscription_plans.first, subscription)
|
195
200
|
|
196
|
-
if
|
201
|
+
if params[:trial_period_days]
|
202
|
+
subscription[:status] = 'trialing'
|
203
|
+
end
|
204
|
+
|
205
|
+
if params[:cancel_at_period_end]
|
206
|
+
subscription[:cancel_at_period_end] = true
|
207
|
+
subscription[:canceled_at] = Time.now.utc.to_i
|
208
|
+
elsif params.has_key?(:cancel_at_period_end)
|
197
209
|
subscription[:cancel_at_period_end] = false
|
198
210
|
subscription[:canceled_at] = nil
|
199
211
|
end
|
200
212
|
|
201
213
|
params[:current_period_start] = subscription[:current_period_start]
|
202
214
|
params[:trial_end] = params[:trial_end] || subscription[:trial_end]
|
215
|
+
|
216
|
+
plan_amount_was = subscription.dig(:plan, :amount)
|
217
|
+
|
203
218
|
subscription = resolve_subscription_changes(subscription, subscription_plans, customer, params)
|
204
219
|
|
220
|
+
verify_card_present(customer, subscription_plans.first, subscription, params) if plan_amount_was == 0 && subscription.dig(:plan, :amount) && subscription.dig(:plan, :amount) > 0
|
221
|
+
|
205
222
|
# delete the old subscription, replace with the new subscription
|
206
223
|
customer[:subscriptions][:data].reject! { |sub| sub[:id] == subscription[:id] }
|
207
224
|
customer[:subscriptions][:data] << subscription
|
@@ -210,13 +227,14 @@ module StripeMock
|
|
210
227
|
end
|
211
228
|
|
212
229
|
def cancel_subscription(route, method_url, params, headers)
|
230
|
+
stripe_account = headers && headers[:stripe_account] || Stripe.api_key
|
213
231
|
route =~ method_url
|
214
232
|
|
215
233
|
subscription_id = $2 ? $2 : $1
|
216
234
|
subscription = assert_existence :subscription, subscription_id, subscriptions[subscription_id]
|
217
235
|
|
218
236
|
customer_id = subscription[:customer]
|
219
|
-
customer = assert_existence :customer, customer_id, customers[customer_id]
|
237
|
+
customer = assert_existence :customer, customer_id, customers[stripe_account][customer_id]
|
220
238
|
|
221
239
|
cancel_params = { canceled_at: Time.now.utc.to_i }
|
222
240
|
cancelled_at_period_end = (params[:at_period_end] == true)
|
@@ -245,14 +263,17 @@ module StripeMock
|
|
245
263
|
elsif params[:items]
|
246
264
|
items = params[:items]
|
247
265
|
items = items.values if items.respond_to?(:values)
|
248
|
-
items.map { |item| item[:plan]
|
266
|
+
items.map { |item| item[:plan] ? item[:plan] : item[:price] }
|
249
267
|
else
|
250
268
|
[]
|
251
269
|
end
|
270
|
+
plan_ids.compact!
|
252
271
|
plan_ids.each do |plan_id|
|
253
272
|
assert_existence :plan, plan_id, plans[plan_id]
|
273
|
+
rescue Stripe::InvalidRequestError
|
274
|
+
assert_existence :price, plan_id, prices[plan_id]
|
254
275
|
end
|
255
|
-
plan_ids.map { |plan_id| plans[plan_id] }
|
276
|
+
plan_ids.map { |plan_id| plans[plan_id] || prices[plan_id]}
|
256
277
|
end
|
257
278
|
|
258
279
|
# Ensure customer has card to charge unless one of the following criterias is met:
|
@@ -261,8 +282,10 @@ module StripeMock
|
|
261
282
|
# 3) has billing set to send invoice
|
262
283
|
def verify_card_present(customer, plan, subscription, params={})
|
263
284
|
return if customer[:default_source]
|
285
|
+
return if customer[:invoice_settings][:default_payment_method]
|
264
286
|
return if customer[:trial_end]
|
265
287
|
return if params[:trial_end]
|
288
|
+
return if subscription[:default_payment_method]
|
266
289
|
|
267
290
|
plan_trial_period_days = plan[:trial_period_days] || 0
|
268
291
|
plan_has_trial = plan_trial_period_days != 0 || plan[:amount] == 0 || plan[:trial_end]
|
@@ -281,7 +304,7 @@ module StripeMock
|
|
281
304
|
|
282
305
|
return if params[:billing] == 'send_invoice'
|
283
306
|
|
284
|
-
raise Stripe::InvalidRequestError.new('
|
307
|
+
raise Stripe::InvalidRequestError.new('This customer has no attached payment source', nil, http_status: 400)
|
285
308
|
end
|
286
309
|
|
287
310
|
def verify_active_status(subscription)
|
@@ -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,7 +43,7 @@ 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
|
|
@@ -2,31 +2,145 @@ 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 products[ params[:id] ]
|
33
|
+
raise Stripe::InvalidRequestError.new(already_exists_message(Stripe::Product), :id)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
#
|
38
|
+
# PlanValidator
|
39
|
+
#
|
40
|
+
|
41
|
+
def missing_plan_amount_message
|
42
|
+
"Plans require an `amount` parameter to be set."
|
43
|
+
end
|
44
|
+
|
45
|
+
SUPPORTED_PLAN_INTERVALS = ["month", "year", "week", "day"]
|
46
|
+
|
47
|
+
def invalid_plan_interval_message
|
48
|
+
"Invalid interval: must be one of day, month, week, or year"
|
49
|
+
end
|
50
|
+
|
51
|
+
SUPPORTED_CURRENCIES = [
|
52
|
+
"usd", "aed", "afn", "all", "amd", "ang", "aoa", "ars", "aud", "awg", "azn", "bam", "bbd", "bdt", "bgn",
|
53
|
+
"bif", "bmd", "bnd", "bob", "brl", "bsd", "bwp", "bzd", "cad", "cdf", "chf", "clp", "cny", "cop", "crc",
|
54
|
+
"cve", "czk", "djf", "dkk", "dop", "dzd", "egp", "etb", "eur", "fjd", "fkp", "gbp", "gel", "gip", "gmd",
|
55
|
+
"gnf", "gtq", "gyd", "hkd", "hnl", "hrk", "htg", "huf", "idr", "ils", "inr", "isk", "jmd", "jpy", "kes",
|
56
|
+
"kgs", "khr", "kmf", "krw", "kyd", "kzt", "lak", "lbp", "lkr", "lrd", "lsl", "mad", "mdl", "mga", "mkd",
|
57
|
+
"mmk", "mnt", "mop", "mro", "mur", "mvr", "mwk", "mxn", "myr", "mzn", "nad", "ngn", "nio", "nok", "npr",
|
58
|
+
"nzd", "pab", "pen", "pgk", "php", "pkr", "pln", "pyg", "qar", "ron", "rsd", "rub", "rwf", "sar", "sbd",
|
59
|
+
"scr", "sek", "sgd", "shp", "sll", "sos", "srd", "std", "szl", "thb", "tjs", "top", "try", "ttd", "twd",
|
60
|
+
"tzs", "uah", "ugx", "uyu", "uzs", "vnd", "vuv", "wst", "xaf", "xcd", "xof", "xpf", "yer", "zar", "zmw",
|
61
|
+
"eek", "lvl", "svc", "vef", "ltl"
|
62
|
+
]
|
63
|
+
|
64
|
+
def invalid_currency_message(my_val)
|
65
|
+
"Invalid currency: #{my_val.downcase}. Stripe currently supports these currencies: #{SUPPORTED_CURRENCIES.join(", ")}"
|
66
|
+
end
|
7
67
|
|
8
|
-
|
68
|
+
def validate_create_plan_params(params)
|
69
|
+
plan_id = params[:id].to_s
|
70
|
+
product_id = params[:product]
|
71
|
+
|
72
|
+
@base_strategy.create_plan_params.keys.each do |attr_name|
|
9
73
|
message =
|
10
|
-
if
|
11
|
-
"Plans require an `#{
|
74
|
+
if attr_name == :amount
|
75
|
+
"Plans require an `#{attr_name}` parameter to be set."
|
12
76
|
else
|
13
|
-
"Missing required param: #{
|
77
|
+
"Missing required param: #{attr_name}."
|
14
78
|
end
|
15
|
-
raise Stripe::InvalidRequestError.new(message,
|
79
|
+
raise Stripe::InvalidRequestError.new(message, attr_name) if params[attr_name].nil?
|
80
|
+
end
|
81
|
+
|
82
|
+
if plans[plan_id]
|
83
|
+
message = already_exists_message(Stripe::Plan)
|
84
|
+
raise Stripe::InvalidRequestError.new(message, :id)
|
85
|
+
end
|
86
|
+
|
87
|
+
unless products[product_id]
|
88
|
+
message = not_found_message(Stripe::Product, product_id)
|
89
|
+
raise Stripe::InvalidRequestError.new(message, :product)
|
16
90
|
end
|
17
91
|
|
18
|
-
|
19
|
-
|
92
|
+
unless SUPPORTED_PLAN_INTERVALS.include?(params[:interval])
|
93
|
+
message = invalid_plan_interval_message
|
94
|
+
raise Stripe::InvalidRequestError.new(message, :interval)
|
95
|
+
end
|
96
|
+
|
97
|
+
unless SUPPORTED_CURRENCIES.include?(params[:currency])
|
98
|
+
message = invalid_currency_message(params[:currency])
|
99
|
+
raise Stripe::InvalidRequestError.new(message, :currency)
|
20
100
|
end
|
21
101
|
|
22
102
|
unless params[:amount].integer?
|
23
|
-
|
103
|
+
message = invalid_integer_message(params[:amount])
|
104
|
+
raise Stripe::InvalidRequestError.new(message, :amount)
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
def validate_create_price_params(params)
|
110
|
+
price_id = params[:id].to_s
|
111
|
+
product_id = params[:product]
|
112
|
+
|
113
|
+
@base_strategy.create_price_params.keys.each do |attr_name|
|
114
|
+
message = "Missing required param: #{attr_name}."
|
115
|
+
raise Stripe::InvalidRequestError.new(message, attr_name) if params[attr_name].nil?
|
116
|
+
end
|
117
|
+
|
118
|
+
if prices[price_id]
|
119
|
+
message = already_exists_message(Stripe::Price)
|
120
|
+
raise Stripe::InvalidRequestError.new(message, :id)
|
121
|
+
end
|
122
|
+
|
123
|
+
unless products[product_id]
|
124
|
+
message = not_found_message(Stripe::Product, product_id)
|
125
|
+
raise Stripe::InvalidRequestError.new(message, :product)
|
126
|
+
end
|
127
|
+
|
128
|
+
unless SUPPORTED_CURRENCIES.include?(params[:currency])
|
129
|
+
message = invalid_currency_message(params[:currency])
|
130
|
+
raise Stripe::InvalidRequestError.new(message, :currency)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def validate_list_prices_params(params)
|
135
|
+
if params[:lookup_keys] && !params[:lookup_keys].is_a?(Array)
|
136
|
+
raise Stripe::InvalidRequestError.new('Invalid array', :lookup_keys)
|
24
137
|
end
|
25
138
|
end
|
26
139
|
|
27
140
|
def require_param(param_name)
|
28
141
|
raise Stripe::InvalidRequestError.new("Missing required param: #{param_name}.", param_name.to_s, http_status: 400)
|
29
142
|
end
|
143
|
+
|
30
144
|
end
|
31
145
|
end
|
32
146
|
end
|
data/lib/stripe_mock/server.rb
CHANGED
@@ -16,9 +16,9 @@ module StripeMock
|
|
16
16
|
self.clear_data
|
17
17
|
end
|
18
18
|
|
19
|
-
def mock_request(*args)
|
19
|
+
def mock_request(*args, **kwargs)
|
20
20
|
begin
|
21
|
-
@instance.mock_request(*args)
|
21
|
+
@instance.mock_request(*args, **kwargs)
|
22
22
|
rescue Stripe::InvalidRequestError => e
|
23
23
|
{
|
24
24
|
:error_raised => 'invalid_request',
|