stripe-ruby-mock 1.10.1.7 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/README.md +70 -3
- data/Rakefile +1 -1
- data/lib/stripe_mock/api/client.rb +1 -0
- data/lib/stripe_mock/api/instance.rb +1 -0
- data/lib/stripe_mock/api/live.rb +15 -0
- data/lib/stripe_mock/api/server.rb +24 -21
- data/lib/stripe_mock/api/test_helpers.rb +24 -0
- data/lib/stripe_mock/client.rb +4 -8
- data/lib/stripe_mock/data.rb +54 -30
- data/lib/stripe_mock/instance.rb +15 -5
- data/lib/stripe_mock/request_handlers/cards.rb +29 -18
- data/lib/stripe_mock/request_handlers/charges.rb +34 -6
- data/lib/stripe_mock/request_handlers/coupons.rb +1 -3
- data/lib/stripe_mock/request_handlers/customers.rb +3 -9
- data/lib/stripe_mock/request_handlers/events.rb +1 -3
- data/lib/stripe_mock/request_handlers/helpers/card_helpers.rb +16 -9
- data/lib/stripe_mock/request_handlers/helpers/charge_helpers.rb +16 -0
- data/lib/stripe_mock/request_handlers/helpers/subscription_helpers.rb +9 -2
- data/lib/stripe_mock/request_handlers/helpers/token_helpers.rb +3 -1
- data/lib/stripe_mock/request_handlers/invoice_items.rb +32 -2
- data/lib/stripe_mock/request_handlers/invoices.rb +7 -3
- data/lib/stripe_mock/request_handlers/plans.rb +2 -5
- data/lib/stripe_mock/request_handlers/recipients.rb +26 -4
- data/lib/stripe_mock/request_handlers/subscriptions.rb +26 -33
- data/lib/stripe_mock/request_handlers/tokens.rb +24 -4
- data/lib/stripe_mock/request_handlers/validators/param_validators.rb +18 -0
- data/lib/stripe_mock/server.rb +4 -5
- data/lib/stripe_mock/test_strategies/base.rb +27 -0
- data/lib/stripe_mock/test_strategies/live.rb +22 -0
- data/lib/stripe_mock/test_strategies/mock.rb +19 -0
- data/lib/stripe_mock/util.rb +5 -0
- data/lib/stripe_mock/version.rb +1 -1
- data/lib/stripe_mock/webhook_fixtures/charge.failed.json +3 -2
- data/lib/stripe_mock/webhook_fixtures/charge.refunded.json +16 -9
- data/lib/stripe_mock/webhook_fixtures/charge.succeeded.json +3 -2
- data/lib/stripe_mock/webhook_fixtures/customer.card.created.json +1 -0
- data/lib/stripe_mock/webhook_fixtures/customer.card.deleted.json +1 -0
- data/lib/stripe_mock/webhook_fixtures/customer.card.updated.json +1 -0
- data/lib/stripe_mock/webhook_fixtures/customer.created.json +1 -0
- data/lib/stripe_mock/webhook_fixtures/customer.deleted.json +2 -1
- data/lib/stripe_mock/webhook_fixtures/customer.updated.json +1 -0
- data/lib/stripe_mock.rb +9 -1
- data/spec/fixtures/create_refund.yml +126 -0
- data/spec/instance_spec.rb +4 -2
- data/spec/integration_examples/charge_token_examples.rb +49 -0
- data/spec/integration_examples/customer_card_examples.rb +42 -0
- data/spec/integration_examples/prepare_error_examples.rb +18 -0
- data/spec/readme_spec.rb +2 -1
- data/spec/server_spec.rb +12 -3
- data/spec/shared_stripe_examples/card_examples.rb +108 -3
- data/spec/shared_stripe_examples/card_token_examples.rb +26 -0
- data/spec/shared_stripe_examples/charge_examples.rb +55 -39
- data/spec/shared_stripe_examples/coupon_examples.rb +2 -17
- data/spec/shared_stripe_examples/customer_examples.rb +30 -39
- data/spec/shared_stripe_examples/error_mock_examples.rb +1 -1
- data/spec/shared_stripe_examples/invoice_examples.rb +31 -15
- data/spec/shared_stripe_examples/invoice_item_examples.rb +62 -10
- data/spec/shared_stripe_examples/plan_examples.rb +29 -18
- data/spec/shared_stripe_examples/recipient_examples.rb +55 -5
- data/spec/shared_stripe_examples/refund_examples.rb +90 -0
- data/spec/shared_stripe_examples/subscription_examples.rb +159 -82
- data/spec/shared_stripe_examples/validation_examples.rb +19 -0
- data/spec/spec_helper.rb +32 -1
- data/spec/stripe_mock_spec.rb +70 -0
- data/spec/support/stripe_examples.rb +7 -14
- data/spec/util_spec.rb +8 -0
- data/stripe-ruby-mock.gemspec +2 -2
- metadata +38 -34
- data/lib/stripe_mock/api/strict.rb +0 -11
@@ -47,9 +47,7 @@ shared_examples 'Plan API' do
|
|
47
47
|
|
48
48
|
|
49
49
|
it "retrieves a stripe plan" do
|
50
|
-
original =
|
51
|
-
amount: 1331
|
52
|
-
})
|
50
|
+
original = stripe_helper.create_plan(amount: 1331)
|
53
51
|
plan = Stripe::Plan.retrieve(original.id)
|
54
52
|
|
55
53
|
expect(plan.id).to eq(original.id)
|
@@ -58,7 +56,7 @@ shared_examples 'Plan API' do
|
|
58
56
|
|
59
57
|
|
60
58
|
it "updates a stripe plan" do
|
61
|
-
|
59
|
+
stripe_helper.create_plan(id: 'super_member', amount: 111)
|
62
60
|
|
63
61
|
plan = Stripe::Plan.retrieve('super_member')
|
64
62
|
expect(plan.amount).to eq(111)
|
@@ -79,7 +77,7 @@ shared_examples 'Plan API' do
|
|
79
77
|
end
|
80
78
|
|
81
79
|
it "deletes a stripe plan" do
|
82
|
-
|
80
|
+
stripe_helper.create_plan(id: 'super_member', amount: 111)
|
83
81
|
|
84
82
|
plan = Stripe::Plan.retrieve('super_member')
|
85
83
|
expect(plan).to_not be_nil
|
@@ -94,29 +92,42 @@ shared_examples 'Plan API' do
|
|
94
92
|
end
|
95
93
|
|
96
94
|
it "retrieves all plans" do
|
97
|
-
|
98
|
-
|
95
|
+
stripe_helper.create_plan(id: 'Plan One', amount: 54321)
|
96
|
+
stripe_helper.create_plan(id: 'Plan Two', amount: 98765)
|
99
97
|
|
100
98
|
all = Stripe::Plan.all
|
101
99
|
expect(all.length).to eq(2)
|
102
|
-
all.map
|
103
|
-
all.map
|
100
|
+
expect(all.map &:id).to include('Plan One', 'Plan Two')
|
101
|
+
expect(all.map &:amount).to include(54321, 98765)
|
104
102
|
end
|
105
103
|
|
106
104
|
|
107
|
-
|
105
|
+
describe "Validation", :live => true do
|
106
|
+
let(:params) { stripe_helper.create_plan_params }
|
107
|
+
let(:subject) { Stripe::Plan.create(params) }
|
108
108
|
|
109
|
-
|
109
|
+
describe "Required Parameters" do
|
110
|
+
after do
|
111
|
+
params.delete(@name)
|
112
|
+
expect { subject }.to raise_error(Stripe::InvalidRequestError, "Missing required param: #{@name}")
|
113
|
+
end
|
110
114
|
|
111
|
-
|
112
|
-
|
115
|
+
it("requires a name") { @name = :name }
|
116
|
+
it("requires an amount") { @name = :amount }
|
117
|
+
it("requires a currency") { @name = :currency }
|
118
|
+
it("requires an interval") { @name = :interval }
|
119
|
+
end
|
120
|
+
|
121
|
+
describe "Uniqueness" do
|
113
122
|
|
114
|
-
|
115
|
-
|
116
|
-
expect(plan.name).to_not be_nil
|
123
|
+
it "validates for uniqueness" do
|
124
|
+
stripe_helper.delete_plan(params[:id])
|
117
125
|
|
118
|
-
|
119
|
-
|
126
|
+
Stripe::Plan.create(params)
|
127
|
+
expect {
|
128
|
+
Stripe::Plan.create(params)
|
129
|
+
}.to raise_error(Stripe::InvalidRequestError, "Plan already exists.")
|
130
|
+
end
|
120
131
|
end
|
121
132
|
end
|
122
133
|
|
@@ -2,52 +2,87 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
shared_examples 'Recipient API' do
|
4
4
|
|
5
|
-
it "creates a stripe recipient with a default card" do
|
5
|
+
it "creates a stripe recipient with a default bank and card" do
|
6
6
|
recipient = Stripe::Recipient.create({
|
7
7
|
type: "corporation",
|
8
8
|
name: "MyCo",
|
9
9
|
email: "owner@myco.com",
|
10
|
-
bank_account: 'void_bank_token'
|
10
|
+
bank_account: 'void_bank_token',
|
11
|
+
card: stripe_helper.generate_card_token
|
11
12
|
})
|
12
13
|
expect(recipient.id).to match /^test_rp/
|
14
|
+
expect(recipient.type).to eq('corporation')
|
13
15
|
expect(recipient.name).to eq('MyCo')
|
14
16
|
expect(recipient.email).to eq('owner@myco.com')
|
17
|
+
expect(recipient.default_card).to_not be_nil
|
15
18
|
|
16
19
|
expect(recipient.active_account).to_not be_nil
|
17
20
|
expect(recipient.active_account.bank_name).to_not be_nil
|
18
21
|
expect(recipient.active_account.last4).to_not be_nil
|
22
|
+
|
23
|
+
expect(recipient.cards.count).to eq(1)
|
24
|
+
expect(recipient.cards.data.length).to eq(1)
|
25
|
+
expect(recipient.default_card).to_not be_nil
|
26
|
+
expect(recipient.default_card).to eq recipient.cards.data.first.id
|
27
|
+
|
28
|
+
expect { recipient.card }.to raise_error
|
29
|
+
end
|
30
|
+
|
31
|
+
it "creates a stripe recipient without a card" do
|
32
|
+
recipient = Stripe::Recipient.create({
|
33
|
+
type: "corporation",
|
34
|
+
name: "MyCo",
|
35
|
+
email: "cardless@appleseed.com"
|
36
|
+
})
|
37
|
+
expect(recipient.id).to match(/^test_rp/)
|
38
|
+
expect(recipient.type).to eq('corporation')
|
39
|
+
expect(recipient.name).to eq('MyCo')
|
40
|
+
expect(recipient.email).to eq('cardless@appleseed.com')
|
41
|
+
|
42
|
+
expect(recipient.cards.count).to eq(0)
|
43
|
+
expect(recipient.cards.data.length).to eq(0)
|
44
|
+
expect(recipient.default_card).to be_nil
|
19
45
|
end
|
20
46
|
|
21
47
|
it "stores a created stripe recipient in memory" do
|
22
48
|
recipient = Stripe::Recipient.create({
|
23
49
|
type: "individual",
|
24
50
|
name: "Customer One",
|
25
|
-
bank_account: 'bank_account_token_1'
|
51
|
+
bank_account: 'bank_account_token_1',
|
52
|
+
card: stripe_helper.generate_card_token
|
26
53
|
})
|
27
54
|
recipient2 = Stripe::Recipient.create({
|
28
55
|
type: "individual",
|
29
56
|
name: "Customer Two",
|
30
|
-
bank_account: 'bank_account_token_1'
|
57
|
+
bank_account: 'bank_account_token_1',
|
58
|
+
card: stripe_helper.generate_card_token
|
31
59
|
})
|
32
60
|
data = test_data_source(:recipients)
|
33
61
|
expect(data[recipient.id]).to_not be_nil
|
62
|
+
expect(data[recipient.id][:type]).to eq("individual")
|
34
63
|
expect(data[recipient.id][:name]).to eq("Customer One")
|
64
|
+
expect(data[recipient.id][:default_card]).to_not be_nil
|
35
65
|
|
36
66
|
expect(data[recipient2.id]).to_not be_nil
|
67
|
+
expect(data[recipient2.id][:type]).to eq("individual")
|
37
68
|
expect(data[recipient2.id][:name]).to eq("Customer Two")
|
69
|
+
expect(data[recipient2.id][:default_card]).to_not be_nil
|
38
70
|
end
|
39
71
|
|
40
72
|
it "retrieves a stripe recipient" do
|
41
73
|
original = Stripe::Recipient.create({
|
42
74
|
type: "individual",
|
43
75
|
name: "Bob",
|
44
|
-
email: "bob@example.com"
|
76
|
+
email: "bob@example.com",
|
77
|
+
card: stripe_helper.generate_card_token
|
45
78
|
})
|
46
79
|
recipient = Stripe::Recipient.retrieve(original.id)
|
47
80
|
|
48
81
|
expect(recipient.id).to eq(original.id)
|
82
|
+
expect(recipient.type).to eq(original.type)
|
49
83
|
expect(recipient.name).to eq(original.name)
|
50
84
|
expect(recipient.email).to eq(original.email)
|
85
|
+
expect(recipient.default_card).to_not be_nil
|
51
86
|
end
|
52
87
|
|
53
88
|
it "cannot retrieve a recipient that doesn't exist" do
|
@@ -58,5 +93,20 @@ shared_examples 'Recipient API' do
|
|
58
93
|
}
|
59
94
|
end
|
60
95
|
|
96
|
+
describe "Errors", :live => true do
|
97
|
+
it "throws an error when the customer does not have the retrieving card id" do
|
98
|
+
recipient = Stripe::Recipient.create(:name => "Bob Bobber", :type => "individual")
|
99
|
+
card_id = "card_123"
|
100
|
+
expect { recipient.cards.retrieve(card_id) }.to raise_error {|e|
|
101
|
+
expect(e).to be_a Stripe::InvalidRequestError
|
102
|
+
expect(e.message).to include "Recipient", recipient.id, "does not have", card_id
|
103
|
+
expect(e.param).to eq 'card'
|
104
|
+
expect(e.http_status).to eq 404
|
105
|
+
}
|
106
|
+
end
|
107
|
+
|
108
|
+
it "throws an error when the name does not have both first and last"
|
109
|
+
end
|
110
|
+
|
61
111
|
end
|
62
112
|
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
shared_examples 'Refund API' do
|
4
|
+
|
5
|
+
it "refunds a stripe charge item" do
|
6
|
+
charge = Stripe::Charge.create(
|
7
|
+
amount: 999,
|
8
|
+
currency: 'USD',
|
9
|
+
card: stripe_helper.generate_card_token,
|
10
|
+
description: 'card charge'
|
11
|
+
)
|
12
|
+
|
13
|
+
charge = charge.refund(amount: 999)
|
14
|
+
|
15
|
+
expect(charge.refunded).to eq(true)
|
16
|
+
expect(charge.refunds.data.first.amount).to eq(999)
|
17
|
+
expect(charge.amount_refunded).to eq(999)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "creates a stripe refund with the charge ID", :live => true do
|
21
|
+
charge = Stripe::Charge.create(
|
22
|
+
amount: 999,
|
23
|
+
currency: 'USD',
|
24
|
+
card: stripe_helper.generate_card_token,
|
25
|
+
description: 'card charge'
|
26
|
+
)
|
27
|
+
refund = charge.refund
|
28
|
+
|
29
|
+
expect(charge.id).to match(/^(test_)?ch/)
|
30
|
+
expect(refund.id).to eq(charge.id)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "creates a stripe refund with a refund ID" do
|
34
|
+
charge = Stripe::Charge.create(
|
35
|
+
amount: 999,
|
36
|
+
currency: 'USD',
|
37
|
+
card: stripe_helper.generate_card_token,
|
38
|
+
description: 'card charge'
|
39
|
+
)
|
40
|
+
refund = charge.refund
|
41
|
+
|
42
|
+
expect(refund.refunds.data.count).to eq 1
|
43
|
+
expect(refund.refunds.data.first.id).to match(/^test_re/)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "creates a stripe refund with a different balance transaction than the charge" do
|
47
|
+
charge = Stripe::Charge.create(
|
48
|
+
amount: 999,
|
49
|
+
currency: 'USD',
|
50
|
+
card: stripe_helper.generate_card_token,
|
51
|
+
description: 'card charge'
|
52
|
+
)
|
53
|
+
refund = charge.refund
|
54
|
+
|
55
|
+
expect(charge.balance_transaction).not_to eq(refund.refunds.data.first.balance_transaction)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "creates a refund off a charge", :live => true do
|
59
|
+
original = Stripe::Charge.create(amount: 555, currency: 'USD', card: stripe_helper.generate_card_token)
|
60
|
+
|
61
|
+
charge = Stripe::Charge.retrieve(original.id)
|
62
|
+
|
63
|
+
refund = charge.refunds.create(amount: 555)
|
64
|
+
expect(refund.amount).to eq 555
|
65
|
+
expect(refund.charge).to eq charge.id
|
66
|
+
end
|
67
|
+
|
68
|
+
it "handles multiple refunds", :live => true do
|
69
|
+
original = Stripe::Charge.create(amount: 1100, currency: 'USD', card: stripe_helper.generate_card_token)
|
70
|
+
|
71
|
+
charge = Stripe::Charge.retrieve(original.id)
|
72
|
+
|
73
|
+
refund_1 = charge.refunds.create(amount: 300)
|
74
|
+
expect(refund_1.amount).to eq 300
|
75
|
+
expect(refund_1.charge).to eq charge.id
|
76
|
+
|
77
|
+
refund_2 = charge.refunds.create(amount: 400)
|
78
|
+
expect(refund_2.amount).to eq 400
|
79
|
+
expect(refund_2.charge).to eq charge.id
|
80
|
+
|
81
|
+
expect(charge.refunds.count).to eq 0
|
82
|
+
expect(charge.refunds.total_count).to eq 0
|
83
|
+
expect(charge.amount_refunded).to eq 0
|
84
|
+
|
85
|
+
charge = Stripe::Charge.retrieve(original.id)
|
86
|
+
expect(charge.refunds.count).to eq 2
|
87
|
+
expect(charge.refunds.total_count).to eq 2
|
88
|
+
expect(charge.amount_refunded).to eq 700
|
89
|
+
end
|
90
|
+
end
|