stripe-ruby-mock 2.4.1 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +6 -4
- data/README.md +10 -4
- data/lib/stripe_mock/api/client.rb +3 -3
- data/lib/stripe_mock/api/errors.rb +25 -14
- data/lib/stripe_mock/api/instance.rb +4 -4
- data/lib/stripe_mock/api/webhooks.rb +1 -1
- data/lib/stripe_mock/client.rb +2 -2
- data/lib/stripe_mock/data.rb +51 -26
- data/lib/stripe_mock/instance.rb +7 -3
- data/lib/stripe_mock/request_handlers/charges.rb +6 -6
- data/lib/stripe_mock/request_handlers/coupons.rb +3 -2
- data/lib/stripe_mock/request_handlers/customers.rb +16 -7
- data/lib/stripe_mock/request_handlers/helpers/card_helpers.rb +2 -2
- data/lib/stripe_mock/request_handlers/helpers/coupon_helpers.rb +6 -1
- data/lib/stripe_mock/request_handlers/helpers/subscription_helpers.rb +5 -5
- data/lib/stripe_mock/request_handlers/helpers/token_helpers.rb +2 -2
- data/lib/stripe_mock/request_handlers/invoices.rb +63 -11
- data/lib/stripe_mock/request_handlers/orders.rb +4 -4
- data/lib/stripe_mock/request_handlers/refunds.rb +3 -3
- data/lib/stripe_mock/request_handlers/subscriptions.rb +8 -8
- data/lib/stripe_mock/request_handlers/tokens.rb +1 -1
- data/lib/stripe_mock/request_handlers/transfers.rb +1 -1
- data/lib/stripe_mock/server.rb +1 -1
- data/lib/stripe_mock/version.rb +1 -1
- data/spec/instance_spec.rb +4 -4
- data/spec/integration_examples/prepare_error_examples.rb +6 -6
- data/spec/readme_spec.rb +2 -0
- data/spec/server_spec.rb +2 -2
- data/spec/shared_stripe_examples/card_examples.rb +3 -3
- data/spec/shared_stripe_examples/coupon_examples.rb +6 -0
- data/spec/shared_stripe_examples/customer_examples.rb +31 -3
- data/spec/shared_stripe_examples/dispute_examples.rb +9 -8
- data/spec/shared_stripe_examples/error_mock_examples.rb +3 -3
- data/spec/shared_stripe_examples/extra_features_examples.rb +2 -0
- data/spec/shared_stripe_examples/invoice_examples.rb +232 -48
- data/spec/shared_stripe_examples/recipient_examples.rb +7 -7
- data/spec/shared_stripe_examples/subscription_examples.rb +52 -16
- data/spec/shared_stripe_examples/transfer_examples.rb +8 -6
- data/spec/shared_stripe_examples/webhook_event_examples.rb +3 -3
- data/spec/spec_helper.rb +6 -5
- data/spec/stripe_mock_spec.rb +3 -3
- data/stripe-ruby-mock.gemspec +1 -1
- metadata +4 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce6d1ae38721fc9f43fa69e3d82217593b0789d9
|
4
|
+
data.tar.gz: abbbfb0dd70438e23ac276215602a3d3a77705b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49d92a3efee46c78cd157fd84de5e8eb456b6686b06c00a23262648395b0dd2cb647620304de703e52e5919102ce6c782a4947b50c39aef90428a02af9cfe9b0
|
7
|
+
data.tar.gz: c87d09dd495bdca773e0ea39169f04900e7467f315f220ca556d907e9c0f294ddad399a73c2765e27e9ebe319b42f1b68b9ef825a02707c4877096777154a8c4
|
data/.travis.yml
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
dist: trusty
|
2
|
+
group: deprecated-2017Q2
|
2
3
|
sudo: required
|
3
4
|
language: ruby
|
4
5
|
rvm:
|
5
|
-
- 1.9.3
|
6
6
|
- 2.0.0
|
7
|
-
- 2.1.
|
7
|
+
- 2.1.10
|
8
|
+
- 2.2.7
|
9
|
+
- 2.3.4
|
8
10
|
before_install:
|
9
|
-
- rvm 1.
|
11
|
+
- rvm 2.1.10 do gem install mime-types -v 2.6.2
|
10
12
|
- gem install bundler
|
11
13
|
before_script:
|
12
14
|
- "sudo touch /var/log/stripe-mock-server.log"
|
@@ -15,7 +17,7 @@ script: "bundle exec rspec && bundle exec rspec -t live"
|
|
15
17
|
|
16
18
|
env:
|
17
19
|
global:
|
18
|
-
- IS_TRAVIS=true STRIPE_TEST_SECRET_KEY_A=sk_test_sXdhUWu3NhrB7r1tkK0zZfMW STRIPE_TEST_SECRET_KEY_B=
|
20
|
+
- IS_TRAVIS=true STRIPE_TEST_SECRET_KEY_A=sk_test_sXdhUWu3NhrB7r1tkK0zZfMW STRIPE_TEST_SECRET_KEY_B=sk_test_uPfIX9ziFNloXwtSdDPJTdnh STRIPE_TEST_SECRET_KEY_C=sk_test_waSy1TaP2RNEpoz9t2pFCysm STRIPE_TEST_SECRET_KEY_D=sk_test_Z1mQZNehRFmI3EN9mHnMafnq
|
19
21
|
|
20
22
|
notifications:
|
21
23
|
webhooks:
|
data/README.md
CHANGED
@@ -12,7 +12,7 @@ This gem has unexpectedly grown in popularity and I've gotten pretty busy, so I'
|
|
12
12
|
|
13
13
|
In your gemfile:
|
14
14
|
|
15
|
-
gem 'stripe-ruby-mock', '~> 2.
|
15
|
+
gem 'stripe-ruby-mock', '~> 2.5.0', :require => 'stripe_mock'
|
16
16
|
|
17
17
|
## Features
|
18
18
|
|
@@ -21,12 +21,18 @@ In your gemfile:
|
|
21
21
|
* Mock and customize stripe webhooks
|
22
22
|
* Flip a switch to run your tests against Stripe's **live test servers**
|
23
23
|
|
24
|
+
### Requirements
|
25
|
+
|
26
|
+
* ruby >= 2.0.0
|
27
|
+
* stripe >= 2.0.3
|
28
|
+
|
24
29
|
### Specifications
|
25
30
|
|
26
|
-
**STRIPE API TARGET VERSION:**
|
31
|
+
**STRIPE API TARGET VERSION:** 2017-06-05 (master)
|
27
32
|
|
28
33
|
Older API version branches:
|
29
34
|
|
35
|
+
- api-2015-09-08 - use gem version 2.4.1
|
30
36
|
- [api-2014-06-17](https://github.com/rebelidealist/stripe-ruby-mock/tree/api-2014-06-17)
|
31
37
|
|
32
38
|
### Versioning System
|
@@ -294,9 +300,9 @@ it "mocks a stripe webhook" do
|
|
294
300
|
end
|
295
301
|
|
296
302
|
it "mocks stripe connect webhooks" do
|
297
|
-
event = StripeMock.mock_webhook_event('customer.created',
|
303
|
+
event = StripeMock.mock_webhook_event('customer.created', account: 'acc_123123')
|
298
304
|
|
299
|
-
expect(event.
|
305
|
+
expect(event.account).to eq('acc_123123')
|
300
306
|
end
|
301
307
|
```
|
302
308
|
|
@@ -8,7 +8,7 @@ module StripeMock
|
|
8
8
|
return false if @state == 'live'
|
9
9
|
return @client unless @client.nil?
|
10
10
|
|
11
|
-
alias_stripe_method :
|
11
|
+
alias_stripe_method :execute_request, StripeMock.method(:redirect_to_mock_server)
|
12
12
|
@client = StripeMock::Client.new(port)
|
13
13
|
@state = 'remote'
|
14
14
|
@client
|
@@ -27,7 +27,7 @@ module StripeMock
|
|
27
27
|
|
28
28
|
private
|
29
29
|
|
30
|
-
def self.redirect_to_mock_server(method, url, api_key, params
|
30
|
+
def self.redirect_to_mock_server(method, url, api_key: nil, api_base: nil, params: {}, headers: {})
|
31
31
|
handler = Instance.handler_for_method_url("#{method} #{url}")
|
32
32
|
|
33
33
|
if mock_error = client.error_queue.error_for_handler_name(handler[:name])
|
@@ -35,7 +35,7 @@ module StripeMock
|
|
35
35
|
raise mock_error
|
36
36
|
end
|
37
37
|
|
38
|
-
Stripe::Util.symbolize_names client.mock_request(method, url, api_key, params, headers)
|
38
|
+
Stripe::Util.symbolize_names client.mock_request(method, url, api_key: api_key, params: params, headers: headers)
|
39
39
|
end
|
40
40
|
|
41
41
|
end
|
@@ -24,29 +24,40 @@ module StripeMock
|
|
24
24
|
|
25
25
|
def self.argument_map
|
26
26
|
@__map ||= {
|
27
|
-
incorrect_number: add_json_body(["The card number is incorrect", 'number', 'incorrect_number', 402]),
|
28
|
-
invalid_number: add_json_body(["The card number is not a valid credit card number", 'number', 'invalid_number', 402]),
|
29
|
-
invalid_expiry_month: add_json_body(["The card's expiration month is invalid", 'exp_month', 'invalid_expiry_month', 402]),
|
30
|
-
invalid_expiry_year: add_json_body(["The card's expiration year is invalid", 'exp_year', 'invalid_expiry_year', 402]),
|
31
|
-
invalid_cvc: add_json_body(["The card's security code is invalid", 'cvc', 'invalid_cvc', 402]),
|
32
|
-
expired_card: add_json_body(["The card has expired", 'exp_month', 'expired_card', 402]),
|
33
|
-
incorrect_cvc: add_json_body(["The card's security code is incorrect", 'cvc', 'incorrect_cvc', 402]),
|
34
|
-
card_declined: add_json_body(["The card was declined", nil, 'card_declined', 402]),
|
35
|
-
missing: add_json_body(["There is no card on a customer that is being charged.", nil, 'missing', 402]),
|
36
|
-
processing_error: add_json_body(["An error occurred while processing the card", nil, 'processing_error', 402]),
|
37
|
-
card_error: add_json_body(['The card number is not a valid credit card number.', 'number', 'invalid_number', 402]),
|
38
|
-
incorrect_zip: add_json_body(['The zip code you supplied failed validation.', 'address_zip', 'incorrect_zip', 402])
|
27
|
+
incorrect_number: add_json_body(["The card number is incorrect", 'number', 'incorrect_number', http_status: 402]),
|
28
|
+
invalid_number: add_json_body(["The card number is not a valid credit card number", 'number', 'invalid_number', http_status: 402]),
|
29
|
+
invalid_expiry_month: add_json_body(["The card's expiration month is invalid", 'exp_month', 'invalid_expiry_month', http_status: 402]),
|
30
|
+
invalid_expiry_year: add_json_body(["The card's expiration year is invalid", 'exp_year', 'invalid_expiry_year', http_status: 402]),
|
31
|
+
invalid_cvc: add_json_body(["The card's security code is invalid", 'cvc', 'invalid_cvc', http_status: 402]),
|
32
|
+
expired_card: add_json_body(["The card has expired", 'exp_month', 'expired_card', http_status: 402]),
|
33
|
+
incorrect_cvc: add_json_body(["The card's security code is incorrect", 'cvc', 'incorrect_cvc', http_status: 402]),
|
34
|
+
card_declined: add_json_body(["The card was declined", nil, 'card_declined', http_status: 402]),
|
35
|
+
missing: add_json_body(["There is no card on a customer that is being charged.", nil, 'missing', http_status: 402]),
|
36
|
+
processing_error: add_json_body(["An error occurred while processing the card", nil, 'processing_error', http_status: 402]),
|
37
|
+
card_error: add_json_body(['The card number is not a valid credit card number.', 'number', 'invalid_number', http_status: 402]),
|
38
|
+
incorrect_zip: add_json_body(['The zip code you supplied failed validation.', 'address_zip', 'incorrect_zip', http_status: 402])
|
39
39
|
}
|
40
40
|
end
|
41
41
|
|
42
|
+
def self.get_decline_code(code)
|
43
|
+
decline_code_map = {
|
44
|
+
card_declined: 'do_not_honor',
|
45
|
+
missing: nil
|
46
|
+
}
|
47
|
+
decline_code_map.default = code.to_s
|
48
|
+
|
49
|
+
code_key = code.to_sym
|
50
|
+
decline_code_map[code_key]
|
51
|
+
end
|
52
|
+
|
42
53
|
def self.add_json_body(error_values)
|
43
54
|
error_keys = [:message, :param, :code]
|
44
55
|
|
45
56
|
json_hash = Hash[error_keys.zip error_values]
|
46
57
|
json_hash[:type] = 'card_error'
|
58
|
+
json_hash[:decline_code] = get_decline_code(json_hash[:code])
|
47
59
|
|
48
|
-
error_values.
|
49
|
-
error_values.push(error: json_hash) # json_body
|
60
|
+
error_values.last.merge!(json_body: { error: json_hash }, http_body: { error: json_hash })
|
50
61
|
|
51
62
|
error_values
|
52
63
|
end
|
@@ -2,18 +2,18 @@ module StripeMock
|
|
2
2
|
|
3
3
|
@state = 'ready'
|
4
4
|
@instance = nil
|
5
|
-
@original_request_method = Stripe.method(:
|
5
|
+
@original_request_method = Stripe::StripeClient.active_client.method(:execute_request)
|
6
6
|
|
7
7
|
def self.start
|
8
8
|
return false if @state == 'live'
|
9
9
|
@instance = Instance.new
|
10
|
-
alias_stripe_method :
|
10
|
+
alias_stripe_method :execute_request, @instance.method(:mock_request)
|
11
11
|
@state = 'local'
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.stop
|
15
15
|
return unless @state == 'local'
|
16
|
-
alias_stripe_method :
|
16
|
+
alias_stripe_method :execute_request, @original_request_method
|
17
17
|
@instance = nil
|
18
18
|
@state = 'ready'
|
19
19
|
end
|
@@ -29,7 +29,7 @@ module StripeMock
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def self.alias_stripe_method(new_name, method_object)
|
32
|
-
Stripe.define_singleton_method(new_name) {|*args| method_object.call(*args) }
|
32
|
+
Stripe::StripeClient.active_client.define_singleton_method(new_name) {|*args| method_object.call(*args) }
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.instance; @instance; end
|
@@ -15,7 +15,7 @@ module StripeMock
|
|
15
15
|
|
16
16
|
json = Stripe::Util.symbolize_names(json)
|
17
17
|
params = Stripe::Util.symbolize_names(params)
|
18
|
-
json[:
|
18
|
+
json[:account] = params.delete(:account) if params.key?(:account)
|
19
19
|
json[:data][:object] = Util.rmerge(json[:data][:object], params)
|
20
20
|
json.delete(:id)
|
21
21
|
|
data/lib/stripe_mock/client.rb
CHANGED
@@ -13,9 +13,9 @@ module StripeMock
|
|
13
13
|
@state = 'ready'
|
14
14
|
end
|
15
15
|
|
16
|
-
def mock_request(method, url, api_key, params
|
16
|
+
def mock_request(method, url, api_key: nil, params: {}, headers: {})
|
17
17
|
timeout_wrap do
|
18
|
-
@pipe.mock_request(method, url, api_key, params, headers).tap {|result|
|
18
|
+
@pipe.mock_request(method, url, api_key: api_key, params: params, headers: headers).tap {|result|
|
19
19
|
response, api_key = result
|
20
20
|
if response.is_a?(Hash) && response[:error_raised] == 'invalid_request'
|
21
21
|
raise Stripe::InvalidRequestError.new(*response[:error_params])
|
data/lib/stripe_mock/data.rb
CHANGED
@@ -283,29 +283,44 @@ module StripeMock
|
|
283
283
|
#FIXME nested overrides would be better than hardcoding plan_id
|
284
284
|
def self.mock_subscription(params={})
|
285
285
|
StripeMock::Util.rmerge({
|
286
|
-
:
|
287
|
-
:
|
288
|
-
:
|
289
|
-
:
|
290
|
-
:
|
291
|
-
:
|
292
|
-
:
|
293
|
-
:
|
294
|
-
:
|
295
|
-
:
|
286
|
+
created: 1478204116,
|
287
|
+
current_period_start: 1308595038,
|
288
|
+
current_period_end: 1308681468,
|
289
|
+
status: 'trialing',
|
290
|
+
plan: {
|
291
|
+
interval: 'month',
|
292
|
+
amount: 7500,
|
293
|
+
trial_period_days: 30,
|
294
|
+
object: 'plan',
|
295
|
+
id: '__test_plan_id__'
|
296
296
|
},
|
297
|
-
:
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
297
|
+
items: {
|
298
|
+
object: 'list',
|
299
|
+
data: [{
|
300
|
+
id: 'si_1AwFf62eZvKYlo2C9u6Dhf9',
|
301
|
+
created: 1504035973,
|
302
|
+
metadata: {},
|
303
|
+
object: 'subscription_item',
|
304
|
+
plan: {
|
305
|
+
amount: 999,
|
306
|
+
created: 1504035972,
|
307
|
+
currency: 'usd'
|
308
|
+
},
|
309
|
+
quantity: 1
|
310
|
+
}]
|
311
|
+
},
|
312
|
+
cancel_at_period_end: false,
|
313
|
+
canceled_at: nil,
|
314
|
+
ended_at: nil,
|
315
|
+
start: 1308595038,
|
316
|
+
object: 'subscription',
|
317
|
+
trial_start: 1308595038,
|
318
|
+
trial_end: 1308681468,
|
319
|
+
customer: 'c_test_customer',
|
320
|
+
quantity: 1,
|
321
|
+
tax_percent: nil,
|
322
|
+
discount: nil,
|
323
|
+
metadata: {}
|
309
324
|
}, params)
|
310
325
|
end
|
311
326
|
|
@@ -313,7 +328,7 @@ module StripeMock
|
|
313
328
|
in_id = params[:id] || "test_in_default"
|
314
329
|
currency = params[:currency] || 'usd'
|
315
330
|
lines << Data.mock_line_item() if lines.empty?
|
316
|
-
{
|
331
|
+
invoice = {
|
317
332
|
id: 'in_test_invoice',
|
318
333
|
date: 1349738950,
|
319
334
|
period_end: 1349738950,
|
@@ -325,7 +340,6 @@ module StripeMock
|
|
325
340
|
data: lines
|
326
341
|
},
|
327
342
|
subtotal: lines.map {|line| line[:amount]}.reduce(0, :+),
|
328
|
-
total: lines.map {|line| line[:amount]}.reduce(0, :+),
|
329
343
|
customer: "test_customer",
|
330
344
|
object: 'invoice',
|
331
345
|
attempted: false,
|
@@ -342,7 +356,7 @@ module StripeMock
|
|
342
356
|
webhooks_delivered_at: 1349825350,
|
343
357
|
livemode: false,
|
344
358
|
attempt_count: 0,
|
345
|
-
amount_due:
|
359
|
+
amount_due: nil,
|
346
360
|
currency: currency,
|
347
361
|
starting_balance: 0,
|
348
362
|
ending_balance: nil,
|
@@ -351,6 +365,15 @@ module StripeMock
|
|
351
365
|
discount: nil,
|
352
366
|
subscription: nil
|
353
367
|
}.merge(params)
|
368
|
+
if invoice[:discount]
|
369
|
+
invoice[:total] = [0, invoice[:subtotal] - invoice[:discount][:coupon][:amount_off]].max if invoice[:discount][:coupon][:amount_off]
|
370
|
+
invoice[:total] = invoice[:subtotal] * invoice[:discount][:coupon][:percent_off] / 100 if invoice[:discount][:coupon][:percent_off]
|
371
|
+
else
|
372
|
+
invoice[:total] = invoice[:subtotal]
|
373
|
+
end
|
374
|
+
due = invoice[:total] + invoice[:starting_balance]
|
375
|
+
invoice[:amount_due] = due < 0 ? 0 : due
|
376
|
+
invoice
|
354
377
|
end
|
355
378
|
|
356
379
|
def self.mock_line_item(params = {})
|
@@ -582,6 +605,7 @@ module StripeMock
|
|
582
605
|
:fee_details => [],
|
583
606
|
:id => id,
|
584
607
|
:livemode => false,
|
608
|
+
:metadata => {},
|
585
609
|
:currency => currency,
|
586
610
|
:object => "transfer",
|
587
611
|
:date => 1304114826,
|
@@ -605,6 +629,7 @@ module StripeMock
|
|
605
629
|
end
|
606
630
|
|
607
631
|
def self.mock_dispute(params={})
|
632
|
+
@timestamp ||= Time.now.to_i
|
608
633
|
currency = params[:currency] || 'usd'
|
609
634
|
id = params[:id] || "dp_test_dispute"
|
610
635
|
{
|
@@ -613,7 +638,7 @@ module StripeMock
|
|
613
638
|
:amount => 195,
|
614
639
|
:balance_transactions => [],
|
615
640
|
:charge => "ch_15RsQR2eZvKYlo2CA8IfzCX0",
|
616
|
-
:created =>
|
641
|
+
:created => @timestamp += 1,
|
617
642
|
:currency => currency,
|
618
643
|
:evidence => self.mock_dispute_evidence,
|
619
644
|
:evidence_details => self.mock_dispute_evidence_details,
|
data/lib/stripe_mock/instance.rb
CHANGED
@@ -77,7 +77,7 @@ module StripeMock
|
|
77
77
|
@base_strategy = TestStrategies::Base.new
|
78
78
|
end
|
79
79
|
|
80
|
-
def mock_request(method, url, api_key, params
|
80
|
+
def mock_request(method, url, api_key: nil, api_base: nil, params: {}, headers: {})
|
81
81
|
return {} if method == :xtest
|
82
82
|
|
83
83
|
api_key ||= (Stripe.api_key || DUMMY_API_KEY)
|
@@ -100,7 +100,7 @@ module StripeMock
|
|
100
100
|
else
|
101
101
|
res = self.send(handler[:name], handler[:route], method_url, params, headers)
|
102
102
|
puts " [res] #{res}" if @debug == true
|
103
|
-
[res, api_key]
|
103
|
+
[to_faraday_hash(res), api_key]
|
104
104
|
end
|
105
105
|
else
|
106
106
|
puts "[StripeMock] Warning : Unrecognized endpoint + method : [#{method} #{url}]"
|
@@ -146,7 +146,7 @@ module StripeMock
|
|
146
146
|
def assert_existence(type, id, obj, message=nil)
|
147
147
|
if obj.nil?
|
148
148
|
msg = message || "No such #{type}: #{id}"
|
149
|
-
raise Stripe::InvalidRequestError.new(msg, type.to_s, 404)
|
149
|
+
raise Stripe::InvalidRequestError.new(msg, type.to_s, http_status: 404)
|
150
150
|
end
|
151
151
|
obj
|
152
152
|
end
|
@@ -173,5 +173,9 @@ module StripeMock
|
|
173
173
|
Stripe::Util.symbolize_names(hash)
|
174
174
|
end
|
175
175
|
|
176
|
+
def to_faraday_hash(hash)
|
177
|
+
response = Struct.new(:data)
|
178
|
+
response.new(hash)
|
179
|
+
end
|
176
180
|
end
|
177
181
|
end
|
@@ -31,7 +31,7 @@ module StripeMock
|
|
31
31
|
params[:source] = get_card_or_bank_by_token(params[:source])
|
32
32
|
end
|
33
33
|
elsif params[:source][:id]
|
34
|
-
raise Stripe::InvalidRequestError.new("Invalid token id: #{params[:source]}", 'card', 400)
|
34
|
+
raise Stripe::InvalidRequestError.new("Invalid token id: #{params[:source]}", 'card', http_status: 400)
|
35
35
|
end
|
36
36
|
elsif params[:customer]
|
37
37
|
customer = customers[params[:customer]]
|
@@ -66,7 +66,7 @@ module StripeMock
|
|
66
66
|
allowed = allowed_params(params)
|
67
67
|
disallowed = params.keys - allowed
|
68
68
|
if disallowed.count > 0
|
69
|
-
raise Stripe::InvalidRequestError.new("Received unknown parameters: #{disallowed.join(', ')}" , '', 400)
|
69
|
+
raise Stripe::InvalidRequestError.new("Received unknown parameters: #{disallowed.join(', ')}" , '', http_status: 400)
|
70
70
|
end
|
71
71
|
|
72
72
|
charges[id] = Util.rmerge(charge, params)
|
@@ -139,11 +139,11 @@ module StripeMock
|
|
139
139
|
elsif params[:currency].nil?
|
140
140
|
require_param(:currency)
|
141
141
|
elsif non_integer_charge_amount?(params)
|
142
|
-
raise Stripe::InvalidRequestError.new("Invalid integer: #{params[:amount]}", 'amount', 400)
|
142
|
+
raise Stripe::InvalidRequestError.new("Invalid integer: #{params[:amount]}", 'amount', http_status: 400)
|
143
143
|
elsif non_positive_charge_amount?(params)
|
144
|
-
raise Stripe::InvalidRequestError.new('Invalid positive integer', 'amount', 400)
|
144
|
+
raise Stripe::InvalidRequestError.new('Invalid positive integer', 'amount', http_status: 400)
|
145
145
|
elsif params[:source].nil? && params[:customer].nil?
|
146
|
-
raise Stripe::InvalidRequestError.new('Must provide source or customer.', nil)
|
146
|
+
raise Stripe::InvalidRequestError.new('Must provide source or customer.', http_status: nil)
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
@@ -156,7 +156,7 @@ module StripeMock
|
|
156
156
|
end
|
157
157
|
|
158
158
|
def require_param(param)
|
159
|
-
raise Stripe::InvalidRequestError.new("Missing required param: #{param}", param.to_s, 400)
|
159
|
+
raise Stripe::InvalidRequestError.new("Missing required param: #{param}", param.to_s, http_status: 400)
|
160
160
|
end
|
161
161
|
|
162
162
|
def allowed_params(params)
|
@@ -11,8 +11,9 @@ module StripeMock
|
|
11
11
|
|
12
12
|
def new_coupon(route, method_url, params, headers)
|
13
13
|
params[:id] ||= new_id('coupon')
|
14
|
-
raise Stripe::InvalidRequestError.new('Missing required param: duration', 'coupon', 400) unless params[:duration]
|
15
|
-
|
14
|
+
raise Stripe::InvalidRequestError.new('Missing required param: duration', 'coupon', http_status: 400) unless params[:duration]
|
15
|
+
raise Stripe::InvalidRequestError.new('You must pass currency when passing amount_off', 'coupon', http_status: 400) if params[:amount_off] && !params[:currency]
|
16
|
+
coupons[ params[:id] ] = Data.mock_coupon({amount_off: nil, percent_off:nil}.merge(params))
|
16
17
|
end
|
17
18
|
|
18
19
|
def get_coupon(route, method_url, params, headers)
|
@@ -19,7 +19,7 @@ module StripeMock
|
|
19
19
|
new_card =
|
20
20
|
if params[:source].is_a?(Hash)
|
21
21
|
unless params[:source][:object] && params[:source][:number] && params[:source][:exp_month] && params[:source][:exp_year]
|
22
|
-
raise Stripe::InvalidRequestError.new('You must supply a valid card', nil, 400)
|
22
|
+
raise Stripe::InvalidRequestError.new('You must supply a valid card', nil, http_status: 400)
|
23
23
|
end
|
24
24
|
card_from_params(params[:source])
|
25
25
|
else
|
@@ -36,7 +36,7 @@ module StripeMock
|
|
36
36
|
plan = assert_existence :plan, plan_id, plans[plan_id]
|
37
37
|
|
38
38
|
if params[:default_source].nil? && params[:trial_end].nil? && plan[:trial_period_days].nil? && plan[:amount] != 0
|
39
|
-
raise Stripe::InvalidRequestError.new('You must supply a valid card', nil, 400)
|
39
|
+
raise Stripe::InvalidRequestError.new('You must supply a valid card', nil, http_status: 400)
|
40
40
|
end
|
41
41
|
|
42
42
|
subscription = Data.mock_subscription({ id: new_id('su') })
|
@@ -44,7 +44,7 @@ module StripeMock
|
|
44
44
|
add_subscription_to_customer(customers[ params[:id] ], subscription)
|
45
45
|
subscriptions[subscription[:id]] = subscription
|
46
46
|
elsif params[:trial_end]
|
47
|
-
raise Stripe::InvalidRequestError.new('Received unknown parameter: trial_end', nil, 400)
|
47
|
+
raise Stripe::InvalidRequestError.new('Received unknown parameter: trial_end', nil, http_status: 400)
|
48
48
|
end
|
49
49
|
|
50
50
|
if params[:coupon]
|
@@ -78,7 +78,7 @@ module StripeMock
|
|
78
78
|
new_card = get_card_or_bank_by_token(params.delete(:source))
|
79
79
|
elsif params[:source].is_a?(Hash)
|
80
80
|
unless params[:source][:object] && params[:source][:number] && params[:source][:exp_month] && params[:source][:exp_year]
|
81
|
-
raise Stripe::InvalidRequestError.new('You must supply a valid card', nil, 400)
|
81
|
+
raise Stripe::InvalidRequestError.new('You must supply a valid card', nil, http_status: 400)
|
82
82
|
end
|
83
83
|
new_card = card_from_params(params.delete(:source))
|
84
84
|
end
|
@@ -108,7 +108,16 @@ module StripeMock
|
|
108
108
|
|
109
109
|
def get_customer(route, method_url, params, headers)
|
110
110
|
route =~ method_url
|
111
|
-
assert_existence :customer, $1, customers[$1]
|
111
|
+
customer = assert_existence :customer, $1, customers[$1]
|
112
|
+
|
113
|
+
customer = customer.clone
|
114
|
+
if params[:expand] == ['default_source']
|
115
|
+
customer[:default_source] = customer[:sources][:data].detect do |source|
|
116
|
+
source[:id] == customer[:default_source]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
customer
|
112
121
|
end
|
113
122
|
|
114
123
|
def list_customers(route, method_url, params, headers)
|
@@ -118,9 +127,9 @@ module StripeMock
|
|
118
127
|
def delete_customer_discount(route, method_url, params, headers)
|
119
128
|
route =~ method_url
|
120
129
|
cus = assert_existence :customer, $1, customers[$1]
|
121
|
-
|
130
|
+
|
122
131
|
cus[:discount] = nil
|
123
|
-
|
132
|
+
|
124
133
|
cus
|
125
134
|
end
|
126
135
|
end
|