stripe-ruby/test/stripe/list_object_test.rb
Brandur 3f549fb5ad Port all tests over to OpenAPI
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.
2017-02-14 12:17:37 -08:00

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