Skip to content

Commit

Permalink
Merge pull request #394 from stripe/ob-fix-393
Browse files Browse the repository at this point in the history
Make last_response available on save()
  • Loading branch information
ob-stripe authored Feb 8, 2018
2 parents b550ab3 + 694ec1b commit a938c35
Show file tree
Hide file tree
Showing 10 changed files with 66 additions and 23 deletions.
4 changes: 2 additions & 2 deletions stripe/oauth.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@ def token(**params):
requestor = api_requestor.APIRequestor(api_base=connect_api_base)
response, api_key = requestor.request(
'post', '/oauth/token', params, None)
return response
return response.data

@staticmethod
def deauthorize(**params):
requestor = api_requestor.APIRequestor(api_base=connect_api_base)
OAuth._set_client_id(params)
response, api_key = requestor.request(
'post', '/oauth/deauthorize', params, None)
return response
return response.data
3 changes: 2 additions & 1 deletion stripe/stripe_object.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,8 @@ def refresh_from(self, values, api_key=None, partial=False,
stripe_version or getattr(values, 'stripe_version', None)
self.stripe_account = \
stripe_account or getattr(values, 'stripe_account', None)
self._last_response = last_response
self._last_response = \
last_response or getattr(values, '_last_response', None)

# Wipe old state before setting new. This is useful for e.g.
# updating a customer, where there is no persistent card
Expand Down
6 changes: 5 additions & 1 deletion tests/api_resources/abstract/test_api_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ def test_retrieve_and_refresh(self):
{
'id': 'foo2',
'bobble': 'scrobble',
}
},
rheaders={'request-id': 'req_id'}
)

res = MyResource.retrieve('foo*', myparam=5)
Expand All @@ -35,6 +36,9 @@ def test_retrieve_and_refresh(self):
self.assertEqual('foo2', res.id)
self.assertEqual('sk_test_123', res.api_key)

self.assertTrue(res.last_response is not None)
self.assertEqual('req_id', res.last_response.request_id)

url = '/v1/myresources/foo2'
self.stub_request(
'get',
Expand Down
12 changes: 10 additions & 2 deletions tests/api_resources/abstract/test_createable_api_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ def test_create(self):
{
'object': 'charge',
'foo': 'bar',
}
},
rheaders={'request-id': 'req_id'}
)

res = MyCreatable.create()
Expand All @@ -30,14 +31,18 @@ def test_create(self):
self.assertTrue(isinstance(res, stripe.Charge))
self.assertEqual('bar', res.foo)

self.assertTrue(res.last_response is not None)
self.assertEqual('req_id', res.last_response.request_id)

def test_idempotent_create(self):
self.stub_request(
'post',
'/v1/mycreatables',
{
'object': 'charge',
'foo': 'bar',
}
},
rheaders={'idempotency-key': 'foo'}
)

res = MyCreatable.create(idempotency_key='foo')
Expand All @@ -50,3 +55,6 @@ def test_idempotent_create(self):
)
self.assertTrue(isinstance(res, stripe.Charge))
self.assertEqual('bar', res.foo)

self.assertTrue(res.last_response is not None)
self.assertEqual('foo', res.last_response.idempotency_key)
6 changes: 5 additions & 1 deletion tests/api_resources/abstract/test_deletable_api_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ def test_delete(self):
{
'id': 'mid',
'deleted': True,
}
},
rheaders={'request-id': 'req_id'}
)

obj = MyDeletable.construct_from({
Expand All @@ -31,3 +32,6 @@ def test_delete(self):
)
self.assertEqual(True, obj.deleted)
self.assertEqual('mid', obj.id)

self.assertTrue(obj.last_response is not None)
self.assertEqual('req_id', obj.last_response.request_id)
6 changes: 5 additions & 1 deletion tests/api_resources/abstract/test_listable_api_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ def test_all(self):
],
'url': '/v1/charges',
'has_more': False,
}
},
rheaders={'request-id': 'req_id'}
)

res = MyListable.list()
Expand All @@ -42,3 +43,6 @@ def test_all(self):
for obj in res.data))
self.assertEqual('jose', res.data[0].name)
self.assertEqual('curly', res.data[1].name)

