stripe-ruby-mock 1.10.1.7 → 2.0.0
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 +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
@@ -2,11 +2,21 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
shared_examples 'Charge API' do
|
4
4
|
|
5
|
+
it "requires a valid card token", :live => true do
|
6
|
+
expect {
|
7
|
+
charge = Stripe::Charge.create(
|
8
|
+
amount: 99,
|
9
|
+
currency: 'usd',
|
10
|
+
card: 'bogus_card_token'
|
11
|
+
)
|
12
|
+
}.to raise_error(Stripe::InvalidRequestError, /Invalid token id/)
|
13
|
+
end
|
14
|
+
|
5
15
|
it "creates a stripe charge item with a card token" do
|
6
16
|
charge = Stripe::Charge.create(
|
7
17
|
amount: 999,
|
8
18
|
currency: 'USD',
|
9
|
-
card:
|
19
|
+
card: stripe_helper.generate_card_token,
|
10
20
|
description: 'card charge'
|
11
21
|
)
|
12
22
|
|
@@ -21,12 +31,12 @@ shared_examples 'Charge API' do
|
|
21
31
|
charge = Stripe::Charge.create({
|
22
32
|
amount: 333,
|
23
33
|
currency: 'USD',
|
24
|
-
card:
|
34
|
+
card: stripe_helper.generate_card_token
|
25
35
|
})
|
26
36
|
charge2 = Stripe::Charge.create({
|
27
37
|
amount: 777,
|
28
38
|
currency: 'USD',
|
29
|
-
card:
|
39
|
+
card: stripe_helper.generate_card_token
|
30
40
|
})
|
31
41
|
data = test_data_source(:charges)
|
32
42
|
expect(data[charge.id]).to_not be_nil
|
@@ -40,7 +50,7 @@ shared_examples 'Charge API' do
|
|
40
50
|
original = Stripe::Charge.create({
|
41
51
|
amount: 777,
|
42
52
|
currency: 'USD',
|
43
|
-
card:
|
53
|
+
card: stripe_helper.generate_card_token
|
44
54
|
})
|
45
55
|
charge = Stripe::Charge.retrieve(original.id)
|
46
56
|
|
@@ -56,6 +66,24 @@ shared_examples 'Charge API' do
|
|
56
66
|
}
|
57
67
|
end
|
58
68
|
|
69
|
+
it "creates a unique balance transaction" do
|
70
|
+
charge1 = Stripe::Charge.create(
|
71
|
+
amount: 999,
|
72
|
+
currency: 'USD',
|
73
|
+
card: stripe_helper.generate_card_token,
|
74
|
+
description: 'card charge'
|
75
|
+
)
|
76
|
+
|
77
|
+
charge2 = Stripe::Charge.create(
|
78
|
+
amount: 999,
|
79
|
+
currency: 'USD',
|
80
|
+
card: stripe_helper.generate_card_token,
|
81
|
+
description: 'card charge'
|
82
|
+
)
|
83
|
+
|
84
|
+
expect(charge1.balance_transaction).not_to eq(charge2.balance_transaction)
|
85
|
+
end
|
86
|
+
|
59
87
|
context "retrieving a list of charges" do
|
60
88
|
before do
|
61
89
|
@customer = Stripe::Customer.create(email: 'johnny@appleseed.com')
|
@@ -83,50 +111,37 @@ shared_examples 'Charge API' do
|
|
83
111
|
end
|
84
112
|
end
|
85
113
|
|
86
|
-
context "With strict mode toggled off" do
|
87
|
-
|
88
|
-
before { StripeMock.toggle_strict(false) }
|
89
|
-
|
90
|
-
it "retrieves a stripe charge with an id that doesn't exist" do
|
91
|
-
charge = Stripe::Charge.retrieve('test_charge_x')
|
92
|
-
expect(charge.id).to eq('test_charge_x')
|
93
|
-
expect(charge.amount).to_not be_nil
|
94
|
-
expect(charge.card).to_not be_nil
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
|
99
114
|
describe 'captured status value' do
|
100
115
|
it "reports captured by default" do
|
101
116
|
charge = Stripe::Charge.create({
|
102
117
|
amount: 777,
|
103
118
|
currency: 'USD',
|
104
|
-
card:
|
119
|
+
card: stripe_helper.generate_card_token
|
105
120
|
})
|
106
121
|
|
107
|
-
expect(charge.captured).to
|
122
|
+
expect(charge.captured).to eq(true)
|
108
123
|
end
|
109
124
|
|
110
125
|
it "reports captured if capture requested" do
|
111
126
|
charge = Stripe::Charge.create({
|
112
127
|
amount: 777,
|
113
128
|
currency: 'USD',
|
114
|
-
card:
|
129
|
+
card: stripe_helper.generate_card_token,
|
115
130
|
capture: true
|
116
131
|
})
|
117
132
|
|
118
|
-
expect(charge.captured).to
|
133
|
+
expect(charge.captured).to eq(true)
|
119
134
|
end
|
120
135
|
|
121
136
|
it "reports not captured if capture: false requested" do
|
122
137
|
charge = Stripe::Charge.create({
|
123
138
|
amount: 777,
|
124
139
|
currency: 'USD',
|
125
|
-
card:
|
140
|
+
card: stripe_helper.generate_card_token,
|
126
141
|
capture: false
|
127
142
|
})
|
128
143
|
|
129
|
-
expect(charge.captured).to
|
144
|
+
expect(charge.captured).to eq(false)
|
130
145
|
end
|
131
146
|
end
|
132
147
|
|
@@ -135,29 +150,30 @@ shared_examples 'Charge API' do
|
|
135
150
|
charge = Stripe::Charge.create({
|
136
151
|
amount: 777,
|
137
152
|
currency: 'USD',
|
138
|
-
card:
|
153
|
+
card: stripe_helper.generate_card_token,
|
139
154
|
capture: false
|
140
155
|
})
|
141
156
|
|
142
157
|
returned_charge = charge.capture
|
143
|
-
expect(charge.captured).to
|
158
|
+
expect(charge.captured).to eq(true)
|
144
159
|
expect(returned_charge.id).to eq(charge.id)
|
145
|
-
expect(returned_charge.captured).to
|
160
|
+
expect(returned_charge.captured).to eq(true)
|
146
161
|
end
|
147
|
-
end
|
148
|
-
|
149
|
-
it "refunds a stripe charge item" do
|
150
|
-
charge = Stripe::Charge.create(
|
151
|
-
amount: 999,
|
152
|
-
currency: 'USD',
|
153
|
-
card: 'card_token_abcde',
|
154
|
-
description: 'card charge'
|
155
|
-
)
|
156
162
|
|
157
|
-
|
163
|
+
it "captures with specified amount" do
|
164
|
+
charge = Stripe::Charge.create({
|
165
|
+
amount: 777,
|
166
|
+
currency: 'USD',
|
167
|
+
card: stripe_helper.generate_card_token,
|
168
|
+
capture: false
|
169
|
+
})
|
158
170
|
|
159
|
-
|
160
|
-
|
161
|
-
|
171
|
+
returned_charge = charge.capture({ amount: 677 })
|
172
|
+
expect(charge.captured).to eq(true)
|
173
|
+
expect(returned_charge.amount_refunded).to eq(100)
|
174
|
+
expect(returned_charge.id).to eq(charge.id)
|
175
|
+
expect(returned_charge.captured).to eq(true)
|
176
|
+
end
|
162
177
|
end
|
178
|
+
|
163
179
|
end
|
@@ -89,22 +89,7 @@ shared_examples 'Coupon API' do
|
|
89
89
|
|
90
90
|
all = Stripe::Coupon.all
|
91
91
|
expect(all.length).to eq(2)
|
92
|
-
all.map
|
93
|
-
all.map
|
92
|
+
expect(all.map &:id).to include('Coupon One', 'Coupon Two')
|
93
|
+
expect(all.map &:amount_off).to include(1500, 3000)
|
94
94
|
end
|
95
|
-
|
96
|
-
|
97
|
-
context "With strict mode toggled off" do
|
98
|
-
|
99
|
-
before { StripeMock.toggle_strict(false) }
|
100
|
-
|
101
|
-
it "can retrieve a stripe coupon with an id that doesn't exist" do
|
102
|
-
coupon = Stripe::Coupon.retrieve('test_coupon_x')
|
103
|
-
|
104
|
-
expect(coupon.id).to eq('test_coupon_x')
|
105
|
-
expect(coupon.percent_off).to_not be_nil
|
106
|
-
expect(coupon.valid).to be_true
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
95
|
end
|
@@ -2,10 +2,14 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
shared_examples 'Customer API' do
|
4
4
|
|
5
|
+
def gen_card_tk
|
6
|
+
stripe_helper.generate_card_token
|
7
|
+
end
|
8
|
+
|
5
9
|
it "creates a stripe customer with a default card" do
|
6
10
|
customer = Stripe::Customer.create({
|
7
11
|
email: 'johnny@appleseed.com',
|
8
|
-
card:
|
12
|
+
card: gen_card_tk,
|
9
13
|
description: "a description"
|
10
14
|
})
|
11
15
|
expect(customer.id).to match(/^test_cus/)
|
@@ -35,8 +39,8 @@ shared_examples 'Customer API' do
|
|
35
39
|
end
|
36
40
|
|
37
41
|
it 'creates a customer with a plan' do
|
38
|
-
plan =
|
39
|
-
customer = Stripe::Customer.create(id: 'test_cus_plan', card:
|
42
|
+
plan = stripe_helper.create_plan(id: 'silver')
|
43
|
+
customer = Stripe::Customer.create(id: 'test_cus_plan', card: gen_card_tk, :plan => 'silver')
|
40
44
|
|
41
45
|
customer = Stripe::Customer.retrieve('test_cus_plan')
|
42
46
|
expect(customer.subscriptions.count).to eq(1)
|
@@ -48,14 +52,14 @@ shared_examples 'Customer API' do
|
|
48
52
|
end
|
49
53
|
|
50
54
|
it "creates a customer with a plan (string/symbol agnostic)" do
|
51
|
-
plan =
|
52
|
-
customer = Stripe::Customer.create(id: 'test_cus_plan', card:
|
55
|
+
plan = stripe_helper.create_plan(id: 'string_id')
|
56
|
+
customer = Stripe::Customer.create(id: 'test_cus_plan', card: gen_card_tk, :plan => :string_id)
|
53
57
|
|
54
58
|
customer = Stripe::Customer.retrieve('test_cus_plan')
|
55
59
|
expect(customer.subscriptions.first.plan.id).to eq('string_id')
|
56
60
|
|
57
|
-
plan =
|
58
|
-
customer = Stripe::Customer.create(id: 'test_cus_plan', card:
|
61
|
+
plan = stripe_helper.create_plan(:id => :sym_id)
|
62
|
+
customer = Stripe::Customer.create(id: 'test_cus_plan', card: gen_card_tk, :plan => 'sym_id')
|
59
63
|
|
60
64
|
customer = Stripe::Customer.retrieve('test_cus_plan')
|
61
65
|
expect(customer.subscriptions.first.plan.id).to eq('sym_id')
|
@@ -64,9 +68,9 @@ shared_examples 'Customer API' do
|
|
64
68
|
context "create customer" do
|
65
69
|
|
66
70
|
it "with a trial when trial_end is set" do
|
67
|
-
plan =
|
71
|
+
plan = stripe_helper.create_plan(id: 'no_trial', amount: 999)
|
68
72
|
trial_end = Time.now.utc.to_i + 3600
|
69
|
-
customer = Stripe::Customer.create(id: 'test_cus_trial_end', card:
|
73
|
+
customer = Stripe::Customer.create(id: 'test_cus_trial_end', card: gen_card_tk, plan: 'no_trial', trial_end: trial_end)
|
70
74
|
|
71
75
|
customer = Stripe::Customer.retrieve('test_cus_trial_end')
|
72
76
|
expect(customer.subscriptions.count).to eq(1)
|
@@ -80,9 +84,9 @@ shared_examples 'Customer API' do
|
|
80
84
|
end
|
81
85
|
|
82
86
|
it 'overrides trial period length when trial_end is set' do
|
83
|
-
plan =
|
87
|
+
plan = stripe_helper.create_plan(id: 'silver', amount: 999, trial_period_days: 14)
|
84
88
|
trial_end = Time.now.utc.to_i + 3600
|
85
|
-
customer = Stripe::Customer.create(id: 'test_cus_trial_end', card:
|
89
|
+
customer = Stripe::Customer.create(id: 'test_cus_trial_end', card: gen_card_tk, plan: 'silver', trial_end: trial_end)
|
86
90
|
|
87
91
|
customer = Stripe::Customer.retrieve('test_cus_trial_end')
|
88
92
|
expect(customer.subscriptions.count).to eq(1)
|
@@ -95,8 +99,8 @@ shared_examples 'Customer API' do
|
|
95
99
|
end
|
96
100
|
|
97
101
|
it "returns no trial when trial_end is set to 'now'" do
|
98
|
-
plan =
|
99
|
-
customer = Stripe::Customer.create(id: 'test_cus_trial_end', card:
|
102
|
+
plan = stripe_helper.create_plan(id: 'silver', amount: 999, trial_period_days: 14)
|
103
|
+
customer = Stripe::Customer.create(id: 'test_cus_trial_end', card: gen_card_tk, plan: 'silver', trial_end: "now")
|
100
104
|
|
101
105
|
customer = Stripe::Customer.retrieve('test_cus_trial_end')
|
102
106
|
expect(customer.subscriptions.count).to eq(1)
|
@@ -110,9 +114,9 @@ shared_examples 'Customer API' do
|
|
110
114
|
end
|
111
115
|
|
112
116
|
it "returns an error if trial_end is set to a past time" do
|
113
|
-
plan =
|
117
|
+
plan = stripe_helper.create_plan(id: 'silver', amount: 999)
|
114
118
|
expect {
|
115
|
-
Stripe::Customer.create(id: 'test_cus_trial_end', card:
|
119
|
+
Stripe::Customer.create(id: 'test_cus_trial_end', card: gen_card_tk, plan: 'silver', trial_end: Time.now.utc.to_i - 3600)
|
116
120
|
}.to raise_error {|e|
|
117
121
|
expect(e).to be_a(Stripe::InvalidRequestError)
|
118
122
|
expect(e.message).to eq('Invalid timestamp: must be an integer Unix timestamp in the future')
|
@@ -121,7 +125,7 @@ shared_examples 'Customer API' do
|
|
121
125
|
|
122
126
|
it "returns an error if trial_end is set without a plan" do
|
123
127
|
expect {
|
124
|
-
Stripe::Customer.create(id: 'test_cus_trial_end', card:
|
128
|
+
Stripe::Customer.create(id: 'test_cus_trial_end', card: gen_card_tk, trial_end: "now")
|
125
129
|
}.to raise_error {|e|
|
126
130
|
expect(e).to be_a(Stripe::InvalidRequestError)
|
127
131
|
expect(e.message).to eq('Received unknown parameter: trial_end')
|
@@ -132,15 +136,15 @@ shared_examples 'Customer API' do
|
|
132
136
|
|
133
137
|
it 'cannot create a customer with a plan that does not exist' do
|
134
138
|
expect {
|
135
|
-
customer = Stripe::Customer.create(id: 'test_cus_no_plan', card:
|
139
|
+
customer = Stripe::Customer.create(id: 'test_cus_no_plan', card: gen_card_tk, :plan => 'non-existant')
|
136
140
|
}.to raise_error {|e|
|
137
141
|
expect(e).to be_a(Stripe::InvalidRequestError)
|
138
142
|
expect(e.message).to eq('No such plan: non-existant')
|
139
143
|
}
|
140
144
|
end
|
141
145
|
|
142
|
-
it 'cannot create a customer with an
|
143
|
-
plan =
|
146
|
+
it 'cannot create a customer with an existing plan, but no card token' do
|
147
|
+
plan = stripe_helper.create_plan(id: 'p')
|
144
148
|
expect {
|
145
149
|
customer = Stripe::Customer.create(id: 'test_cus_no_plan', :plan => 'p')
|
146
150
|
}.to raise_error {|e|
|
@@ -152,11 +156,11 @@ shared_examples 'Customer API' do
|
|
152
156
|
it "stores a created stripe customer in memory" do
|
153
157
|
customer = Stripe::Customer.create({
|
154
158
|
email: 'johnny@appleseed.com',
|
155
|
-
card:
|
159
|
+
card: gen_card_tk
|
156
160
|
})
|
157
161
|
customer2 = Stripe::Customer.create({
|
158
162
|
email: 'bob@bobbers.com',
|
159
|
-
card:
|
163
|
+
card: gen_card_tk
|
160
164
|
})
|
161
165
|
data = test_data_source(:customers)
|
162
166
|
expect(data[customer.id]).to_not be_nil
|
@@ -169,7 +173,7 @@ shared_examples 'Customer API' do
|
|
169
173
|
it "retrieves a stripe customer" do
|
170
174
|
original = Stripe::Customer.create({
|
171
175
|
email: 'johnny@appleseed.com',
|
172
|
-
card:
|
176
|
+
card: gen_card_tk
|
173
177
|
})
|
174
178
|
customer = Stripe::Customer.retrieve(original.id)
|
175
179
|
|
@@ -194,7 +198,7 @@ shared_examples 'Customer API' do
|
|
194
198
|
|
195
199
|
all = Stripe::Customer.all
|
196
200
|
expect(all.length).to eq(2)
|
197
|
-
all.map
|
201
|
+
expect(all.map &:email).to include('one@one.com', 'two@two.com')
|
198
202
|
end
|
199
203
|
|
200
204
|
it "updates a stripe customer" do
|
@@ -213,12 +217,12 @@ shared_examples 'Customer API' do
|
|
213
217
|
end
|
214
218
|
|
215
219
|
it "updates a stripe customer's card" do
|
216
|
-
original = Stripe::Customer.create(id: 'test_customer_update', card:
|
220
|
+
original = Stripe::Customer.create(id: 'test_customer_update', card: gen_card_tk)
|
217
221
|
card = original.cards.data.first
|
218
222
|
expect(original.default_card).to eq(card.id)
|
219
223
|
expect(original.cards.count).to eq(1)
|
220
224
|
|
221
|
-
original.card =
|
225
|
+
original.card = gen_card_tk
|
222
226
|
original.save
|
223
227
|
|
224
228
|
new_card = original.cards.data.first
|
@@ -231,19 +235,6 @@ shared_examples 'Customer API' do
|
|
231
235
|
it "deletes a customer" do
|
232
236
|
customer = Stripe::Customer.create(id: 'test_customer_sub')
|
233
237
|
customer = customer.delete
|
234
|
-
expect(customer.deleted).to
|
235
|
-
end
|
236
|
-
|
237
|
-
context "With strict mode toggled off" do
|
238
|
-
|
239
|
-
before { StripeMock.toggle_strict(false) }
|
240
|
-
|
241
|
-
it "retrieves a stripe customer with an id that doesn't exist" do
|
242
|
-
customer = Stripe::Customer.retrieve('test_customer_x')
|
243
|
-
expect(customer.id).to eq('test_customer_x')
|
244
|
-
expect(customer.email).to_not be_nil
|
245
|
-
expect(customer.description).to_not be_nil
|
246
|
-
end
|
238
|
+
expect(customer.deleted).to eq(true)
|
247
239
|
end
|
248
|
-
|
249
240
|
end
|
@@ -49,7 +49,7 @@ shared_examples 'Stripe Error Mocking' do
|
|
49
49
|
error = Stripe::AuthenticationError.new('Bad Auth', 499, 'abody', 'json abody')
|
50
50
|
StripeMock.prepare_error(error)
|
51
51
|
|
52
|
-
expect {
|
52
|
+
expect { stripe_helper.create_plan() }.to raise_error {|e|
|
53
53
|
expect(e).to be_a(Stripe::AuthenticationError)
|
54
54
|
expect(e.message).to eq('Bad Auth')
|
55
55
|
|
@@ -24,6 +24,22 @@ shared_examples 'Invoice API' do
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
context "updating an invoice" do
|
28
|
+
it "updates a stripe invoice" do
|
29
|
+
invoice = Stripe::Invoice.create(currency: "cad", statement_description: "orig-desc")
|
30
|
+
expect(invoice.currency).to eq("cad")
|
31
|
+
expect(invoice.statement_description).to eq("orig-desc")
|
32
|
+
|
33
|
+
invoice.currency = "usd"
|
34
|
+
invoice.statement_description = "new-desc"
|
35
|
+
invoice.save
|
36
|
+
|
37
|
+
invoice = Stripe::Invoice.retrieve(invoice.id)
|
38
|
+
expect(invoice.currency).to eq("usd")
|
39
|
+
expect(invoice.statement_description).to eq("new-desc")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
27
43
|
context "retrieving a list of invoices" do
|
28
44
|
before do
|
29
45
|
@customer = Stripe::Customer.create(email: 'johnny@appleseed.com')
|
@@ -58,8 +74,8 @@ shared_examples 'Invoice API' do
|
|
58
74
|
end
|
59
75
|
|
60
76
|
it 'updates attempted and paid flags' do
|
61
|
-
expect(@invoice.attempted).to
|
62
|
-
expect(@invoice.paid).to
|
77
|
+
expect(@invoice.attempted).to eq(true)
|
78
|
+
expect(@invoice.paid).to eq(true)
|
63
79
|
end
|
64
80
|
|
65
81
|
it 'sets the charge attribute' do
|
@@ -70,7 +86,7 @@ shared_examples 'Invoice API' do
|
|
70
86
|
|
71
87
|
context "retrieving upcoming invoice" do
|
72
88
|
before do
|
73
|
-
@customer = Stripe::Customer.create(email: 'johnny@appleseed.com', card:
|
89
|
+
@customer = Stripe::Customer.create(email: 'johnny@appleseed.com', card: stripe_helper.generate_card_token)
|
74
90
|
end
|
75
91
|
|
76
92
|
it 'fails without parameters' do
|
@@ -78,7 +94,7 @@ shared_examples 'Invoice API' do
|
|
78
94
|
expect(e).to be_a(ArgumentError) }
|
79
95
|
end
|
80
96
|
|
81
|
-
it 'fails without a valid customer
|
97
|
+
it 'fails without a valid customer' do
|
82
98
|
expect { Stripe::Invoice.upcoming(customer: 'whatever') }.to raise_error {|e|
|
83
99
|
expect(e).to be_a(Stripe::InvalidRequestError)
|
84
100
|
expect(e.message).to eq('No such customer: whatever') }
|
@@ -99,7 +115,7 @@ shared_examples 'Invoice API' do
|
|
99
115
|
end
|
100
116
|
|
101
117
|
it 'works when customer has a subscription' do
|
102
|
-
@plan =
|
118
|
+
@plan = stripe_helper.create_plan()
|
103
119
|
@subscription = @customer.subscriptions.create(plan: @plan.id)
|
104
120
|
@upcoming = Stripe::Invoice.upcoming(customer: @customer.id)
|
105
121
|
|
@@ -113,7 +129,7 @@ shared_examples 'Invoice API' do
|
|
113
129
|
end
|
114
130
|
|
115
131
|
it 'sets the start and end of billing periods correctly when plan has an interval_count' do
|
116
|
-
@oddplan =
|
132
|
+
@oddplan = stripe_helper.create_plan(interval: "week", interval_count: 11)
|
117
133
|
@subscription = @customer.subscriptions.create(plan: @oddplan.id)
|
118
134
|
@upcoming = Stripe::Invoice.upcoming(customer: @customer.id)
|
119
135
|
|
@@ -124,9 +140,9 @@ shared_examples 'Invoice API' do
|
|
124
140
|
end
|
125
141
|
|
126
142
|
it 'chooses the most recent of multiple subscriptions' do
|
127
|
-
@shortplan =
|
128
|
-
@plainplan =
|
129
|
-
@longplan =
|
143
|
+
@shortplan = stripe_helper.create_plan(id: 'a', interval: "week") # 1 week sub
|
144
|
+
@plainplan = stripe_helper.create_plan(id: 'b') # 1 month sub
|
145
|
+
@longplan = stripe_helper.create_plan(id: 'c', interval: "year") # 1 year sub
|
130
146
|
|
131
147
|
@plainsub = @customer.subscriptions.create(plan: @plainplan.id)
|
132
148
|
@shortsub = @customer.subscriptions.create(plan: @shortplan.id)
|
@@ -142,7 +158,7 @@ shared_examples 'Invoice API' do
|
|
142
158
|
context 'calculates month and year offsets correctly' do
|
143
159
|
|
144
160
|
it 'for one month plan on the 1st' do
|
145
|
-
@plan =
|
161
|
+
@plan = stripe_helper.create_plan()
|
146
162
|
@sub = @customer.subscriptions.create(plan: @plan.id, current_period_start: Time.utc(2014,1,1,12).to_i)
|
147
163
|
@upcoming = Stripe::Invoice.upcoming(customer: @customer.id)
|
148
164
|
|
@@ -153,7 +169,7 @@ shared_examples 'Invoice API' do
|
|
153
169
|
end
|
154
170
|
|
155
171
|
it 'for one year plan on the 1st' do
|
156
|
-
@plan =
|
172
|
+
@plan = stripe_helper.create_plan(interval: "year")
|
157
173
|
@sub = @customer.subscriptions.create(plan: @plan.id, current_period_start: Time.utc(2012,1,1,12).to_i)
|
158
174
|
@upcoming = Stripe::Invoice.upcoming(customer: @customer.id)
|
159
175
|
|
@@ -164,7 +180,7 @@ shared_examples 'Invoice API' do
|
|
164
180
|
end
|
165
181
|
|
166
182
|
it 'for one month plan on the 31st' do
|
167
|
-
@plan =
|
183
|
+
@plan = stripe_helper.create_plan()
|
168
184
|
@sub = @customer.subscriptions.create(plan: @plan.id, current_period_start: Time.utc(2014,1,31,12).to_i)
|
169
185
|
@upcoming = Stripe::Invoice.upcoming(customer: @customer.id)
|
170
186
|
|
@@ -175,7 +191,7 @@ shared_examples 'Invoice API' do
|
|
175
191
|
end
|
176
192
|
|
177
193
|
it 'for one year plan on feb. 29th' do
|
178
|
-
@plan =
|
194
|
+
@plan = stripe_helper.create_plan(interval: "year")
|
179
195
|
@sub = @customer.subscriptions.create(plan: @plan.id, current_period_start: Time.utc(2012,2,29,12).to_i)
|
180
196
|
@upcoming = Stripe::Invoice.upcoming(customer: @customer.id)
|
181
197
|
|
@@ -186,7 +202,7 @@ shared_examples 'Invoice API' do
|
|
186
202
|
end
|
187
203
|
|
188
204
|
it 'for two month plan on dec. 31st' do
|
189
|
-
@plan =
|
205
|
+
@plan = stripe_helper.create_plan(interval_count: 2)
|
190
206
|
@sub = @customer.subscriptions.create(plan: @plan.id, current_period_start: Time.utc(2013,12,31,12).to_i)
|
191
207
|
@upcoming = Stripe::Invoice.upcoming(customer: @customer.id)
|
192
208
|
|
@@ -197,7 +213,7 @@ shared_examples 'Invoice API' do
|
|
197
213
|
end
|
198
214
|
|
199
215
|
it 'for three month plan on nov. 30th' do
|
200
|
-
@plan =
|
216
|
+
@plan = stripe_helper.create_plan(interval_count: 3)
|
201
217
|
@sub = @customer.subscriptions.create(plan: @plan.id, current_period_start: Time.utc(2013,11,30,12).to_i)
|
202
218
|
@upcoming = Stripe::Invoice.upcoming(customer: @customer.id)
|
203
219
|
|
@@ -2,16 +2,68 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
shared_examples 'Invoice Item API' do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
5
|
+
context "creating a new invoice item" do
|
6
|
+
it "creates a stripe invoice item" do
|
7
|
+
invoice_item = Stripe::InvoiceItem.create({
|
8
|
+
amount: 1099,
|
9
|
+
customer: 1234,
|
10
|
+
currency: 'USD',
|
11
|
+
description: "invoice item desc"
|
12
|
+
}, 'abcde')
|
13
|
+
|
14
|
+
expect(invoice_item.id).to match(/^test_ii/)
|
15
|
+
expect(invoice_item.amount).to eq(1099)
|
16
|
+
expect(invoice_item.description).to eq('invoice item desc')
|
17
|
+
end
|
18
|
+
|
19
|
+
it "stores a created stripe invoice item in memory" do
|
20
|
+
invoice_item = Stripe::InvoiceItem.create
|
21
|
+
data = test_data_source(:invoice_items)
|
22
|
+
expect(data[invoice_item.id]).to_not be_nil
|
23
|
+
expect(data[invoice_item.id][:id]).to eq(invoice_item.id)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "retrieving an invoice item" do
|
28
|
+
it "retrieves a stripe invoice item" do
|
29
|
+
original = Stripe::InvoiceItem.create
|
30
|
+
invoice_item = Stripe::InvoiceItem.retrieve(original.id)
|
31
|
+
expect(invoice_item.id).to eq(original.id)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "retrieving a list of invoice items" do
|
36
|
+
before do
|
37
|
+
Stripe::InvoiceItem.create({ amount: 1075 })
|
38
|
+
Stripe::InvoiceItem.create({ amount: 1540 })
|
39
|
+
end
|
40
|
+
|
41
|
+
it "retrieves all invoice items" do
|
42
|
+
all = Stripe::InvoiceItem.all
|
43
|
+
expect(all.length).to eq(2)
|
44
|
+
expect(all.map &:amount).to include(1075, 1540)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it "updates a stripe invoice_item" do
|
49
|
+
original = Stripe::InvoiceItem.create(id: 'test_invoice_item_update')
|
50
|
+
amount = original.amount
|
51
|
+
|
52
|
+
original.description = 'new desc'
|
53
|
+
original.save
|
54
|
+
|
55
|
+
expect(original.amount).to eq(amount)
|
56
|
+
expect(original.description).to eq('new desc')
|
57
|
+
|
58
|
+
invoice_item = Stripe::InvoiceItem.retrieve("test_invoice_item_update")
|
59
|
+
expect(invoice_item.amount).to eq(original.amount)
|
60
|
+
expect(invoice_item.description).to eq('new desc')
|
61
|
+
end
|
62
|
+
|
63
|
+
it "deletes a invoice_item" do
|
64
|
+
invoice_item = Stripe::InvoiceItem.create(id: 'test_invoice_item_sub')
|
65
|
+
invoice_item = invoice_item.delete
|
66
|
+
expect(invoice_item.deleted).to eq true
|
15
67
|
end
|
16
68
|
|
17
69
|
end
|