From 4c1ca489e80a0cbe52d589ddf184458d2d46b96a Mon Sep 17 00:00:00 2001 From: Olivier Bellone Date: Mon, 11 Apr 2016 20:00:54 +0200 Subject: [PATCH] Fixes #221 --- stripe/resource.py | 5 +- stripe/test/resources/test_list_object.py | 63 ++++++++++++++--------- stripe/test/resources/test_listable.py | 36 +++++++------ 3 files changed, 64 insertions(+), 40 deletions(-) diff --git a/stripe/resource.py b/stripe/resource.py index b08c2100a..bca465996 100644 --- a/stripe/resource.py +++ b/stripe/resource.py @@ -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): diff --git a/stripe/test/resources/test_list_object.py b/stripe/test/resources/test_list_object.py index ca2cc451b..addeeb8d6 100644 --- a/stripe/test/resources/test_list_object.py +++ b/stripe/test/resources/test_list_object.py @@ -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) diff --git a/stripe/test/resources/test_listable.py b/stripe/test/resources/test_listable.py index c0a4fb6b1..aff9c563d 100644 --- a/stripe/test/resources/test_listable.py +++ b/stripe/test/resources/test_listable.py @@ -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)