stripe 3.0.3 → 3.1.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 +4 -4
- data/.travis.yml +23 -0
- data/Gemfile +1 -2
- data/History.txt +4 -0
- data/README.md +28 -3
- data/Rakefile +0 -12
- data/VERSION +1 -1
- data/lib/stripe.rb +24 -0
- data/lib/stripe/stripe_client.rb +166 -19
- data/lib/stripe/util.rb +127 -8
- data/lib/stripe/version.rb +1 -1
- data/test/api_stub_helpers.rb +0 -125
- data/test/stripe/account_test.rb +11 -13
- data/test/stripe/alipay_account_test.rb +2 -4
- data/test/stripe/api_resource_test.rb +112 -76
- data/test/stripe/apple_pay_domain_test.rb +4 -6
- data/test/stripe/application_fee_refund_test.rb +2 -5
- data/test/stripe/application_fee_test.rb +0 -2
- data/test/stripe/bank_account_test.rb +8 -13
- data/test/stripe/bitcoin_receiver_test.rb +13 -16
- data/test/stripe/bitcoin_transaction_test.rb +2 -4
- data/test/stripe/charge_test.rb +9 -11
- data/test/stripe/country_spec_test.rb +2 -4
- data/test/stripe/coupon_test.rb +6 -8
- data/test/stripe/customer_card_test.rb +13 -9
- data/test/stripe/customer_test.rb +16 -18
- data/test/stripe/dispute_test.rb +8 -10
- data/test/stripe/file_upload_test.rb +3 -3
- data/test/stripe/invoice_item_test.rb +9 -11
- data/test/stripe/invoice_line_item_test.rb +0 -1
- data/test/stripe/invoice_test.rb +39 -21
- data/test/stripe/list_object_test.rb +1 -1
- data/test/stripe/login_link_test.rb +6 -7
- data/test/stripe/order_return_test.rb +2 -4
- data/test/stripe/order_test.rb +10 -12
- data/test/stripe/payout_test.rb +7 -9
- data/test/stripe/plan_test.rb +8 -10
- data/test/stripe/product_test.rb +8 -10
- data/test/stripe/recipient_card_test.rb +13 -9
- data/test/stripe/recipient_test.rb +8 -10
- data/test/stripe/refund_test.rb +7 -9
- data/test/stripe/reversal_test.rb +5 -7
- data/test/stripe/sku_test.rb +9 -11
- data/test/stripe/source_test.rb +16 -15
- data/test/stripe/stripe_client_test.rb +190 -26
- data/test/stripe/subscription_item_test.rb +12 -14
- data/test/stripe/subscription_test.rb +10 -12
- data/test/stripe/three_d_secure_test.rb +3 -5
- data/test/stripe/transfer_test.rb +7 -9
- data/test/stripe/util_test.rb +164 -0
- data/test/test_helper.rb +33 -18
- metadata +2 -8
- data/openapi/fixtures.json +0 -1896
- data/openapi/fixtures.yaml +0 -1505
- data/openapi/spec2.json +0 -24601
- data/openapi/spec2.yaml +0 -18801
- data/test/api_fixtures.rb +0 -29
data/test/stripe/product_test.rb
CHANGED
@@ -2,8 +2,6 @@ require File.expand_path('../../test_helper', __FILE__)
|
|
2
2
|
|
3
3
|
module Stripe
|
4
4
|
class ProductTest < Test::Unit::TestCase
|
5
|
-
FIXTURE = API_FIXTURES.fetch(:product)
|
6
|
-
|
7
5
|
should "be listable" do
|
8
6
|
products = Stripe::Product.list
|
9
7
|
assert_requested :get, "#{Stripe.api_base}/v1/products"
|
@@ -12,8 +10,8 @@ module Stripe
|
|
12
10
|
end
|
13
11
|
|
14
12
|
should "be retrievable" do
|
15
|
-
product = Stripe::Product.retrieve(
|
16
|
-
assert_requested :get, "#{Stripe.api_base}/v1/products
|
13
|
+
product = Stripe::Product.retrieve("prod_123")
|
14
|
+
assert_requested :get, "#{Stripe.api_base}/v1/products/prod_123"
|
17
15
|
assert product.kind_of?(Stripe::Product)
|
18
16
|
end
|
19
17
|
|
@@ -25,22 +23,22 @@ module Stripe
|
|
25
23
|
end
|
26
24
|
|
27
25
|
should "be saveable" do
|
28
|
-
product = Stripe::Product.retrieve(
|
26
|
+
product = Stripe::Product.retrieve("prod_123")
|
29
27
|
product.metadata['key'] = 'value'
|
30
28
|
product.save
|
31
|
-
assert_requested :post, "#{Stripe.api_base}/v1/products/#{
|
29
|
+
assert_requested :post, "#{Stripe.api_base}/v1/products/#{product.id}"
|
32
30
|
end
|
33
31
|
|
34
32
|
should "be updateable" do
|
35
|
-
product = Stripe::Product.update(
|
36
|
-
assert_requested :post, "#{Stripe.api_base}/v1/products
|
33
|
+
product = Stripe::Product.update("prod_123", metadata: {foo: 'bar'})
|
34
|
+
assert_requested :post, "#{Stripe.api_base}/v1/products/prod_123"
|
37
35
|
assert product.kind_of?(Stripe::Product)
|
38
36
|
end
|
39
37
|
|
40
38
|
should "be deletable" do
|
41
|
-
product = Stripe::Product.retrieve(
|
39
|
+
product = Stripe::Product.retrieve("prod_123")
|
42
40
|
product = product.delete
|
43
|
-
assert_requested :delete, "#{Stripe.api_base}/v1/products/#{
|
41
|
+
assert_requested :delete, "#{Stripe.api_base}/v1/products/#{product.id}"
|
44
42
|
assert product.kind_of?(Stripe::Product)
|
45
43
|
end
|
46
44
|
end
|
@@ -2,11 +2,8 @@ require File.expand_path('../../test_helper', __FILE__)
|
|
2
2
|
|
3
3
|
module Stripe
|
4
4
|
class RecipientCardTest < Test::Unit::TestCase
|
5
|
-
FIXTURE = API_FIXTURES.fetch(:source)
|
6
|
-
|
7
5
|
setup do
|
8
|
-
@recipient =
|
9
|
-
Stripe::Recipient.retrieve(API_FIXTURES.fetch(:transfer_recipient)[:id])
|
6
|
+
@recipient = Stripe::Recipient.retrieve("rp_123")
|
10
7
|
end
|
11
8
|
|
12
9
|
should "be listable" do
|
@@ -17,24 +14,31 @@ module Stripe
|
|
17
14
|
|
18
15
|
should "be creatable" do
|
19
16
|
card = @recipient.cards.create(
|
20
|
-
card:
|
17
|
+
card: "tok_123"
|
21
18
|
)
|
22
19
|
assert_requested :post, "#{Stripe.api_base}/v1/recipients/#{@recipient.id}/cards"
|
23
20
|
assert card.kind_of?(Stripe::Card)
|
24
21
|
end
|
25
22
|
|
26
23
|
should "be deletable" do
|
27
|
-
card = Stripe::Card.construct_from(
|
24
|
+
card = Stripe::Card.construct_from({
|
25
|
+
id: "card_123",
|
26
|
+
recipient: @recipient.id
|
27
|
+
})
|
28
28
|
card = card.delete
|
29
|
-
assert_requested :delete, "#{Stripe.api_base}/v1/recipients/#{@recipient.id}/cards
|
29
|
+
assert_requested :delete, "#{Stripe.api_base}/v1/recipients/#{@recipient.id}/cards/card_123"
|
30
30
|
assert card.kind_of?(Stripe::Card)
|
31
31
|
end
|
32
32
|
|
33
33
|
should "be saveable" do
|
34
|
-
card = Stripe::Card.construct_from(
|
34
|
+
card = Stripe::Card.construct_from({
|
35
|
+
id: "card_123",
|
36
|
+
metadata: {},
|
37
|
+
recipient: @recipient.id
|
38
|
+
})
|
35
39
|
card.metadata['key'] = 'value'
|
36
40
|
card.save
|
37
|
-
assert_requested :post, "#{Stripe.api_base}/v1/recipients/#{@recipient.id}/cards
|
41
|
+
assert_requested :post, "#{Stripe.api_base}/v1/recipients/#{@recipient.id}/cards/card_123"
|
38
42
|
end
|
39
43
|
end
|
40
44
|
end
|
@@ -2,8 +2,6 @@ require File.expand_path('../../test_helper', __FILE__)
|
|
2
2
|
|
3
3
|
module Stripe
|
4
4
|
class RecipientTest < Test::Unit::TestCase
|
5
|
-
FIXTURE = API_FIXTURES.fetch(:transfer_recipient)
|
6
|
-
|
7
5
|
should "be listable" do
|
8
6
|
recipients = Stripe::Recipient.list
|
9
7
|
assert_requested :get, "#{Stripe.api_base}/v1/recipients"
|
@@ -12,8 +10,8 @@ module Stripe
|
|
12
10
|
end
|
13
11
|
|
14
12
|
should "be retrievable" do
|
15
|
-
recipient = Stripe::Recipient.retrieve(
|
16
|
-
assert_requested :get, "#{Stripe.api_base}/v1/recipients
|
13
|
+
recipient = Stripe::Recipient.retrieve("rp_123")
|
14
|
+
assert_requested :get, "#{Stripe.api_base}/v1/recipients/rp_123"
|
17
15
|
assert recipient.kind_of?(Stripe::Recipient)
|
18
16
|
end
|
19
17
|
|
@@ -27,22 +25,22 @@ module Stripe
|
|
27
25
|
end
|
28
26
|
|
29
27
|
should "be saveable" do
|
30
|
-
recipient = Stripe::Recipient.retrieve(
|
28
|
+
recipient = Stripe::Recipient.retrieve("rp_123")
|
31
29
|
recipient.metadata['key'] = 'value'
|
32
30
|
recipient.save
|
33
|
-
assert_requested :post, "#{Stripe.api_base}/v1/recipients/#{
|
31
|
+
assert_requested :post, "#{Stripe.api_base}/v1/recipients/#{recipient.id}"
|
34
32
|
end
|
35
33
|
|
36
34
|
should "be updateable" do
|
37
|
-
recipient = Stripe::Recipient.update(
|
38
|
-
assert_requested :post, "#{Stripe.api_base}/v1/recipients
|
35
|
+
recipient = Stripe::Recipient.update("rp_123", metadata: {foo: 'bar'})
|
36
|
+
assert_requested :post, "#{Stripe.api_base}/v1/recipients/rp_123"
|
39
37
|
assert recipient.kind_of?(Stripe::Recipient)
|
40
38
|
end
|
41
39
|
|
42
40
|
should "be deletable" do
|
43
|
-
recipient = Stripe::Recipient.retrieve(
|
41
|
+
recipient = Stripe::Recipient.retrieve("rp_123")
|
44
42
|
recipient = recipient.delete
|
45
|
-
assert_requested :delete, "#{Stripe.api_base}/v1/recipients/#{
|
43
|
+
assert_requested :delete, "#{Stripe.api_base}/v1/recipients/#{recipient.id}"
|
46
44
|
assert recipient.kind_of?(Stripe::Recipient)
|
47
45
|
end
|
48
46
|
end
|
data/test/stripe/refund_test.rb
CHANGED
@@ -2,8 +2,6 @@ require File.expand_path('../../test_helper', __FILE__)
|
|
2
2
|
|
3
3
|
module Stripe
|
4
4
|
class RefundTest < Test::Unit::TestCase
|
5
|
-
FIXTURE = API_FIXTURES.fetch(:refund)
|
6
|
-
|
7
5
|
should "be listable" do
|
8
6
|
refunds = Stripe::Refund.list
|
9
7
|
assert_requested :get, "#{Stripe.api_base}/v1/refunds"
|
@@ -12,27 +10,27 @@ module Stripe
|
|
12
10
|
end
|
13
11
|
|
14
12
|
should "be retrievable" do
|
15
|
-
refund = Stripe::Refund.retrieve(
|
16
|
-
assert_requested :get, "#{Stripe.api_base}/v1/refunds
|
13
|
+
refund = Stripe::Refund.retrieve("re_123")
|
14
|
+
assert_requested :get, "#{Stripe.api_base}/v1/refunds/re_123"
|
17
15
|
assert refund.kind_of?(Stripe::Refund)
|
18
16
|
end
|
19
17
|
|
20
18
|
should "be creatable" do
|
21
|
-
refund = Stripe::Refund.create(:charge =>
|
19
|
+
refund = Stripe::Refund.create(:charge => "ch_123")
|
22
20
|
assert_requested :post, "#{Stripe.api_base}/v1/refunds"
|
23
21
|
assert refund.kind_of?(Stripe::Refund)
|
24
22
|
end
|
25
23
|
|
26
24
|
should "be saveable" do
|
27
|
-
refund = Stripe::Refund.retrieve(
|
25
|
+
refund = Stripe::Refund.retrieve("re_123")
|
28
26
|
refund.metadata['key'] = 'value'
|
29
27
|
refund.save
|
30
|
-
assert_requested :post, "#{Stripe.api_base}/v1/refunds/#{
|
28
|
+
assert_requested :post, "#{Stripe.api_base}/v1/refunds/#{refund.id}"
|
31
29
|
end
|
32
30
|
|
33
31
|
should "be updateable" do
|
34
|
-
refund = Stripe::Refund.update(
|
35
|
-
assert_requested :post, "#{Stripe.api_base}/v1/refunds
|
32
|
+
refund = Stripe::Refund.update("re_123", metadata: { key: 'value' })
|
33
|
+
assert_requested :post, "#{Stripe.api_base}/v1/refunds/re_123"
|
36
34
|
assert refund.kind_of?(Stripe::Refund)
|
37
35
|
end
|
38
36
|
end
|
@@ -2,10 +2,8 @@ require File.expand_path('../../test_helper', __FILE__)
|
|
2
2
|
|
3
3
|
module Stripe
|
4
4
|
class ReversalTest < Test::Unit::TestCase
|
5
|
-
FIXTURE = API_FIXTURES.fetch(:transfer_reversal)
|
6
|
-
|
7
5
|
setup do
|
8
|
-
@transfer = Stripe::Transfer.retrieve(
|
6
|
+
@transfer = Stripe::Transfer.retrieve("tr_123")
|
9
7
|
end
|
10
8
|
|
11
9
|
should "be listable" do
|
@@ -17,9 +15,9 @@ module Stripe
|
|
17
15
|
end
|
18
16
|
|
19
17
|
should "be retrievable" do
|
20
|
-
reversal = @transfer.reversals.retrieve(
|
18
|
+
reversal = @transfer.reversals.retrieve("trr_123")
|
21
19
|
assert_requested :get,
|
22
|
-
"#{Stripe.api_base}/v1/transfers/#{@transfer.id}/reversals
|
20
|
+
"#{Stripe.api_base}/v1/transfers/#{@transfer.id}/reversals/trr_123"
|
23
21
|
assert reversal.kind_of?(Stripe::Reversal)
|
24
22
|
end
|
25
23
|
|
@@ -33,11 +31,11 @@ module Stripe
|
|
33
31
|
end
|
34
32
|
|
35
33
|
should "be saveable" do
|
36
|
-
reversal = @transfer.reversals.retrieve(
|
34
|
+
reversal = @transfer.reversals.retrieve("trr_123")
|
37
35
|
reversal.metadata['key'] = 'value'
|
38
36
|
reversal.save
|
39
37
|
assert_requested :post,
|
40
|
-
"#{Stripe.api_base}/v1/transfers/#{@transfer.id}/reversals/#{
|
38
|
+
"#{Stripe.api_base}/v1/transfers/#{@transfer.id}/reversals/#{reversal.id}"
|
41
39
|
end
|
42
40
|
end
|
43
41
|
end
|
data/test/stripe/sku_test.rb
CHANGED
@@ -2,8 +2,6 @@ require File.expand_path('../../test_helper', __FILE__)
|
|
2
2
|
|
3
3
|
module Stripe
|
4
4
|
class SKUTest < Test::Unit::TestCase
|
5
|
-
FIXTURE = API_FIXTURES.fetch(:sku)
|
6
|
-
|
7
5
|
should "be listable" do
|
8
6
|
skus = Stripe::SKU.list
|
9
7
|
assert_requested :get, "#{Stripe.api_base}/v1/skus"
|
@@ -12,8 +10,8 @@ module Stripe
|
|
12
10
|
end
|
13
11
|
|
14
12
|
should "be retrievable" do
|
15
|
-
sku = Stripe::SKU.retrieve(
|
16
|
-
assert_requested :get, "#{Stripe.api_base}/v1/skus
|
13
|
+
sku = Stripe::SKU.retrieve("sku_123")
|
14
|
+
assert_requested :get, "#{Stripe.api_base}/v1/skus/sku_123"
|
17
15
|
assert sku.kind_of?(Stripe::SKU)
|
18
16
|
end
|
19
17
|
|
@@ -22,28 +20,28 @@ module Stripe
|
|
22
20
|
currency: "USD",
|
23
21
|
inventory: { type: "finite", quantity: 500 },
|
24
22
|
price: 100,
|
25
|
-
product:
|
23
|
+
product: "prod_123"
|
26
24
|
)
|
27
25
|
assert_requested :post, "#{Stripe.api_base}/v1/skus"
|
28
26
|
end
|
29
27
|
|
30
28
|
should "be saveable" do
|
31
|
-
sku = Stripe::SKU.retrieve(
|
29
|
+
sku = Stripe::SKU.retrieve("sku_123")
|
32
30
|
sku.metadata['key'] = 'value'
|
33
31
|
sku.save
|
34
|
-
assert_requested :post, "#{Stripe.api_base}/v1/skus/#{
|
32
|
+
assert_requested :post, "#{Stripe.api_base}/v1/skus/#{sku.id}"
|
35
33
|
end
|
36
34
|
|
37
35
|
should "be updateable" do
|
38
|
-
sku = Stripe::SKU.update(
|
39
|
-
assert_requested :post, "#{Stripe.api_base}/v1/skus
|
36
|
+
sku = Stripe::SKU.update("sku_123", metadata: {foo: 'bar'})
|
37
|
+
assert_requested :post, "#{Stripe.api_base}/v1/skus/sku_123"
|
40
38
|
assert sku.kind_of?(Stripe::SKU)
|
41
39
|
end
|
42
40
|
|
43
41
|
should "be deletable" do
|
44
|
-
sku = Stripe::SKU.retrieve(
|
42
|
+
sku = Stripe::SKU.retrieve("sku_123")
|
45
43
|
sku = sku.delete
|
46
|
-
assert_requested :delete, "#{Stripe.api_base}/v1/skus/#{
|
44
|
+
assert_requested :delete, "#{Stripe.api_base}/v1/skus/#{sku.id}"
|
47
45
|
assert sku.kind_of?(Stripe::SKU)
|
48
46
|
end
|
49
47
|
end
|
data/test/stripe/source_test.rb
CHANGED
@@ -2,39 +2,37 @@ require File.expand_path('../../test_helper', __FILE__)
|
|
2
2
|
|
3
3
|
module Stripe
|
4
4
|
class SourceTest < Test::Unit::TestCase
|
5
|
-
FIXTURE = API_FIXTURES.fetch(:source)
|
6
|
-
|
7
5
|
should "be retrievable" do
|
8
|
-
source = Stripe::Source.retrieve(
|
9
|
-
assert_requested :get, "#{Stripe.api_base}/v1/sources
|
6
|
+
source = Stripe::Source.retrieve("src_123")
|
7
|
+
assert_requested :get, "#{Stripe.api_base}/v1/sources/src_123"
|
10
8
|
assert source.kind_of?(Stripe::Source)
|
11
9
|
end
|
12
10
|
|
13
11
|
should "be creatable" do
|
14
12
|
source = Stripe::Source.create(
|
15
13
|
type: 'card',
|
16
|
-
token:
|
14
|
+
token: "tok_123"
|
17
15
|
)
|
18
16
|
assert_requested :post, "#{Stripe.api_base}/v1/sources"
|
19
17
|
assert source.kind_of?(Stripe::Source)
|
20
18
|
end
|
21
19
|
|
22
20
|
should "be saveable" do
|
23
|
-
source = Stripe::Source.retrieve(
|
21
|
+
source = Stripe::Source.retrieve("src_123")
|
24
22
|
source.metadata['key'] = 'value'
|
25
23
|
source.save
|
26
|
-
assert_requested :post, "#{Stripe.api_base}/v1/sources/#{
|
24
|
+
assert_requested :post, "#{Stripe.api_base}/v1/sources/#{source.id}"
|
27
25
|
end
|
28
26
|
|
29
27
|
should "be updateable" do
|
30
|
-
source = Stripe::Source.update(
|
31
|
-
assert_requested :post, "#{Stripe.api_base}/v1/sources
|
28
|
+
source = Stripe::Source.update("src_123", metadata: {foo: 'bar'})
|
29
|
+
assert_requested :post, "#{Stripe.api_base}/v1/sources/src_123"
|
32
30
|
assert source.kind_of?(Stripe::Source)
|
33
31
|
end
|
34
32
|
|
35
33
|
context "#delete" do
|
36
34
|
should "not be deletable when unattached" do
|
37
|
-
source = Stripe::Source.retrieve(
|
35
|
+
source = Stripe::Source.retrieve("src_123")
|
38
36
|
|
39
37
|
assert_raises NotImplementedError do
|
40
38
|
source.delete
|
@@ -42,10 +40,13 @@ module Stripe
|
|
42
40
|
end
|
43
41
|
|
44
42
|
should "be deletable when attached to a customer" do
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
43
|
+
source = Stripe::Source.construct_from({
|
44
|
+
customer: "cus_123",
|
45
|
+
id: "src_123",
|
46
|
+
object: "source"
|
47
|
+
})
|
48
|
+
source = source.delete
|
49
|
+
assert_requested :delete, "#{Stripe.api_base}/v1/customers/cus_123/sources/src_123"
|
49
50
|
assert source.kind_of?(Stripe::Source)
|
50
51
|
end
|
51
52
|
end
|
@@ -58,7 +59,7 @@ module Stripe
|
|
58
59
|
|
59
60
|
context "#verify" do
|
60
61
|
should "verify the source" do
|
61
|
-
source = Stripe::Source.retrieve(
|
62
|
+
source = Stripe::Source.retrieve("src_123")
|
62
63
|
source = source.verify(:values => [1,2])
|
63
64
|
assert source.kind_of?(Stripe::Source)
|
64
65
|
end
|
@@ -121,7 +121,7 @@ module Stripe
|
|
121
121
|
should "support literal headers" do
|
122
122
|
stub_request(:post, "#{Stripe.api_base}/v1/account").
|
123
123
|
with(headers: { "Stripe-Account" => "bar" }).
|
124
|
-
to_return(body: JSON.generate(
|
124
|
+
to_return(body: JSON.generate({ object: "account" }))
|
125
125
|
|
126
126
|
client = StripeClient.new
|
127
127
|
client.execute_request(:post, '/v1/account',
|
@@ -132,7 +132,7 @@ module Stripe
|
|
132
132
|
should "support RestClient-style header keys" do
|
133
133
|
stub_request(:post, "#{Stripe.api_base}/v1/account").
|
134
134
|
with(headers: { "Stripe-Account" => "bar" }).
|
135
|
-
to_return(body: JSON.generate(
|
135
|
+
to_return(body: JSON.generate({ object: "account" }))
|
136
136
|
|
137
137
|
client = StripeClient.new
|
138
138
|
client.execute_request(:post, '/v1/account',
|
@@ -141,6 +141,158 @@ module Stripe
|
|
141
141
|
end
|
142
142
|
end
|
143
143
|
|
144
|
+
context "logging" do
|
145
|
+
setup do
|
146
|
+
# Freeze time for the purposes of the `elapsed` parameter that we
|
147
|
+
# emit for responses. I didn't want to bring in a new dependency for
|
148
|
+
# this, but Mocha's `anything` parameter can't match inside of a hash
|
149
|
+
# and is therefore not useful for this purpose. If we switch over to
|
150
|
+
# rspec-mocks at some point, we can probably remove Timecop from the
|
151
|
+
# project.
|
152
|
+
Timecop.freeze(Time.local(1990))
|
153
|
+
end
|
154
|
+
|
155
|
+
teardown do
|
156
|
+
Timecop.return
|
157
|
+
end
|
158
|
+
|
159
|
+
should "produce appropriate logging" do
|
160
|
+
body = JSON.generate({ object: "account" })
|
161
|
+
|
162
|
+
Util.expects(:log_info).with("Request to Stripe API",
|
163
|
+
api_version: '2010-11-12',
|
164
|
+
idempotency_key: "abc",
|
165
|
+
method: :post,
|
166
|
+
path: "/v1/account"
|
167
|
+
)
|
168
|
+
Util.expects(:log_debug).with("Request details",
|
169
|
+
body: '',
|
170
|
+
idempotency_key: "abc"
|
171
|
+
)
|
172
|
+
|
173
|
+
Util.expects(:log_info).with("Response from Stripe API",
|
174
|
+
api_version: '2010-11-12',
|
175
|
+
elapsed: 0.0,
|
176
|
+
idempotency_key: "abc",
|
177
|
+
method: :post,
|
178
|
+
path: "/v1/account",
|
179
|
+
request_id: "req_123",
|
180
|
+
status: 200
|
181
|
+
)
|
182
|
+
Util.expects(:log_debug).with("Response details",
|
183
|
+
body: body,
|
184
|
+
idempotency_key: "abc",
|
185
|
+
request_id: "req_123"
|
186
|
+
)
|
187
|
+
Util.expects(:log_debug).with("Dashboard link for request",
|
188
|
+
idempotency_key: "abc",
|
189
|
+
request_id: "req_123",
|
190
|
+
url: Util.request_id_dashboard_url("req_123", Stripe.api_key)
|
191
|
+
)
|
192
|
+
|
193
|
+
stub_request(:post, "#{Stripe.api_base}/v1/account").
|
194
|
+
to_return(
|
195
|
+
body: body,
|
196
|
+
headers: {
|
197
|
+
"Idempotency-Key" => "abc",
|
198
|
+
"Request-Id" => "req_123",
|
199
|
+
"Stripe-Version" => "2010-11-12"
|
200
|
+
}
|
201
|
+
)
|
202
|
+
|
203
|
+
client = StripeClient.new
|
204
|
+
client.execute_request(:post, '/v1/account',
|
205
|
+
headers: {
|
206
|
+
"Idempotency-Key" => "abc",
|
207
|
+
"Stripe-Version" => "2010-11-12"
|
208
|
+
}
|
209
|
+
)
|
210
|
+
end
|
211
|
+
|
212
|
+
should "produce logging on API error" do
|
213
|
+
Util.expects(:log_info).with("Request to Stripe API",
|
214
|
+
api_version: nil,
|
215
|
+
idempotency_key: nil,
|
216
|
+
method: :post,
|
217
|
+
path: "/v1/account"
|
218
|
+
)
|
219
|
+
Util.expects(:log_info).with("Response from Stripe API",
|
220
|
+
api_version: nil,
|
221
|
+
elapsed: 0.0,
|
222
|
+
idempotency_key: nil,
|
223
|
+
method: :post,
|
224
|
+
path: "/v1/account",
|
225
|
+
request_id: nil,
|
226
|
+
status: 500
|
227
|
+
)
|
228
|
+
|
229
|
+
error = {
|
230
|
+
code: 'code',
|
231
|
+
message: 'message',
|
232
|
+
param: 'param',
|
233
|
+
type: 'type',
|
234
|
+
}
|
235
|
+
Util.expects(:log_info).with('Stripe API error',
|
236
|
+
status: 500,
|
237
|
+
error_code: error['code'],
|
238
|
+
error_message: error['message'],
|
239
|
+
error_param: error['param'],
|
240
|
+
error_type: error['type'],
|
241
|
+
idempotency_key: nil,
|
242
|
+
request_id: nil
|
243
|
+
)
|
244
|
+
|
245
|
+
stub_request(:post, "#{Stripe.api_base}/v1/account").
|
246
|
+
to_return(
|
247
|
+
body: JSON.generate({ :error => error }),
|
248
|
+
status: 500
|
249
|
+
)
|
250
|
+
|
251
|
+
client = StripeClient.new
|
252
|
+
assert_raises Stripe::APIError do
|
253
|
+
client.execute_request(:post, '/v1/account')
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
should "produce logging on OAuth error" do
|
258
|
+
Util.expects(:log_info).with("Request to Stripe API",
|
259
|
+
api_version: nil,
|
260
|
+
idempotency_key: nil,
|
261
|
+
method: :post,
|
262
|
+
path: "/oauth/token"
|
263
|
+
)
|
264
|
+
Util.expects(:log_info).with("Response from Stripe API",
|
265
|
+
api_version: nil,
|
266
|
+
elapsed: 0.0,
|
267
|
+
idempotency_key: nil,
|
268
|
+
method: :post,
|
269
|
+
path: "/oauth/token",
|
270
|
+
request_id: nil,
|
271
|
+
status: 400
|
272
|
+
)
|
273
|
+
|
274
|
+
Util.expects(:log_info).with('Stripe OAuth error',
|
275
|
+
status: 400,
|
276
|
+
error_code: "invalid_request",
|
277
|
+
error_description: "No grant type specified",
|
278
|
+
idempotency_key: nil,
|
279
|
+
request_id: nil
|
280
|
+
)
|
281
|
+
|
282
|
+
stub_request(:post, "#{Stripe.connect_base}/oauth/token").
|
283
|
+
to_return(body: JSON.generate({
|
284
|
+
error: "invalid_request",
|
285
|
+
error_description: "No grant type specified",
|
286
|
+
}), status: 400)
|
287
|
+
|
288
|
+
client = StripeClient.new
|
289
|
+
opts = {api_base: Stripe.connect_base}
|
290
|
+
assert_raises Stripe::OAuth::InvalidRequestError do
|
291
|
+
client.execute_request(:post, '/oauth/token', opts)
|
292
|
+
end
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
144
296
|
context "Stripe-Account header" do
|
145
297
|
should "use a globally set header" do
|
146
298
|
begin
|
@@ -149,7 +301,7 @@ module Stripe
|
|
149
301
|
|
150
302
|
stub_request(:post, "#{Stripe.api_base}/v1/account").
|
151
303
|
with(headers: {"Stripe-Account" => Stripe.stripe_account}).
|
152
|
-
to_return(body: JSON.generate(
|
304
|
+
to_return(body: JSON.generate({ object: "account" }))
|
153
305
|
|
154
306
|
client = StripeClient.new
|
155
307
|
client.execute_request(:post, '/v1/account')
|
@@ -162,7 +314,7 @@ module Stripe
|
|
162
314
|
stripe_account = "acct_0000"
|
163
315
|
stub_request(:post, "#{Stripe.api_base}/v1/account").
|
164
316
|
with(headers: {"Stripe-Account" => stripe_account}).
|
165
|
-
to_return(body: JSON.generate(
|
317
|
+
to_return(body: JSON.generate({ object: "account" }))
|
166
318
|
|
167
319
|
client = StripeClient.new
|
168
320
|
client.execute_request(:post, '/v1/account',
|
@@ -174,7 +326,7 @@ module Stripe
|
|
174
326
|
stub_request(:post, "#{Stripe.api_base}/v1/account").
|
175
327
|
with { |req|
|
176
328
|
req.headers["Stripe-Account"].nil?
|
177
|
-
}.to_return(body: JSON.generate(
|
329
|
+
}.to_return(body: JSON.generate({ object: "account" }))
|
178
330
|
|
179
331
|
client = StripeClient.new
|
180
332
|
client.execute_request(:post, '/v1/account')
|
@@ -208,7 +360,7 @@ module Stripe
|
|
208
360
|
}, data[:application])
|
209
361
|
|
210
362
|
true
|
211
|
-
}.to_return(body: JSON.generate(
|
363
|
+
}.to_return(body: JSON.generate({ object: "account" }))
|
212
364
|
|
213
365
|
client = StripeClient.new
|
214
366
|
client.execute_request(:post, '/v1/account')
|
@@ -413,30 +565,30 @@ module Stripe
|
|
413
565
|
|
414
566
|
should 'not add an idempotency key to GET requests' do
|
415
567
|
SecureRandom.expects(:uuid).times(0)
|
416
|
-
stub_request(:get, "#{Stripe.api_base}/v1/charges
|
568
|
+
stub_request(:get, "#{Stripe.api_base}/v1/charges/ch_123").
|
417
569
|
with { |req|
|
418
570
|
req.headers['Idempotency-Key'].nil?
|
419
|
-
}.to_return(body: JSON.generate(
|
571
|
+
}.to_return(body: JSON.generate({ object: "charge" }))
|
420
572
|
client = StripeClient.new
|
421
|
-
client.execute_request(:get, "/v1/charges
|
573
|
+
client.execute_request(:get, "/v1/charges/ch_123")
|
422
574
|
end
|
423
575
|
|
424
576
|
should 'ensure there is always an idempotency_key on POST requests' do
|
425
577
|
SecureRandom.expects(:uuid).at_least_once.returns("random_key")
|
426
578
|
stub_request(:post, "#{Stripe.api_base}/v1/charges").
|
427
579
|
with(headers: {"Idempotency-Key" => "random_key"}).
|
428
|
-
to_return(body: JSON.generate(
|
580
|
+
to_return(body: JSON.generate({ object: "charge" }))
|
429
581
|
client = StripeClient.new
|
430
582
|
client.execute_request(:post, "/v1/charges")
|
431
583
|
end
|
432
584
|
|
433
585
|
should 'ensure there is always an idempotency_key on DELETE requests' do
|
434
586
|
SecureRandom.expects(:uuid).at_least_once.returns("random_key")
|
435
|
-
stub_request(:delete, "#{Stripe.api_base}/v1/charges
|
587
|
+
stub_request(:delete, "#{Stripe.api_base}/v1/charges/ch_123").
|
436
588
|
with(headers: {"Idempotency-Key" => "random_key"}).
|
437
|
-
to_return(body: JSON.generate(
|
589
|
+
to_return(body: JSON.generate({ object: "charge" }))
|
438
590
|
client = StripeClient.new
|
439
|
-
client.execute_request(:delete, "/v1/charges
|
591
|
+
client.execute_request(:delete, "/v1/charges/ch_123")
|
440
592
|
end
|
441
593
|
|
442
594
|
should 'not override a provided idempotency_key' do
|
@@ -448,7 +600,7 @@ module Stripe
|
|
448
600
|
# expected.
|
449
601
|
stub_request(:post, "#{Stripe.api_base}/v1/charges").
|
450
602
|
with(headers: {"Idempotency-Key" => "provided_key"}).
|
451
|
-
to_return(body: JSON.generate(
|
603
|
+
to_return(body: JSON.generate({ object: "charge" }))
|
452
604
|
|
453
605
|
client = StripeClient.new
|
454
606
|
client.execute_request(:post, "/v1/charges",
|
@@ -495,21 +647,33 @@ module Stripe
|
|
495
647
|
context "params serialization" do
|
496
648
|
should 'allows empty strings in params' do
|
497
649
|
client = StripeClient.new
|
498
|
-
client.execute_request(:get, '/v1/invoices/upcoming',
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
650
|
+
client.execute_request(:get, '/v1/invoices/upcoming', params: {
|
651
|
+
customer: 'cus_123',
|
652
|
+
coupon: ''
|
653
|
+
})
|
654
|
+
assert_requested(
|
655
|
+
:get,
|
656
|
+
"#{Stripe.api_base}/v1/invoices/upcoming?",
|
657
|
+
query: {
|
658
|
+
customer: 'cus_123',
|
659
|
+
coupon: ''
|
660
|
+
}
|
661
|
+
)
|
504
662
|
end
|
505
663
|
|
506
664
|
should 'filter nils in params' do
|
507
665
|
client = StripeClient.new
|
508
|
-
client.execute_request(:get, '/v1/invoices/upcoming',
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
666
|
+
client.execute_request(:get, '/v1/invoices/upcoming', params: {
|
667
|
+
customer: 'cus_123',
|
668
|
+
coupon: nil
|
669
|
+
})
|
670
|
+
assert_requested(
|
671
|
+
:get,
|
672
|
+
"#{Stripe.api_base}/v1/invoices/upcoming?",
|
673
|
+
query: {
|
674
|
+
customer: 'cus_123'
|
675
|
+
}
|
676
|
+
)
|
513
677
|
end
|
514
678
|
end
|
515
679
|
end
|
@@ -517,7 +681,7 @@ module Stripe
|
|
517
681
|
context "#request" do
|
518
682
|
should "return a result and response object" do
|
519
683
|
stub_request(:post, "#{Stripe.api_base}/v1/charges").
|
520
|
-
to_return(body: JSON.generate(
|
684
|
+
to_return(body: JSON.generate({ object: "charge" }))
|
521
685
|
|
522
686
|
client = StripeClient.new
|
523
687
|
charge, resp = client.request { Charge.create }
|