stripe-ruby-mock 1.8.3.9 → 1.8.3.10
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.
- data/lib/stripe_mock.rb +1 -0
- data/lib/stripe_mock/api/strict.rb +11 -0
- data/lib/stripe_mock/client.rb +16 -4
- data/lib/stripe_mock/instance.rb +10 -1
- data/lib/stripe_mock/request_handlers/charges.rb +1 -0
- data/lib/stripe_mock/request_handlers/customers.rb +9 -2
- data/lib/stripe_mock/request_handlers/plans.rb +12 -3
- data/lib/stripe_mock/server.rb +12 -3
- data/lib/stripe_mock/version.rb +1 -1
- data/spec/server_spec.rb +1 -0
- data/spec/shared_stripe_examples/charges.rb +20 -5
- data/spec/shared_stripe_examples/customers.rb +30 -8
- data/spec/shared_stripe_examples/plans.rb +35 -7
- metadata +3 -2
data/lib/stripe_mock.rb
CHANGED
@@ -23,6 +23,7 @@ require 'stripe_mock/api/client'
|
|
23
23
|
require 'stripe_mock/api/server'
|
24
24
|
require 'stripe_mock/api/errors'
|
25
25
|
require 'stripe_mock/api/webhooks'
|
26
|
+
require 'stripe_mock/api/strict'
|
26
27
|
require 'stripe_mock/api/debug'
|
27
28
|
|
28
29
|
require 'stripe_mock/request_handlers/charges.rb'
|
data/lib/stripe_mock/client.rb
CHANGED
@@ -12,7 +12,14 @@ module StripeMock
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def mock_request(method, url, api_key, params={}, headers={})
|
15
|
-
timeout_wrap
|
15
|
+
timeout_wrap do
|
16
|
+
@pipe.mock_request(method, url, api_key, params, headers).tap {|result|
|
17
|
+
response, api_key = result
|
18
|
+
if response.is_a?(Hash) && response['error_raised'] == 'invalid_request'
|
19
|
+
raise Stripe::InvalidRequestError.new(*response['error_params'])
|
20
|
+
end
|
21
|
+
}
|
22
|
+
end
|
16
23
|
end
|
17
24
|
|
18
25
|
def get_server_data(key)
|
@@ -32,6 +39,14 @@ module StripeMock
|
|
32
39
|
timeout_wrap { @pipe.debug? }
|
33
40
|
end
|
34
41
|
|
42
|
+
def set_server_strict(toggle)
|
43
|
+
timeout_wrap { @pipe.set_strict(toggle) }
|
44
|
+
end
|
45
|
+
|
46
|
+
def server_strict?
|
47
|
+
timeout_wrap { @pipe.strict? }
|
48
|
+
end
|
49
|
+
|
35
50
|
def clear_server_data
|
36
51
|
timeout_wrap { @pipe.clear_data }
|
37
52
|
end
|
@@ -54,9 +69,6 @@ module StripeMock
|
|
54
69
|
raise
|
55
70
|
rescue Errno::ECONNREFUSED => e
|
56
71
|
raise StripeMock::ServerTimeoutError.new(e)
|
57
|
-
rescue StandardError => e
|
58
|
-
puts "Unexpected StripeMock Client Error: #{e.inspect}"
|
59
|
-
{}
|
60
72
|
end
|
61
73
|
end
|
62
74
|
|
data/lib/stripe_mock/instance.rb
CHANGED
@@ -18,7 +18,7 @@ module StripeMock
|
|
18
18
|
|
19
19
|
|
20
20
|
attr_reader :charges, :customers, :plans
|
21
|
-
attr_accessor :pending_error, :debug
|
21
|
+
attr_accessor :pending_error, :debug, :strict
|
22
22
|
|
23
23
|
def initialize
|
24
24
|
@customers = {}
|
@@ -28,6 +28,7 @@ module StripeMock
|
|
28
28
|
@id_counter = 0
|
29
29
|
@pending_error = nil
|
30
30
|
@debug = false
|
31
|
+
@strict = true
|
31
32
|
end
|
32
33
|
|
33
34
|
def mock_request(method, url, api_key, params={}, headers={})
|
@@ -62,6 +63,14 @@ module StripeMock
|
|
62
63
|
|
63
64
|
private
|
64
65
|
|
66
|
+
def assert_existance(type, id, obj)
|
67
|
+
return unless @strict == true
|
68
|
+
|
69
|
+
if obj.nil?
|
70
|
+
raise Stripe::InvalidRequestError.new("No such #{type}: #{id}", type.to_s, 400)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
65
74
|
def new_id(prefix)
|
66
75
|
# Stripe ids must be strings
|
67
76
|
"test_#{prefix}_#{@id_counter += 1}"
|
@@ -12,26 +12,33 @@ module StripeMock
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def new_customer(route, method_url, params, headers)
|
15
|
-
id
|
16
|
-
customers[id] = Data.test_customer(params
|
15
|
+
params[:id] ||= new_id('cus')
|
16
|
+
customers[ params[:id] ] = Data.test_customer(params)
|
17
17
|
end
|
18
18
|
|
19
19
|
def new_subscription(route, method_url, params, headers)
|
20
|
+
route =~ method_url
|
21
|
+
assert_existance :customer, $1, customers[$1]
|
22
|
+
assert_existance :plan, params[:plan], plans[ params[:plan] ]
|
20
23
|
Data.test_subscription(params[:plan])
|
21
24
|
end
|
22
25
|
|
23
26
|
def cancel_subscription(route, method_url, params, headers)
|
27
|
+
route =~ method_url
|
28
|
+
assert_existance :customer, $1, customers[$1]
|
24
29
|
Data.test_delete_subscription(params[:id])
|
25
30
|
end
|
26
31
|
|
27
32
|
def update_customer(route, method_url, params, headers)
|
28
33
|
route =~ method_url
|
34
|
+
assert_existance :customer, $1, customers[$1]
|
29
35
|
customers[$1] ||= Data.test_customer(:id => $1)
|
30
36
|
customers[$1].merge!(params)
|
31
37
|
end
|
32
38
|
|
33
39
|
def get_customer(route, method_url, params, headers)
|
34
40
|
route =~ method_url
|
41
|
+
assert_existance :customer, $1, customers[$1]
|
35
42
|
customers[$1] ||= Data.test_customer(:id => $1)
|
36
43
|
end
|
37
44
|
|
@@ -3,9 +3,10 @@ module StripeMock
|
|
3
3
|
module Plans
|
4
4
|
|
5
5
|
def Plans.included(klass)
|
6
|
-
klass.add_handler 'post /v1/plans',
|
7
|
-
klass.add_handler '
|
8
|
-
klass.add_handler 'get /v1/plans',
|
6
|
+
klass.add_handler 'post /v1/plans', :new_plan
|
7
|
+
klass.add_handler 'post /v1/plans/(.*)', :update_plan
|
8
|
+
klass.add_handler 'get /v1/plans/(.*)', :get_plan
|
9
|
+
klass.add_handler 'get /v1/plans', :list_plans
|
9
10
|
end
|
10
11
|
|
11
12
|
def new_plan(route, method_url, params, headers)
|
@@ -13,8 +14,16 @@ module StripeMock
|
|
13
14
|
plans[ params[:id] ] = Data.test_plan(params)
|
14
15
|
end
|
15
16
|
|
17
|
+
def update_plan(route, method_url, params, headers)
|
18
|
+
route =~ method_url
|
19
|
+
assert_existance :plan, $1, plans[$1]
|
20
|
+
plans[$1] ||= Data.test_plan(:id => $1)
|
21
|
+
plans[$1].merge!(params)
|
22
|
+
end
|
23
|
+
|
16
24
|
def get_plan(route, method_url, params, headers)
|
17
25
|
route =~ method_url
|
26
|
+
assert_existance :plan, $1, plans[$1]
|
18
27
|
plans[$1] ||= Data.test_plan(:id => $1)
|
19
28
|
end
|
20
29
|
|
data/lib/stripe_mock/server.rb
CHANGED
@@ -21,7 +21,14 @@ module StripeMock
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def mock_request(*args)
|
24
|
-
|
24
|
+
begin
|
25
|
+
@instance.mock_request(*args)
|
26
|
+
rescue Stripe::InvalidRequestError => e
|
27
|
+
{
|
28
|
+
:error_raised => 'invalid_request',
|
29
|
+
:error_params => [e.message, e.param, e.http_status, e.http_body, e.json_body]
|
30
|
+
}
|
31
|
+
end
|
25
32
|
end
|
26
33
|
|
27
34
|
def get_data(key)
|
@@ -36,10 +43,12 @@ module StripeMock
|
|
36
43
|
@instance.debug = toggle
|
37
44
|
end
|
38
45
|
|
39
|
-
def
|
40
|
-
@instance.
|
46
|
+
def set_strict(toggle)
|
47
|
+
@instance.strict = toggle
|
41
48
|
end
|
42
49
|
|
50
|
+
def debug?; @instance.debug; end
|
51
|
+
def strict?; @instance.strict; end
|
43
52
|
def ping; true; end
|
44
53
|
end
|
45
54
|
|
data/lib/stripe_mock/version.rb
CHANGED
data/spec/server_spec.rb
CHANGED
@@ -54,6 +54,7 @@ describe 'StripeMock Server' do
|
|
54
54
|
|
55
55
|
|
56
56
|
it "returns a response with symbolized hash keys" do
|
57
|
+
Stripe::Plan.create(id: 'x')
|
57
58
|
response, api_key = StripeMock.redirect_to_mock_server('get', '/v1/plans/x', 'xxx')
|
58
59
|
response.keys.each {|k| expect(k).to be_a(Symbol) }
|
59
60
|
end
|
@@ -48,13 +48,28 @@ shared_examples 'Charge API' do
|
|
48
48
|
expect(charge.amount).to eq(original.amount)
|
49
49
|
end
|
50
50
|
|
51
|
-
it "
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
51
|
+
it "cannot retrieve a charge that doesn't exist" do
|
52
|
+
expect { Stripe::Charge.retrieve('nope') }.to raise_error {|e|
|
53
|
+
expect(e).to be_a Stripe::InvalidRequestError
|
54
|
+
expect(e.param).to eq('charge')
|
55
|
+
expect(e.http_status).to eq(400)
|
56
|
+
}
|
56
57
|
end
|
57
58
|
|
59
|
+
|
60
|
+
context "With strict mode toggled off" do
|
61
|
+
|
62
|
+
before { StripeMock.toggle_strict(false) }
|
63
|
+
|
64
|
+
it "retrieves a stripe charge with an id that doesn't exist" do
|
65
|
+
charge = Stripe::Charge.retrieve('test_charge_x')
|
66
|
+
expect(charge.id).to eq('test_charge_x')
|
67
|
+
expect(charge.amount).to_not be_nil
|
68
|
+
expect(charge.card).to_not be_nil
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
|
58
73
|
describe 'captured status value' do
|
59
74
|
it "reports captured by default" do
|
60
75
|
charge = Stripe::Charge.create({
|
@@ -41,11 +41,12 @@ shared_examples 'Customer API' do
|
|
41
41
|
expect(customer.email).to eq(original.email)
|
42
42
|
end
|
43
43
|
|
44
|
-
it "
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
44
|
+
it "cannot retrieve a customer that doesn't exist" do
|
45
|
+
expect { Stripe::Customer.retrieve('nope') }.to raise_error {|e|
|
46
|
+
expect(e).to be_a Stripe::InvalidRequestError
|
47
|
+
expect(e.param).to eq('customer')
|
48
|
+
expect(e.http_status).to eq(400)
|
49
|
+
}
|
49
50
|
end
|
50
51
|
|
51
52
|
it "retrieves all customers" do
|
@@ -58,7 +59,7 @@ shared_examples 'Customer API' do
|
|
58
59
|
end
|
59
60
|
|
60
61
|
it "updates a stripe customer" do
|
61
|
-
original = Stripe::Customer.
|
62
|
+
original = Stripe::Customer.create(id: 'test_customer_update')
|
62
63
|
email = original.email
|
63
64
|
|
64
65
|
original.description = 'new desc'
|
@@ -73,7 +74,8 @@ shared_examples 'Customer API' do
|
|
73
74
|
end
|
74
75
|
|
75
76
|
it "updates a stripe customer's subscription" do
|
76
|
-
|
77
|
+
plan = Stripe::Plan.create(id: 'silver')
|
78
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub')
|
77
79
|
sub = customer.update_subscription({ :plan => 'silver' })
|
78
80
|
|
79
81
|
expect(sub.object).to eq('subscription')
|
@@ -81,10 +83,30 @@ shared_examples 'Customer API' do
|
|
81
83
|
end
|
82
84
|
|
83
85
|
it "cancels a stripe customer's subscription" do
|
84
|
-
customer = Stripe::Customer.
|
86
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub')
|
85
87
|
sub = customer.cancel_subscription
|
86
88
|
|
87
89
|
expect(sub.deleted).to eq(true)
|
88
90
|
end
|
89
91
|
|
92
|
+
it "cannot reference a plan that does not exist" do
|
93
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub')
|
94
|
+
expect {
|
95
|
+
customer.update_subscription(plan: 'imagination')
|
96
|
+
}.to raise_error Stripe::InvalidRequestError
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
context "With strict mode toggled off" do
|
101
|
+
|
102
|
+
before { StripeMock.toggle_strict(false) }
|
103
|
+
|
104
|
+
it "retrieves a stripe customer with an id that doesn't exist" do
|
105
|
+
customer = Stripe::Customer.retrieve('test_customer_x')
|
106
|
+
expect(customer.id).to eq('test_customer_x')
|
107
|
+
expect(customer.email).to_not be_nil
|
108
|
+
expect(customer.description).to_not be_nil
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
90
112
|
end
|
@@ -57,17 +57,28 @@ shared_examples 'Plan API' do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
|
60
|
-
it "
|
61
|
-
|
60
|
+
it "updates a stripe plan" do
|
61
|
+
Stripe::Plan.create(id: 'super_member', amount: 111)
|
62
62
|
|
63
|
-
|
64
|
-
expect(plan.amount).
|
65
|
-
expect(plan.name).to_not be_nil
|
63
|
+
plan = Stripe::Plan.retrieve('super_member')
|
64
|
+
expect(plan.amount).to eq(111)
|
66
65
|
|
67
|
-
|
68
|
-
|
66
|
+
plan.amount = 789
|
67
|
+
plan.save
|
68
|
+
plan = Stripe::Plan.retrieve('super_member')
|
69
|
+
expect(plan.amount).to eq(789)
|
69
70
|
end
|
70
71
|
|
72
|
+
|
73
|
+
it "cannot retrieve a stripe plan that doesn't exist" do
|
74
|
+
expect { Stripe::Plan.retrieve('nope') }.to raise_error {|e|
|
75
|
+
expect(e).to be_a Stripe::InvalidRequestError
|
76
|
+
expect(e.param).to eq('plan')
|
77
|
+
expect(e.http_status).to eq(400)
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
|
71
82
|
it "retrieves all plans" do
|
72
83
|
Stripe::Plan.create({ id: 'Plan One', amount: 54321 })
|
73
84
|
Stripe::Plan.create({ id: 'Plan Two', amount: 98765 })
|
@@ -78,4 +89,21 @@ shared_examples 'Plan API' do
|
|
78
89
|
all.map(&:amount).should include(54321, 98765)
|
79
90
|
end
|
80
91
|
|
92
|
+
|
93
|
+
context "With strict mode toggled off" do
|
94
|
+
|
95
|
+
before { StripeMock.toggle_strict(false) }
|
96
|
+
|
97
|
+
it "can retrieve a stripe plan with an id that doesn't exist" do
|
98
|
+
plan = Stripe::Plan.retrieve('test_charge_x')
|
99
|
+
|
100
|
+
expect(plan.id).to eq('test_charge_x')
|
101
|
+
expect(plan.amount).to_not be_nil
|
102
|
+
expect(plan.name).to_not be_nil
|
103
|
+
|
104
|
+
expect(plan.currency).to_not be_nil
|
105
|
+
expect(plan.interval).to_not be_nil
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
81
109
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stripe-ruby-mock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.3.
|
4
|
+
version: 1.8.3.10
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: stripe
|
@@ -111,6 +111,7 @@ files:
|
|
111
111
|
- lib/stripe_mock/api/errors.rb
|
112
112
|
- lib/stripe_mock/api/instance.rb
|
113
113
|
- lib/stripe_mock/api/server.rb
|
114
|
+
- lib/stripe_mock/api/strict.rb
|
114
115
|
- lib/stripe_mock/api/webhooks.rb
|
115
116
|
- lib/stripe_mock/client.rb
|
116
117
|
- lib/stripe_mock/data.rb
|