self.assertTrue(res.last_response is not None)
self.assertEqual('req_id', res.last_response.request_id)
5 changes: 4 additions & 1 deletion tests/api_resources/abstract/test_singleton_api_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ def test_retrieve(self):
'/v1/mysingleton',
{
'single': 'ton'
}
},
rheaders={'request-id': 'req_id'}
)

res = MySingleton.retrieve()
Expand All @@ -27,3 +28,5 @@ def test_retrieve(self):
{}
)
self.assertEqual('ton', res.single)
self.assertTrue(res.last_response is not None)
self.assertEqual('req_id', res.last_response.request_id)
6 changes: 5 additions & 1 deletion tests/api_resources/abstract/test_updateable_api_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ def setUp(self):
{
'id': 'myid',
'thats': 'it',
}
},
rheaders={'request-id': 'req_id'}
)

self.obj = MyUpdateable.construct_from({
Expand Down Expand Up @@ -79,6 +80,9 @@ def test_save(self):
None
)

self.assertTrue(self.obj.last_response is not None)
self.assertEqual('req_id', self.obj.last_response.request_id)

# Saving again should not cause any request.
self.request_mock.reset_mock()
self.checkSave()
Expand Down
24 changes: 15 additions & 9 deletions tests/request_mock.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
from mock import patch, ANY

import stripe
from stripe import six
from stripe.stripe_response import StripeResponse


class RequestMock(object):
Expand All @@ -28,14 +30,15 @@ def stop(self):
self.constructor_patcher.stop()

def _patched_request(self, requestor, method, url, *args, **kwargs):
response_body = self._stub_request_handler.get_response(method, url)
if response_body is not None:
return response_body, stripe.api_key
response = self._stub_request_handler.get_response(method, url)
if response is not None:
return response, stripe.api_key

return self._real_request(requestor, method, url, *args, **kwargs)

def stub_request(self, method, url, response_body={}):
self._stub_request_handler.register(method, url, response_body)
def stub_request(self, method, url, rbody={}, rcode=200, rheaders={}):
self._stub_request_handler.register(method, url, rbody, rcode,
rheaders)

def assert_api_version(self, expected_api_version):
# Note that this method only checks that an API version was provided
Expand Down Expand Up @@ -94,12 +97,15 @@ class StubRequestHandler(object):
def __init__(self):
self._entries = {}

def register(self, method, url, response_body={}):
self._entries[(method, url)] = response_body
def register(self, method, url, rbody={}, rcode=200, rheaders={}):
self._entries[(method, url)] = (rbody, rcode, rheaders)

def get_response(self, method, url):
if (method, url) in self._entries:
response_body = self._entries.pop((method, url))
return response_body
rbody, rcode, rheaders = self._entries.pop((method, url))
if not isinstance(rbody, six.string_types):
rbody = stripe.util.json.dumps(rbody)
stripe_response = StripeResponse(rbody, rcode, rheaders)
return stripe_response

return None
17 changes: 13 additions & 4 deletions tests/test_stripe_object.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import datetime
import pickle
from copy import copy, deepcopy
from mock import Mock

import stripe
from stripe import util, six
Expand Down Expand Up @@ -106,18 +107,26 @@ def test_refresh_from(self):
self.assertEqual('me', obj['trans'])
self.assertEqual(None, obj.stripe_version)
self.assertEqual(None, obj.stripe_account)
self.assertEqual(None, obj.last_response)

obj.refresh_from({
'foo': 'baz',
'johnny': 5,
}, 'key2', stripe_version='2017-08-15', stripe_account='acct_foo')
last_response = Mock()
obj.refresh_from(
{
'foo': 'baz',
'johnny': 5,
}, 'key2',
stripe_version='2017-08-15',
stripe_account='acct_foo',
last_response=last_response
)

self.assertEqual(5, obj.johnny)
self.assertEqual('baz', obj.foo)
self.assertRaises(AttributeError, getattr, obj, 'trans')
self.assertEqual('key2', obj.api_key)
self.assertEqual('2017-08-15', obj.stripe_version)
self.assertEqual('acct_foo', obj.stripe_account)
self.assertEqual(last_response, obj.last_response)

obj.refresh_from({
'trans': 4,
Expand Down

0 comments on commit a938c35

Please # to comment.