Skip to content

Commit

Permalink
Fixes #221
Browse files Browse the repository at this point in the history
  • Loading branch information
ob-stripe committed Apr 11, 2016
1 parent cf407fb commit 4c1ca48
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 40 deletions.
5 changes: 4 additions & 1 deletion stripe/resource.py
Expand Up @@ -393,7 +393,10 @@ def list(cls, api_key=None, idempotency_key=None,
requestor = api_requestor.APIRequestor(api_key, account=stripe_account)
url = cls.class_url()
response, api_key = requestor.request('get', url, params)
return convert_to_stripe_object(response, api_key, stripe_account)
stripe_object = convert_to_stripe_object(response, api_key,
stripe_account)
stripe_object._retrieve_params = params
return stripe_object


class CreateableAPIResource(APIResource):
Expand Down
63 changes: 39 additions & 24 deletions stripe/test/resources/test_list_object.py
Expand Up @@ -57,52 +57,67 @@ def test_retrieve(self):

class AutoPagingTests(StripeApiTestCase):

def test_iter_one_page(self):
lo = stripe.resource.ListObject.construct_from({
@staticmethod
def pageable_model_response(ids, has_more):
return {
'object': 'list',
'url': '/my/path',
'data': [{'id': 'foo'}],
}, 'mykey')
'url': '/v1/pageablemodels',
'data': [{'id': id, 'object': 'pageablemodel'} for id in ids],
'has_more': has_more,
}

def test_iter_one_page(self):
lo = stripe.resource.ListObject.construct_from(
self.pageable_model_response(['pm_123', 'pm_124'], False),
'mykey'
)

self.requestor_mock.request.assert_not_called()

seen = [item['id'] for item in lo.auto_paging_iter()]

self.assertEqual(['foo'], seen)
self.assertEqual(['pm_123', 'pm_124'], seen)

def test_iter_two_pages(self):
lo = stripe.resource.ListObject.construct_from({
'object': 'list',
'url': '/my/path',
'has_more': True,
'data': [{'id': 'foo'}],
}, 'mykey')
lo = stripe.resource.ListObject.construct_from(
self.pageable_model_response(['pm_123', 'pm_124'], True),
'mykey'
)
lo._retrieve_params = {'foo': 'bar'}

self.mock_response({
'object': 'list',
'data': [{'id': 'bar'}],
'url': '/my/path',
'has_more': False,
})
self.mock_response(
self.pageable_model_response(['pm_125', 'pm_126'], False)
)

seen = [item['id'] for item in lo.auto_paging_iter()]

self.requestor_mock.request.assert_called_with(
'get', '/my/path', {'starting_after': 'foo'}, None)
'get',
'/v1/pageablemodels',
{
'starting_after': 'pm_124',
'foo': 'bar'
},
None
)

self.assertEqual(['foo', 'bar'], seen)
self.assertEqual(['pm_123', 'pm_124', 'pm_125', 'pm_126'], seen)

def test_class_method_two_pages(self):
self.mock_response({
'object': 'list',
'data': [{'id': 'bar'}],
'data': [{'id': 'ch_001'}],
'url': '/v1/charges',
'has_more': False,
})

seen = [i['id'] for i in stripe.Charge.auto_paging_iter(limit=25)]
seen = [item['id'] for item in stripe.Charge.auto_paging_iter(
limit=25,
foo='bar'
)]

self.requestor_mock.request.assert_called_with(
'get', '/v1/charges', {'limit': 25})
'get', '/v1/charges', {'limit': 25, 'foo': 'bar'}
)

self.assertEqual(['bar'], seen)
self.assertEqual(['ch_001'], seen)
36 changes: 21 additions & 15 deletions stripe/test/resources/test_listable.py
Expand Up @@ -7,23 +7,29 @@
class ListableAPIResourceTests(StripeApiTestCase):

def test_all(self):
self.mock_response([
{
'object': 'charge',
'name': 'jose',
},
{
'object': 'charge',
'name': 'curly',
}
])
self.mock_response({
'object': 'list',
'data': [
{
'object': 'charge',
'name': 'jose',
},
{
'object': 'charge',
'name': 'curly',
}
],
'url': '/v1/charges',
'has_more': False,
})

res = MyListable.all()
res = MyListable.list()

self.requestor_mock.request.assert_called_with(
'get', '/v1/mylistables', {})

self.assertEqual(2, len(res))
self.assertTrue(all(isinstance(obj, stripe.Charge) for obj in res))
self.assertEqual('jose', res[0].name)
self.assertEqual('curly', res[1].name)
self.assertEqual(2, len(res.data))
self.assertTrue(all(isinstance(obj, stripe.Charge)
for obj in res.data))
self.assertEqual('jose', res.data[0].name)
self.assertEqual('curly', res.data[1].name)

0 comments on commit 4c1ca48

Please sign in to comment.