stripe-ruby-mock 1.8.7.0 → 1.8.7.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/lib/stripe_mock.rb +1 -0
- data/lib/stripe_mock/instance.rb +5 -2
- data/lib/stripe_mock/request_handlers/charges.rb +14 -0
- data/lib/stripe_mock/request_handlers/customers.rb +29 -3
- data/lib/stripe_mock/request_handlers/invoices.rb +37 -0
- data/lib/stripe_mock/version.rb +1 -1
- data/spec/shared_stripe_examples/charge_examples.rb +26 -1
- data/spec/shared_stripe_examples/customer_examples.rb +63 -3
- data/spec/shared_stripe_examples/invoice_examples.rb +54 -0
- data/spec/support/stripe_examples.rb +2 -1
- metadata +5 -2
data/README.md
CHANGED
data/lib/stripe_mock.rb
CHANGED
@@ -32,6 +32,7 @@ require 'stripe_mock/api/debug'
|
|
32
32
|
require 'stripe_mock/request_handlers/charges.rb'
|
33
33
|
require 'stripe_mock/request_handlers/cards.rb'
|
34
34
|
require 'stripe_mock/request_handlers/customers.rb'
|
35
|
+
require 'stripe_mock/request_handlers/invoices.rb'
|
35
36
|
require 'stripe_mock/request_handlers/invoice_items.rb'
|
36
37
|
require 'stripe_mock/request_handlers/plans.rb'
|
37
38
|
require 'stripe_mock/request_handlers/recipients.rb'
|
data/lib/stripe_mock/instance.rb
CHANGED
@@ -18,12 +18,14 @@ module StripeMock
|
|
18
18
|
include StripeMock::RequestHandlers::Charges
|
19
19
|
include StripeMock::RequestHandlers::Cards
|
20
20
|
include StripeMock::RequestHandlers::Customers
|
21
|
+
include StripeMock::RequestHandlers::Invoices
|
21
22
|
include StripeMock::RequestHandlers::InvoiceItems
|
22
23
|
include StripeMock::RequestHandlers::Plans
|
23
24
|
include StripeMock::RequestHandlers::Recipients
|
24
25
|
|
25
26
|
|
26
|
-
attr_reader :charges, :customers, :plans, :error_queue,
|
27
|
+
attr_reader :charges, :customers, :invoices, :plans, :error_queue,
|
28
|
+
:recipients
|
27
29
|
attr_reader :bank_tokens
|
28
30
|
attr_accessor :debug, :strict
|
29
31
|
|
@@ -32,6 +34,7 @@ module StripeMock
|
|
32
34
|
@recipients = {}
|
33
35
|
@charges = {}
|
34
36
|
@plans = {}
|
37
|
+
@invoices = {}
|
35
38
|
@bank_tokens = {}
|
36
39
|
@card_tokens = {}
|
37
40
|
|
@@ -102,7 +105,7 @@ module StripeMock
|
|
102
105
|
def get_customer_card(customer, token)
|
103
106
|
customer[:cards][:data].find{|cc| cc[:id] == token }
|
104
107
|
end
|
105
|
-
|
108
|
+
|
106
109
|
def add_card_to_customer(card, cus)
|
107
110
|
card[:customer] = cus[:id]
|
108
111
|
|
@@ -4,6 +4,7 @@ module StripeMock
|
|
4
4
|
|
5
5
|
def Charges.included(klass)
|
6
6
|
klass.add_handler 'post /v1/charges', :new_charge
|
7
|
+
klass.add_handler 'get /v1/charges', :get_charges
|
7
8
|
klass.add_handler 'get /v1/charges/(.*)', :get_charge
|
8
9
|
klass.add_handler 'post /v1/charges/(.*)/capture', :capture_charge
|
9
10
|
klass.add_handler 'post /v1/charges/(.*)/refund', :refund_charge
|
@@ -14,6 +15,19 @@ module StripeMock
|
|
14
15
|
charges[id] = Data.mock_charge(params.merge :id => id)
|
15
16
|
end
|
16
17
|
|
18
|
+
def get_charges(route, method_url, params, headers)
|
19
|
+
params[:offset] ||= 0
|
20
|
+
params[:count] ||= 10
|
21
|
+
|
22
|
+
clone = charges.clone
|
23
|
+
|
24
|
+
if params[:customer]
|
25
|
+
clone.delete_if { |k,v| v[:customer] != params[:customer] }
|
26
|
+
end
|
27
|
+
|
28
|
+
clone.values[params[:offset], params[:count]]
|
29
|
+
end
|
30
|
+
|
17
31
|
def get_charge(route, method_url, params, headers)
|
18
32
|
route =~ method_url
|
19
33
|
assert_existance :charge, $1, charges[$1]
|
@@ -19,6 +19,19 @@ module StripeMock
|
|
19
19
|
cards << get_card_by_token(params.delete(:card))
|
20
20
|
params[:default_card] = cards.first[:id]
|
21
21
|
end
|
22
|
+
|
23
|
+
if params[:plan]
|
24
|
+
plan = plans[ params[:plan] ]
|
25
|
+
assert_existance :plan, params[:plan], plan
|
26
|
+
|
27
|
+
if params[:default_card].nil? && plan[:trial_period_days].nil? && plan[:amount] != 0
|
28
|
+
raise Stripe::InvalidRequestError.new('You must supply a valid card', nil, 400)
|
29
|
+
end
|
30
|
+
|
31
|
+
sub = Data.mock_subscription id: new_id('su'), plan: plan, customer: params[:id]
|
32
|
+
params[:subscription] = sub
|
33
|
+
end
|
34
|
+
|
22
35
|
customers[ params[:id] ] = Data.mock_customer(cards, params)
|
23
36
|
end
|
24
37
|
|
@@ -31,6 +44,12 @@ module StripeMock
|
|
31
44
|
plan = plans[ params[:plan] ]
|
32
45
|
assert_existance :plan, params[:plan], plan
|
33
46
|
|
47
|
+
if params[:card]
|
48
|
+
new_card = get_card_by_token(params.delete(:card))
|
49
|
+
add_card_to_customer(new_card, customer)
|
50
|
+
customer[:default_card] = new_card[:id]
|
51
|
+
end
|
52
|
+
|
34
53
|
# Ensure customer has card to charge if plan has no trial and is not free
|
35
54
|
if customer[:default_card].nil? && plan[:trial_period_days].nil? && plan[:amount] != 0
|
36
55
|
raise Stripe::InvalidRequestError.new('You must supply a valid card', nil, 400)
|
@@ -49,12 +68,19 @@ module StripeMock
|
|
49
68
|
sub = customer[:subscription]
|
50
69
|
assert_existance nil, nil, sub, "No active subscription for customer: #{$1}"
|
51
70
|
|
52
|
-
customer[:subscription] = nil
|
53
|
-
|
54
71
|
plan = plans[ sub[:plan][:id] ]
|
55
72
|
assert_existance :plan, params[:plan], plan
|
56
73
|
|
57
|
-
|
74
|
+
if params[:at_period_end] == true
|
75
|
+
status = 'active'
|
76
|
+
cancel_at_period_end = true
|
77
|
+
else
|
78
|
+
status = 'canceled'
|
79
|
+
cancel_at_period_end = false
|
80
|
+
end
|
81
|
+
|
82
|
+
sub = Data.mock_subscription id: sub[:id], plan: plan, customer: $1, status: status, cancel_at_period_end: cancel_at_period_end
|
83
|
+
customer[:subscription] = sub
|
58
84
|
end
|
59
85
|
|
60
86
|
def update_customer(route, method_url, params, headers)
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module StripeMock
|
2
|
+
module RequestHandlers
|
3
|
+
module Invoices
|
4
|
+
|
5
|
+
def Invoices.included(klass)
|
6
|
+
klass.add_handler 'post /v1/invoices', :new_invoice
|
7
|
+
klass.add_handler 'get /v1/invoices/(.*)', :get_invoice
|
8
|
+
klass.add_handler 'get /v1/invoices', :list_invoices
|
9
|
+
end
|
10
|
+
|
11
|
+
def new_invoice(route, method_url, params, headers)
|
12
|
+
id = new_id('in')
|
13
|
+
invoices[id] = Data.mock_invoice(params.merge :id => id)
|
14
|
+
end
|
15
|
+
|
16
|
+
def list_invoices(route, method_url, params, headers)
|
17
|
+
params[:offset] ||= 0
|
18
|
+
params[:count] ||= 10
|
19
|
+
|
20
|
+
result = invoices.clone
|
21
|
+
|
22
|
+
if params[:customer]
|
23
|
+
result.delete_if { |k,v| v[:customer] != params[:customer] }
|
24
|
+
end
|
25
|
+
|
26
|
+
result.values[params[:offset], params[:count]]
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_invoice(route, method_url, params, headers)
|
30
|
+
route =~ method_url
|
31
|
+
assert_existance :invoice, $1, invoices[$1]
|
32
|
+
invoices[$1] ||= Data.mock_invoice(:id => $1)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/stripe_mock/version.rb
CHANGED
@@ -36,7 +36,6 @@ shared_examples 'Charge API' do
|
|
36
36
|
expect(data[charge2.id][:amount]).to eq(777)
|
37
37
|
end
|
38
38
|
|
39
|
-
|
40
39
|
it "retrieves a stripe charge" do
|
41
40
|
original = Stripe::Charge.create({
|
42
41
|
amount: 777,
|
@@ -57,6 +56,32 @@ shared_examples 'Charge API' do
|
|
57
56
|
}
|
58
57
|
end
|
59
58
|
|
59
|
+
context "retrieving a list of charges" do
|
60
|
+
before do
|
61
|
+
@customer = Stripe::Customer.create(email: 'johnny@appleseed.com')
|
62
|
+
@charge = Stripe::Charge.create(customer: @customer.id)
|
63
|
+
@charge2 = Stripe::Charge.create
|
64
|
+
end
|
65
|
+
|
66
|
+
it "stores charges for a customer in memory" do
|
67
|
+
expect(@customer.charges.map(&:id)).to eq([@charge.id])
|
68
|
+
end
|
69
|
+
|
70
|
+
it "stores all charges in memory" do
|
71
|
+
expect(Stripe::Charge.all.map(&:id)).to eq([@charge.id, @charge2.id])
|
72
|
+
end
|
73
|
+
|
74
|
+
it "defaults count to 10 charges" do
|
75
|
+
11.times { Stripe::Charge.create }
|
76
|
+
expect(Stripe::Charge.all.count).to eq(10)
|
77
|
+
end
|
78
|
+
|
79
|
+
context "when passing count" do
|
80
|
+
it "gets that many charges" do
|
81
|
+
expect(Stripe::Charge.all(count: 1).count).to eq(1)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
60
85
|
|
61
86
|
context "With strict mode toggled off" do
|
62
87
|
|
@@ -34,6 +34,35 @@ shared_examples 'Customer API' do
|
|
34
34
|
expect(customer.default_card).to be_nil
|
35
35
|
end
|
36
36
|
|
37
|
+
it 'creates a customer with a plan' do
|
38
|
+
plan = Stripe::Plan.create(id: 'silver')
|
39
|
+
customer = Stripe::Customer.create(id: 'test_cus_plan', card: 'tk', :plan => 'silver')
|
40
|
+
|
41
|
+
customer = Stripe::Customer.retrieve('test_cus_plan')
|
42
|
+
expect(customer.subscription).to_not be_nil
|
43
|
+
expect(customer.subscription.plan.id).to eq('silver')
|
44
|
+
expect(customer.subscription.customer).to eq(customer.id)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'cannot create a customer with a plan that does not exist' do
|
48
|
+
expect {
|
49
|
+
customer = Stripe::Customer.create(id: 'test_cus_no_plan', card: 'tk', :plan => 'non-existant')
|
50
|
+
}.to raise_error {|e|
|
51
|
+
expect(e).to be_a(Stripe::InvalidRequestError)
|
52
|
+
expect(e.message).to eq('No such plan: non-existant')
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'cannot create a customer with an exsting plan, but no card token' do
|
57
|
+
plan = Stripe::Plan.create(id: 'p')
|
58
|
+
expect {
|
59
|
+
customer = Stripe::Customer.create(id: 'test_cus_no_plan', :plan => 'p')
|
60
|
+
}.to raise_error {|e|
|
61
|
+
expect(e).to be_a(Stripe::InvalidRequestError)
|
62
|
+
expect(e.message).to eq('You must supply a valid card')
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
37
66
|
it "stores a created stripe customer in memory" do
|
38
67
|
customer = Stripe::Customer.create({
|
39
68
|
email: 'johnny@appleseed.com',
|
@@ -172,15 +201,33 @@ shared_examples 'Customer API' do
|
|
172
201
|
end
|
173
202
|
|
174
203
|
it "cancels a stripe customer's subscription" do
|
175
|
-
|
204
|
+
Stripe::Plan.create(id: 'the truth')
|
176
205
|
customer = Stripe::Customer.create(id: 'test_customer_sub', card: 'tk')
|
177
206
|
sub = customer.update_subscription({ :plan => 'the truth' })
|
178
207
|
|
179
208
|
result = customer.cancel_subscription
|
180
|
-
expect(result.
|
209
|
+
expect(result.status).to eq('canceled')
|
210
|
+
expect(result.cancel_at_period_end).to be_false
|
181
211
|
expect(result.id).to eq(sub.id)
|
212
|
+
|
182
213
|
customer = Stripe::Customer.retrieve('test_customer_sub')
|
183
|
-
expect(customer.subscription).
|
214
|
+
expect(customer.subscription).to_not be_nil
|
215
|
+
expect(customer.subscription.id).to eq(result.id)
|
216
|
+
end
|
217
|
+
|
218
|
+
it "cancels a stripe customer's subscription at period end" do
|
219
|
+
Stripe::Plan.create(id: 'the truth')
|
220
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub', card: 'tk')
|
221
|
+
sub = customer.update_subscription({ :plan => 'the truth' })
|
222
|
+
|
223
|
+
result = customer.cancel_subscription(at_period_end: true)
|
224
|
+
expect(result.status).to eq('active')
|
225
|
+
expect(result.cancel_at_period_end).to be_true
|
226
|
+
expect(result.id).to eq(sub.id)
|
227
|
+
|
228
|
+
customer = Stripe::Customer.retrieve('test_customer_sub')
|
229
|
+
expect(customer.subscription).to_not be_nil
|
230
|
+
expect(customer.subscription.id).to eq(result.id)
|
184
231
|
end
|
185
232
|
|
186
233
|
it "cannot update to a plan that does not exist" do
|
@@ -203,6 +250,19 @@ shared_examples 'Customer API' do
|
|
203
250
|
expect(customer.deleted).to be_true
|
204
251
|
end
|
205
252
|
|
253
|
+
it "sets card" do
|
254
|
+
plan = Stripe::Plan.create(id: 'small')
|
255
|
+
customer = Stripe::Customer.create(id: 'test_customer_sub')
|
256
|
+
customer.update_subscription(card: 'tk', :plan => 'small')
|
257
|
+
|
258
|
+
customer = Stripe::Customer.retrieve('test_customer_sub')
|
259
|
+
|
260
|
+
expect(customer.cards.count).to eq(1)
|
261
|
+
expect(customer.cards.data.length).to eq(1)
|
262
|
+
expect(customer.default_card).to_not be_nil
|
263
|
+
expect(customer.default_card).to eq customer.cards.data.first.id
|
264
|
+
end
|
265
|
+
|
206
266
|
context "With strict mode toggled off" do
|
207
267
|
|
208
268
|
before { StripeMock.toggle_strict(false) }
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
shared_examples 'Invoice API' do
|
4
|
+
|
5
|
+
context "creating a new invoice" do
|
6
|
+
it "creates a stripe invoice" do
|
7
|
+
invoice = Stripe::Invoice.create
|
8
|
+
expect(invoice.id).to match(/^test_in/)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "stores a created stripe invoice in memory" do
|
12
|
+
invoice = Stripe::Invoice.create
|
13
|
+
data = test_data_source(:invoices)
|
14
|
+
expect(data[invoice.id]).to_not be_nil
|
15
|
+
expect(data[invoice.id][:id]).to eq(invoice.id)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "retrieving an invoice" do
|
20
|
+
it "retrieves a stripe invoice" do
|
21
|
+
original = Stripe::Invoice.create
|
22
|
+
invoice = Stripe::Invoice.retrieve(original.id)
|
23
|
+
expect(invoice.id).to eq(original.id)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "retrieving a list of invoices" do
|
28
|
+
before do
|
29
|
+
@customer = Stripe::Customer.create(email: 'johnny@appleseed.com')
|
30
|
+
@invoice = Stripe::Invoice.create(customer: @customer.id)
|
31
|
+
@invoice2 = Stripe::Invoice.create
|
32
|
+
end
|
33
|
+
|
34
|
+
it "stores invoices for a customer in memory" do
|
35
|
+
expect(@customer.invoices.map(&:id)).to eq([@invoice.id])
|
36
|
+
end
|
37
|
+
|
38
|
+
it "stores all invoices in memory" do
|
39
|
+
expect(Stripe::Invoice.all.map(&:id)).to eq([@invoice.id, @invoice2.id])
|
40
|
+
end
|
41
|
+
|
42
|
+
it "defaults count to 10 invoices" do
|
43
|
+
11.times { Stripe::Invoice.create }
|
44
|
+
expect(Stripe::Invoice.all.count).to eq(10)
|
45
|
+
end
|
46
|
+
|
47
|
+
context "when passing count" do
|
48
|
+
it "gets that many invoices" do
|
49
|
+
expect(Stripe::Invoice.all(count: 1).count).to eq(1)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -6,6 +6,7 @@ def require_stripe_examples
|
|
6
6
|
require 'shared_stripe_examples/charge_examples'
|
7
7
|
require 'shared_stripe_examples/customer_examples'
|
8
8
|
require 'shared_stripe_examples/error_mock_examples'
|
9
|
+
require 'shared_stripe_examples/invoice_examples'
|
9
10
|
require 'shared_stripe_examples/invoice_item_examples'
|
10
11
|
require 'shared_stripe_examples/plan_examples'
|
11
12
|
require 'shared_stripe_examples/recipient_examples'
|
@@ -16,8 +17,8 @@ def it_behaves_like_stripe(&block)
|
|
16
17
|
it_behaves_like 'Card Token Mocking', &block
|
17
18
|
it_behaves_like 'Card API', &block
|
18
19
|
it_behaves_like 'Charge API', &block
|
19
|
-
it_behaves_like 'Charge API', &block
|
20
20
|
it_behaves_like 'Customer API', &block
|
21
|
+
it_behaves_like 'Invoice API', &block
|
21
22
|
it_behaves_like 'Invoice Item API', &block
|
22
23
|
it_behaves_like 'Plan API', &block
|
23
24
|
it_behaves_like 'Recipient API', &block
|
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.7.
|
4
|
+
version: 1.8.7.1
|
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-
|
12
|
+
date: 2013-11-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: stripe
|
@@ -147,6 +147,7 @@ files:
|
|
147
147
|
- lib/stripe_mock/request_handlers/charges.rb
|
148
148
|
- lib/stripe_mock/request_handlers/customers.rb
|
149
149
|
- lib/stripe_mock/request_handlers/invoice_items.rb
|
150
|
+
- lib/stripe_mock/request_handlers/invoices.rb
|
150
151
|
- lib/stripe_mock/request_handlers/plans.rb
|
151
152
|
- lib/stripe_mock/request_handlers/recipients.rb
|
152
153
|
- lib/stripe_mock/server.rb
|
@@ -200,6 +201,7 @@ files:
|
|
200
201
|
- spec/shared_stripe_examples/charge_examples.rb
|
201
202
|
- spec/shared_stripe_examples/customer_examples.rb
|
202
203
|
- spec/shared_stripe_examples/error_mock_examples.rb
|
204
|
+
- spec/shared_stripe_examples/invoice_examples.rb
|
203
205
|
- spec/shared_stripe_examples/invoice_item_examples.rb
|
204
206
|
- spec/shared_stripe_examples/plan_examples.rb
|
205
207
|
- spec/shared_stripe_examples/recipient_examples.rb
|
@@ -247,6 +249,7 @@ test_files:
|
|
247
249
|
- spec/shared_stripe_examples/charge_examples.rb
|
248
250
|
- spec/shared_stripe_examples/customer_examples.rb
|
249
251
|
- spec/shared_stripe_examples/error_mock_examples.rb
|
252
|
+
- spec/shared_stripe_examples/invoice_examples.rb
|
250
253
|
- spec/shared_stripe_examples/invoice_item_examples.rb
|
251
254
|
- spec/shared_stripe_examples/plan_examples.rb
|
252
255
|
- spec/shared_stripe_examples/recipient_examples.rb
|