mirror of
https://github.com/stripe/stripe-ruby.git
synced 2025-10-06 00:02:18 -04:00
Follows the path established in 2d75c8f by porting the rest of stripe-ruby's tests over to OpenAPI. There are a few other changes here where I've removed some tests that are duplicated or don't make much sense, or reorganized how we test certain things, but this commit is largely the same migration operation applied in bulk a few dozen test suites.
171 lines
5.2 KiB
Ruby
171 lines
5.2 KiB
Ruby
require File.expand_path('../../test_helper', __FILE__)
|
|
|
|
module Stripe
|
|
class ListObjectTest < Test::Unit::TestCase
|
|
should "provide .empty_list" do
|
|
list = Stripe::ListObject.empty_list
|
|
assert list.empty?
|
|
end
|
|
|
|
should "provide #count via enumerable" do
|
|
list = Stripe::ListObject.construct_from({
|
|
data: [API_FIXTURES.fetch(:charge)]
|
|
})
|
|
assert_equal 1, list.count
|
|
end
|
|
|
|
should "provide #each" do
|
|
arr = [
|
|
{ :id => 1 },
|
|
{ :id => 2 },
|
|
{ :id => 3 },
|
|
]
|
|
expected = Util.convert_to_stripe_object(arr, {})
|
|
list = Stripe::ListObject.construct_from({ :data => arr })
|
|
assert_equal expected, list.each.to_a
|
|
end
|
|
|
|
should "provide #auto_paging_each" do
|
|
arr = [
|
|
{ :id => 1 },
|
|
{ :id => 2 },
|
|
{ :id => 3 },
|
|
]
|
|
expected = Util.convert_to_stripe_object(arr, {})
|
|
|
|
list = TestListObject.construct_from({
|
|
:data => [{ :id => 1 }],
|
|
:has_more => true,
|
|
:url => "/things",
|
|
})
|
|
stub_request(:get, "#{Stripe.api_base}/things").
|
|
with(query: { starting_after: "1" }).
|
|
to_return(body: JSON.generate({ :data => [{ :id => 2 }, { :id => 3}], :has_more => false }))
|
|
|
|
assert_equal expected, list.auto_paging_each.to_a
|
|
end
|
|
|
|
should "provide #auto_paging_each that responds to a block" do
|
|
arr = [
|
|
{ :id => 1 },
|
|
{ :id => 2 },
|
|
{ :id => 3 },
|
|
]
|
|
expected = Util.convert_to_stripe_object(arr, {})
|
|
|
|
list = TestListObject.construct_from({
|
|
:data => [{ :id => 1 }],
|
|
:has_more => true,
|
|
:url => "/things",
|
|
})
|
|
stub_request(:get, "#{Stripe.api_base}/things").
|
|
with(query: { starting_after: "1" }).
|
|
to_return(body: JSON.generate({ :data => [{ :id => 2 }, { :id => 3}], :has_more => false }))
|
|
|
|
actual = []
|
|
list.auto_paging_each do |obj|
|
|
actual << obj
|
|
end
|
|
|
|
assert_equal expected, actual
|
|
end
|
|
|
|
should "provide #empty?" do
|
|
list = Stripe::ListObject.construct_from({ :data => [] })
|
|
assert list.empty?
|
|
list = Stripe::ListObject.construct_from({ :data => [{}] })
|
|
refute list.empty?
|
|
end
|
|
|
|
#
|
|
# next_page
|
|
#
|
|
|
|
should "fetch a next page through #next_page" do
|
|
list = TestListObject.construct_from({
|
|
:data => [{ :id => 1 }],
|
|
:has_more => true,
|
|
:url => "/things",
|
|
})
|
|
stub_request(:get, "#{Stripe.api_base}/things").
|
|
with(query: { starting_after: "1" }).
|
|
to_return(body: JSON.generate({ :data => [{ :id => 2 }], :has_more => false }))
|
|
next_list = list.next_page
|
|
refute next_list.empty?
|
|
end
|
|
|
|
should "fetch a next page through #next_page and respect limit" do
|
|
list = TestListObject.construct_from({
|
|
:data => [{ :id => 1 }],
|
|
:has_more => true,
|
|
:url => "/things",
|
|
})
|
|
list.filters = { :expand => ['data.source'], :limit => 3 }
|
|
stub_request(:get, "#{Stripe.api_base}/things").
|
|
with(query: { "expand[]" => "data.source", "limit" => "3", "starting_after" => "1" }).
|
|
to_return(body: JSON.generate({ :data => [{ :id => 2 }], :has_more => false }))
|
|
next_list = list.next_page
|
|
assert_equal({ :expand => ['data.source'], :limit => 3 }, next_list.filters)
|
|
end
|
|
|
|
should "fetch an empty page through #next_page" do
|
|
list = TestListObject.construct_from({
|
|
:data => [{ :id => 1 }],
|
|
:has_more => false,
|
|
:url => "/things",
|
|
})
|
|
next_list = list.next_page
|
|
assert_equal Stripe::ListObject.empty_list, next_list
|
|
end
|
|
|
|
#
|
|
# previous_page
|
|
#
|
|
|
|
should "fetch a next page through #previous_page" do
|
|
list = TestListObject.construct_from({
|
|
:data => [{ :id => 2 }],
|
|
:url => "/things",
|
|
})
|
|
stub_request(:get, "#{Stripe.api_base}/things").
|
|
with(query: { ending_before: "2" }).
|
|
to_return(body: JSON.generate({ :data => [{ :id => 1 }] }))
|
|
next_list = list.previous_page
|
|
refute next_list.empty?
|
|
end
|
|
|
|
should "fetch a next page through #previous_page and respect limit" do
|
|
list = TestListObject.construct_from({
|
|
:data => [{ :id => 2 }],
|
|
:url => "/things",
|
|
})
|
|
list.filters = { :expand => ['data.source'], :limit => 3 }
|
|
stub_request(:get, "#{Stripe.api_base}/things").
|
|
with(query: { "expand[]" => "data.source", "limit" => "3", "ending_before" => "2" }).
|
|
to_return(body: JSON.generate({ :data => [{ :id => 1 }] }))
|
|
next_list = list.previous_page
|
|
assert_equal({ :expand => ['data.source'], :limit => 3 }, next_list.filters)
|
|
end
|
|
|
|
#
|
|
# backward compatibility
|
|
#
|
|
|
|
# note that the name #all is deprecated, as is using it fetch the next page
|
|
# in a list
|
|
should "be able to retrieve full lists given a listobject" do
|
|
c = Stripe::Charge.all
|
|
assert c.kind_of?(Stripe::ListObject)
|
|
assert_equal('/v1/charges', c.resource_url)
|
|
all = c.all
|
|
assert all.kind_of?(Stripe::ListObject)
|
|
assert_equal('/v1/charges', all.resource_url)
|
|
assert all.data.kind_of?(Array)
|
|
end
|
|
end
|
|
end
|
|
|
|
# A helper class with a URL that allows us to try out pagination.
|
|
class TestListObject < Stripe::ListObject
|
|
end
|