mirror of
https://github.com/stripe/stripe-ruby.git
synced 2025-10-07 00:05:33 -04:00
171 lines
5.3 KiB
Ruby
171 lines
5.3 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(make_charge_array)
|
|
assert_equal 3, 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
|
|
stub_request(:get, "#{Stripe.api_base}/v1/charges").
|
|
to_return(body: JSON.generate(make_charge_array))
|
|
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
|